Skip to main content

Compatibility and capabilities

This page distinguishes three different claims:

  • client compatibility comes from the database vendor;
  • implemented means Nodal has a provider implementation and automated compiler or contract tests;
  • live verified means the repository exercises the feature against the exact database baseline listed below.

Nodal does not infer that a feature exists merely because a driver can connect to a server version.

Version policy​

ComponentNodal baselineVendor compatibilityCurrent verification
.NET.NET 10Nodal packages currently target net10.0Build, unit tests, package validation
Neo4j driverNeo4j.Driver 6.3.0Driver 6.x supports Neo4j 4.4.x, 5.x, 2025.x, and 2026.xPackage and compiler tests
Neo4j databaseNeo4j 5.26 CommunityWider connectivity follows the official driver policyLive query, mutation, and rollback baseline; migration compiler/unit verified
Neo4j GDSGDS 2.13 is the official match for Neo4j 5.26GDS must match the server according to Neo4j's compatibility matrixCurrent procedure compiler verified; per-algorithm 2.13 live certification pending
TigerGraphTigerGraph 4.2.4 CommunityNo wider Nodal compatibility promise yetLive REST++ query/mutation plus GSQL migration apply, cleanup, restart, history, and revert baseline; analytics endpoint contract verified

References: Neo4j .NET Driver compatibility and Neo4j–GDS compatibility matrix.

The Docker images in compose.local.yml are the executable source for the live QA versions. Supporting a newer database version requires updating that baseline and passing the live suite; changing only this table is not sufficient.

Dependabot checks NuGet, documentation npm packages, Docker database images, and GitHub Actions every week. Its pull requests target developer. An update PR is a notification, not an automatic compatibility promise: database baselines move only after the relevant compiler and live integration suites pass.

Provider feature matrix​

Legend: Yes is implemented; Conditional requires the condition shown; No fails explicitly.

CapabilityNeo4jTigerGraph
Parameterized node filtering and orderingYes, CypherYes, interpreted GSQL
Fixed directed/undirected traversalYesYes
Variable-depth traversalYesConditional: GSQL Syntax V2
Optional matchYesNo
Vertex-simple variable-depth pathYesNo: intermediate aliases are unavailable
Client-managed multi-command transactionYesNo: request or installed-query boundary
Atomic mutation planYesConditional: REST++ or installed mutation query
Migration executionYesConditional: verified administrative control plane and graph lock
Centrality/community analyticsConditional: compatible GDS and named projectionConditional: configured installed GSQL query
Weighted analyticsAlgorithm-specific GDS capabilityExplicitly declared per installed query
Analytics deployment discoveryLive GDS discovery with bounded cacheConfigured installed-query snapshot
Analytics projection lifecycleYes: explicit create/reuse/dropNot applicable; algorithms use the database graph
Typed shortest-path resultYes: native CypherConditional: configured installed GSQL query
Weighted shortest pathsConditional: GDS Dijkstra, A*, YenConditional: configured weighted installed query

Migration evolution matrix​

Migration operations are analyzed before provider transport. A provider must compile an operation explicitly; Nodal never emulates an unsupported change by loading the graph into application memory.

OperationNeo4jTigerGraph
Add node/relation propertyNative graph flexibility; reported as a warning with no DDLALTER VERTEX/EDGE ADD ATTRIBUTE
Drop node/relation propertyNative graph flexibility; reported as a warning with no DDLALTER VERTEX/EDGE DROP ATTRIBUTE
Rename propertyWarning-only on Neo4j; application data rewrite remains explicitUnsupported; use an explicit provider backfill
Alter property typeUnsupported without an explicit backfillUnsupported without an explicit backfill
Drop indexTyped Cypher DROP INDEXTyped ALTER VERTEX ... DROP INDEX
Drop unique constraintTyped Cypher DROP CONSTRAINTUnsupported beyond primary IDs
Destructive operationsRequire AllowDestructiveOperations = trueRequire AllowDestructiveOperations = true

Type rewrites and large data changes use the bounded backfill contract. Batch size, continuation tokens, cancellation, retry, and recovery behavior must be defined by the application/provider integration; no provider silently converts or deletes persisted values.

Analytics algorithm matrix​

All algorithms below exist in the portable contract. “Compiler” does not mean that the optional database component has been installed or live-certified.

FamilyAlgorithmsNeo4jTigerGraph
CentralityArticleRank, articulation points, betweenness, bridges, CELF, closeness, degree, eigenvector, harmonic, HITS, PageRankGDS stream compiler; deployment allow-list supportedInstalled-query mapping; unavailable until configured
Community and cohesionClique counting, conductance, HDBSCAN, K-core, K-1 coloring, K-means, label propagation, Leiden, local clustering coefficient, Louvain, modularity, modularity optimization, SCC, triangle count, WCC, approximate maximum k-cut, SLLPAGDS stream compiler; deployment allow-list supportedInstalled-query mapping; unavailable until configured
Path findingUnweighted shortest path, all shortest paths, Dijkstra, A*, Yen k-shortest pathsNative Cypher for unweighted paths; GDS compiler for weighted pathsInstalled-query mapping with canonical route response

Neo4j can restrict advertised algorithms to the procedures actually available in a deployment:

var options = new Neo4jOptions
{
Endpoint = new Uri("neo4j://localhost:7687"),
Username = "neo4j",
Password = "secret",
GraphDataScienceEnabled = true,
AnalyticsAlgorithms = new HashSet<GraphAnalyticsAlgorithm>
{
GraphAnalyticsAlgorithm.PageRank,
GraphAnalyticsAlgorithm.Louvain
}
};

Use context.Database.GetAnalyticsRuntime().DiscoverAsync() to read and cache gds.list(), gds.version(), and projection names. The deployment allow-list remains explicit so a newly installed server procedure cannot silently expand application permissions.

TigerGraph requires both the installed-query mapping and an explicit declaration for queries that accept weights:

var options = new TigerGraphOptions
{
Endpoint = new Uri("https://example.i.tgcloud.io/"),
AccessToken = "secret-token",
AnalyticsQueries = new Dictionary<GraphAnalyticsAlgorithm, string>
{
[GraphAnalyticsAlgorithm.PageRank] = "nodal_pagerank"
},
WeightedAnalyticsAlgorithms = new HashSet<GraphAnalyticsAlgorithm>
{
GraphAnalyticsAlgorithm.PageRank
}
};

An unsupported algorithm or semantic option is rejected before database transport. Nodal never downloads the graph to simulate missing server functionality.