Release Date: 13 October 2023
GDS 2.5.0 is compatible with Neo4j 5 (≥ 5.6) & 4.4 versions (≥ 4.4.9). For GDS compatibility with previous releases, please use GDS Compatibility Table.

Breaking changes

  • Dropped support for earlier version of Neo4j 5, in particular 5.1, 5.2, 5.3, 5.4, and 5.5 are no longer supported and GDS is no longer compatible with those versions.

New features

Major

  • Added new algorithms for directed acyclic graphs:
    • gds.dag.topologicalSort.stream
    • gds.dag.longestPath.stream
  • Deprecating alpha and beta namespace for procedures and algorithms, and improving many to production grade – see details in ‘Full list of procedure being promoted’

Minor

  • Added procedure to retrieve the version of the installed GDS
    • CALL gds.version
  • Add new procedure, gds.license.state to verify the license state of the Graph Data Science library. Also, analogous adding a new function gds.isLicensed().
  • Added memory estimation for modularity calculation via procedures gds.modularity.[stream|stats].estimate
  • Added memory estimation for filtered KNN via procedures gds.knn.filtered.[mutate|stream|stats|write].estimate
  • Added Stats and Write modes for Harmonic Closeness Centrality
  • Added new procedures for SCC:
    • gds.scc.mutate
    • gds.scc.stats
  • Added memory estimation to SCC:
    • gds.scc.stream.estimate
    • gds.scc.stats.estimate
    • gds.scc.mutate.estimate
    • gds.scc.write.estimate
  • Added consecutiveIds parameter to gds.scc procedures to output the components in a consecutive id space.
  • Added memory estimation for Steiner Tree via procedures gds.steinerTree.[mutate|stream|stats|write].estimate
  • Added stats mode for gds.modularityOptimization

Bug fixes

  • Fixed a bug that in logging progress of Prepare Batches in GraphSAGE training.
  • Fixed a bug where KNN would compute incorrect EUCLIDEAN similarity.
  • Fixed a bug where limits validation could potentially not be triggered with configuration settings passed by from specified defaults.
  • Fixed a bug where gds.graph.filter would list a relationship type of __ALL__ even if all relationships were filtered out.
  • Fixed a bug where Triangle Count could compute an incorrect number of triangles when the maxDegree parameter was specified.
  • Fixed a bug where Triangle Count could compute an incorrect number of triangles when multiple relationship types are specified.

Improvements

  • The random graph generation procedure now will return a different graph each time gds.beta.graph.generate is called without specifying a random seed. Furthermore, when the seed is specified, the resulting graph will always have the same topology.
  • It is now possible to specify common node labels when importing nodes via arrow.
  • A better error message is thrown when encountering null values in the nodeLabels column when importing nodes via arrow.
  • Added the configuration option listNodeLabels for the node property stream procedures that will trigger listing all node labels for the respective node.
  • Added the configuration option list_node_labels for the node property stream arrow endpoints that will trigger listing all node labels for the respective node.
  • The Cypher projection now returns the executing query as part of the projection result as well as part of the gds.graph.list output.
  • Support passing startNodes to gds.graph.sample.cnarw as node objects instead of only node ids.
  • Support passing nodeId to gds.util.nodeProperty as node objects instead of only node id.
  • Improved validation for relationship projections: If a global SUM, MIN, MAX or COUNT aggregation is defined, there needs to be at least one property mapping.
  • HITS algorithm procedures have a default hitsIterations value of 20
  • More accurate progress tracking for the gds.scc algorithm.
  • The componentDistribution and communityDistribution parameters now also include the p1, p5,p10, p25 percentiles. This affects algorithms in the Community Detection category.

Full list of procedure being promoted

  • Promoting Model Catalog procedures:
    • gds.beta.model.drop, deprecated by gds.model.drop
      • Return column shared renamed to published
      • modelName, modelType extracted to separate return columns
    • gds.beta.model.exists, deprecated by gds.model.exists
    • gds.beta.model.list, deprecated by gds.model.list
      • Return column shared renamed to published
      • modelName, modelType extracted to separate return columns
    • gds.alpha.model.delete, deprecated by gds.model.delete
    • gds.alpha.model.load, deprecated by gds.model.load
    • gds.alpha.model.publish, deprecated by gds.model.publish
      • Return column shared renamed to published
      • modelName, modelType extracted to separate return columns
    • gds.alpha.model.store, deprecated by gds.model.store
  • Promoting Pipeline Catalog procedures:
    • gds.beta.pipeline.drop, deprecated by gds.pipeline.drop
    • gds.beta.pipeline.exists, deprecated by gds.pipeline.exists
    • gds.beta.pipeline.list, deprecated by gds.pipeline.list
    • Procedure gds.alpha.systemMonitor is deprecated by gds.systemMonitor
    • Procedure gds.beta.listProgress is deprecated by gds.listProgress
    • Procedure gds.alpha.triangles is deprecated by gds.triangles
  • Deprecating gds.beta.steinerTree procedures
    • gds.beta.steinerTree.mutate, deprecated by gds.steinerTree.mutate
    • gds.beta.steinerTree.stats, deprecated by gds.steinerTree.stats
    • gds.beta.steinerTree.stream, deprecated by gds.steinerTree.stream
    • gds.beta.steinerTree.write, deprecated by gds.steinerTree.write
  • Deprecating gds.beta.spanningTree procedures
    • gds.beta.spanningTree.mutate[.estimate], deprecated by gds.spanningTree.mutate[.estimate]
    • gds.beta.spanningTree.stats[.estimate], deprecated by gds.spanningTree.stats[.estimate]
    • gds.beta.spanningTree.stream[.estimate], deprecated by gds.spanningTree.stream[.estimate]
    • gds.beta.spanningTree.write[.estimate], deprecated by gds.spanningTree.write[.estimate]
  • Deprecating gds.alpha.maxkcut procedures
    • gds.alpha.maxkcut.mutate[.estimate], deprecated by gds.maxkcut.mutate[.estimate]
    • gds.alpha.maxkcut.stream[.estimate], deprecated by gds.maxkcut.stream[.estimate]
  • Deprecating gds.beta.closeness procedures
    • gds.beta.closeness.mutate, deprecated by gds.closeness.mutate
      • The mutateProperty field has been removed, it can be accessed via the configuration.
    • gds.beta.closeness.stats, deprecated by gds.closeness.stats
    • gds.beta.closeness.stream, deprecated by gds.closeness.stream
    • gds.beta.closeness.write, deprecated by gds.closeness.write
      • The writeProperty field has been removed, it can be accessed via the configuration.
  • Deprecating gds.beta.leiden procedures
    • gds.beta.leiden.mutate[.estimate], deprecated by gds.leiden.mutate[.estimate]
    • gds.beta.leiden.stats[.estimate], deprecated by gds.leiden.stats[.estimate]
    • gds.beta.leiden.stream[.estimate], deprecated by gds.leiden.stream[.estimate]
    • gds.beta.leiden.write[.estimate], deprecated by gds.leiden.write[.estimate]
  • Deprecating gds.alpha.conductance procedures
    • gds.alpha.conductance.stream, deprecated by gds.conductance.stream
  • Deprecating gds.alpha.modularity procedures
    • gds.alpha.modularity.stream, deprecated by gds.modularity.stream
    • gds.alpha.modularity.stats, deprecated by gds.modularity.stats
  • Deprecating gds.beta.modularityOptimization procedures
    • gds.beta.modularityOptimization.stream[.estimate], deprecated by gds.modularityOptimization.stream[.estimate]
    • gds.beta.modularityOptimization.stats[.estimate], deprecated by gds.modularityOptimization.stats[.estimate]
    • gds.beta.modularityOptimization.stream[.estimate], deprecated by gds.modularityOptimization.stream[.estimate]
    • gds.beta.modularityOptimization.stats[.estimate], deprecated by gds.modularityOptimization.stats[.estimate]
  • Deprecating gds.beta.influenceMaximization.celf procedures
    • gds.beta.influenceMaximization.celf.mutate[.estimate], deprecated by gds.influenceMaximization.celf.mutate[.estimate]
    • gds.beta.influenceMaximization.celf.stats[.estimate], deprecated by gds.influenceMaximization.celf.stats[.estimate]
    • gds.beta.influenceMaximization.celfstream[.estimate], deprecated by gds.influenceMaximization.celf.stream[.estimate]
    • gds.beta.influenceMaximization.celf.write[.estimate], deprecated by gds.influenceMaximization.celf.write[.estimate]
  • Deprecating gds.alpha.knn.filtered procedures
    • gds.alpha.knn.filtered.mutate, deprecated by gds.knn.filtered.mutate
    • gds.alpha.knn.filtered.stats, deprecated by gds.knn.filtered.stats
    • gds.alpha.knn.filtered.stream, deprecated by gds.knn.filtered.stream
    • gds.alpha.knn.filtered.write, deprecated by gds.knn.filtered.write
  • Deprecating gds.alpha.nodeSimilarity.filtered procedures
    • gds.alpha.nodeSimilarity.filtered.mutate[.estimate], deprecated by gds.nodeSimilarity.filtered.mutate[.estimate]
    • gds.alpha.nodeSimilarity.filtered.stats[.estimate], deprecated by gds.nodeSimilarity.filtered.stats[.estimate]
    • gds.alpha.nodeSimilarity.filtered.stream[.estimate], deprecated by gds.nodeSimilarity.filtered.stream[.estimate]
    • gds.alpha.nodeSimilarity.filtered.write[.estimate], deprecated by gds.nodeSimilarity.filtered.write[.estimate]
  • Deprecating gds.alpha.closeness.harmonic procedures
    • gds.alpha.closeness.harmonic.stream, deprecated by gds.closeness.harmonic.stream
    • gds.alpha.closeness.harmonic.write, deprecated by gds.closeness.harmonic.write
  • Deprecating gds.beta.graph.relationships procedures
    • gds.beta.graph.relationships.stream deprecated by gds.graph.relationships.stream
    • gds.beta.graph.relationships.toUndirected, deprecated by gds.graph.relationships.toUndirected
    • gds.beta.graph.relationships.toUndirected.estimate, deprecated by gds.graph.relationships.toUndirected.estimate
  • Deprecating gds.beta.graph.export.csv procedures
    • gds.beta.graph.export.csv, deprecated by gds.graph.export.csv
    • gds.beta.graph.export.csv.estimate, deprecated by gds.graph.export.csv.estimate
  • Deprecating gds.beta.graph.project.subgraph procedures
    • gds.beta.graph.project.subgraph, deprecated by gds.graph.filter
  • Deprecating gds.alpha.scc procedures
    • gds.alpha.scc.stream, deprecated by gds.scc.stream
    • gds.alpha.scc.write, deprecated by gds.scc.write
      • The output of the procedure has been changed to reflect that of WCC:
        • setCount is replaced by componentCount.
        • writeProperty parameter is returned in the configuration map.
        • The values p1,…,p99,minComponentSize,maxComponentSize are returned inside the componentDistribution map.
        • nodePropertiesWritten dictates how many properties to nodes were written
  • Deprecating gds.alpha.backup procedure
    • gds.alpha.backup, deprecated by gds.backup
  • Deprecating gds.alpha.restore procedure
    • gds.alpha.restore, deprecated by gds.restore
  • Deprecating gds.beta.graph.generate procedures
    • gds.beta.graph.generate, deprecated by gds.graph.generate
  • Deprecating gds.beta.kmeans procedures
    • gds.beta.kmeans.mutate[.estimate], deprecated by gds.kmeans.mutate[.estimate]
    • gds.beta.kmeans.stats[.estimate], deprecated by gds.kmeans.stats[.estimate]
    • gds.beta.kmeans.stream[.estimate], deprecated by gds.kmeans.stream[.estimate]
    • gds.beta.kmeans.write[.estimate], deprecated by gds.kmeans.write[.estimate]
    • Procedure gds.beta.collapsePath.mutate is deprecated by gds.collapsePath.mutate
  • Deprecating gds.beta.node2vec procedures:
    • gds.beta.node2vec.mutate[.estimate], deprecated by gds.node2vec.mutate[.estimate]
    • gds.beta.node2vec.stream[.estimate], deprecated by gds.node2vec.stream[.estimate]
    • gds.beta.node2vec.write[.estimate], deprecated by gds.node2vec.write[.estimate]
  • Deprecating gds.graph.graphProperty procedures:
    • gds.alpha.graph.graphProperty.drop, deprecated by gds.graph.graphProperty.drop
    • gds.alpha.graph.graphProperty.stream, deprecated by gds.graph.graphProperty.stream
    • Procedure gds.alpha.kSpanningTree.write is deprecated by gds.kSpanningTree.write
    • Procedure gds.alpha.allShortestPaths.stream is deprecated by gds.allShortestPaths.stream
  • Deprecating gds.alpha.config procedures
    • gds.alpha.config.defaults.list, deprecated by gds.config.defaults.list
    • gds.alpha.config.defaults.set, deprecated by gds.config.defaults.set
    • gds.alpha.config.limits.list, deprecated by gds.config.limits.list
    • gds.alpha.config.limits.set, deprecated by gds.config.limits.set
  • Deprecating gds.alpha.graph.nodeLabel procedures
    • gds.alpha.graph.nodeLabel.write deprecated by gds.graph.nodeLabel.write
    • gds.alpha.graph.nodeLabel.mutate deprecated by gds.graph.nodeLabel.mutate
    • Procedure gds.alpha.userLog is deprecated by gds.userLog
  • Deprecating gds.alpha.sllpa procedures, use gds.sllpa
    • gds.alpha.sllpa.mutate is deprecated by gds.sllpa.mutate
    • gds.alpha.sllpa.stats is deprecated by gds.sllpa.stats
    • gds.alpha.sllpa.stream is deprecated by gds.sllpa.stream
    • gds.alpha.sllpa.write is deprecated by gds.sllpa.write
  • Deprecating gds.alpha.hits procedures, use gds.hits
    • gds.alpha.hits.mutate is deprecated by gds.hits.mutate
    • gds.alpha.hits.stats is deprecated by gds.hits.stats
    • gds.alpha.hits.stream is deprecated by gds.hits.stream
    • gds.alpha.hits.write is deprecated by gds.hits.write
  • Deprecating HashGNN beta procedures
    • gds.beta.hashgnn.mutate is deprecated by gds.hashgnn.mutate
    • gds.beta.hashgnn.mutate.estimate is deprecated by gds.hashgnn.mutate.estimate
    • gds.beta.hashgnn.stream is deprecated by gds.hashgnn.stream
    • gds.beta.hashgnn.stream.estimate is deprecated by gds.hashgnn.stream.estimate
  • Renamed gds.alpha.create.cypherDb to gds.ephemeral.database.create
  • Renamed gds.alpha.drop.cypherDb to gds.ephemeral.database.drop

Other changes

  • Added databaseLocation field to the result of gds.graph.list indicating whether the graph is backed by a local or remote database, or not backed by a database at all.