Back to Grafx

THE RIGHT GRAPH FOR YOUR APPLICATION

One connected world.
Different ways to build it.

Okto Grafx, Ladybug and Neo4j solve different deployment and integration needs. Compare the capabilities, the boundaries and the work each can help you do.

Updated September 13, 2026 · Capabilities, not benchmarks
EMBEDDED PYTHON

Okto Grafx

For local applications that need flexible or typed graphs, composed native queries, exact values, hybrid retrieval and independent local readers and writers.

Evaluate dialect differences, pre-alpha maturity and the upgrade contract.Explore the contracts
EMBEDDED ANALYTICS

Ladybug

For embedded graph analysis with rich typed data, multiple language bindings and file or external-store integrations.

Plan around its documented writable database ownership model.Ladybug documentation
SHARED GRAPH SERVICE

Neo4j

For applications that connect to a graph server and need broad Cypher tooling, drivers and optional enterprise operations.

Account for server operations and CE, EE and library boundaries.Neo4j editions

Fit descriptions are architectural assessments from the cited contracts, not measured product rankings.

THE FEATURE MATRIX

Compare the details.
Keep the boundaries visible.

Native features, extensions and edition-specific capabilities are labeled directly. “Not established” means the review did not verify an equivalent contract.

Reading this comparison

Grafx cells use qualified 0.0.6 development source, including the September 13 native regression and final installed Pulse qualification. These features are separate from the published 0.0.5 package. Ladybug uses 0.20.3 with 16 executed comparison scenarios plus official rolling documentation. Neo4j uses current self-managed documentation: CE is Community; EE is Enterprise. Rolling documentation is not a version-frozen conformance test; Neo4j execution remains deferred. The latest qualification reports supersede pending labels in earlier chronological checkpoints.

Not availablePartialMeetsNot applicable

Flags refer to the capability in each row. Yellow includes narrower scope, an extension, a separate library or edition-dependent availability. Gray marks descriptive attributes that are not scored. A capability not established by this review is not treated as proof of absence; read the cell and its source.

On smaller screens, scroll horizontally to compare all three products.

Feature comparison: validated Grafx 0.0.6 development, Ladybug 0.20.3 and current Neo4j self-managed editions
CAPABILITYOkto Grafx0.0.6 · qualified developmentLadybug0.20.3 · bounded execution + docsNeo4jCurrent docs · CE / EE
Architecture & transactions
Embedded Python databaseMeets

Embedded Python library. In-memory or persistent local storage; no database server.

Source
Meets

Embedded analytical graph engine with Python and other language bindings.

Source
Not available

Python applications use a network driver to connect to the DBMS.

Source
Concurrent accessMeets

Independent local processes can own read/write transactions on one store, with optimistic conflicts and commit-publication fencing.

Source
Partial

Concurrent connections share one writable Database object. Direct file owners: one writable object OR multiple read-only objects. See the multiwrite note below.

Source
Meets

Concurrent clients transact through the server. The DBMS coordinates locks and detects deadlocks.

Source
Isolation & ACIDMeets

ACID within the supported single-store contract. Snapshot reads and optimistic write-conflict validation; not universally serializable.

Source
Meets

ACID transactions. The manual describes serializable execution; validate enabled multiwrite configuration separately.

Source
Meets

ACID transactions with read-committed isolation by default. Explicit locks can strengthen isolation.

Source
Graph modeling, queries & native values
Broad graph query languagePartial

Ordered clauses, correlated OPTIONAL MATCH, EXISTS, bounded named paths and up to 64 UNION / UNION ALL branches. All 3,896 required V3 cases pass; one explicit upstream lists-of-maps divergence prevents a full conformance claim.

Source
Partial

Cypher dialect with macros and typed graphs. The pinned 0.20.3 execution refused selected scoped CALL forms and produced different path multiplicities; neither dialect is established as a superset.

Source
Meets

Labeled property graphs, Cypher, constraints and a broad procedure ecosystem. Dialects still differ.

Source
Typed & flexible graph modelsMeets

Explicit typed tables coexist with flexible unlabeled nodes, dynamic properties and native ANY values. Node labels and relationship types may share a name; identities remain qualified by store, table and kind.

Source
Partial

Structured property graph with declared node and relationship tables. Typed nested columns are supported; this is a different model from flexible, unlabeled entities.

Source
Partial

Flexible labels and properties with constraints. It does not use Grafx-style typed table DDL or store arbitrary nested maps as properties.

Source
Multiple labels & label mutationMeets

Zero, one or multiple versioned labels on one stable node identity. CREATE/MERGE, SET/REMOVE, membership, retained history, copy and transfer/resume preserve labels. Physical typed constraints still apply.

Source
Not available

The pinned 0.20.3 multiple-label scenario refused label SET. Existing node IDs stayed unchanged; this result concerns mutable labels, not all graph update support.

Source
Meets

Native multiple labels and label updates through Cypher SET and REMOVE.

Source
Writing subqueries & scoped importsMeets

Returning and unit writing CALL, explicit/wildcard/leading-WITH imports, nested reads and updating UNION. Private branch effects share one outer statement rollback boundary; no inner commits.

Source
Partial

The pinned run refused scoped CALL and the tested leading-WITH form. This does not prove absence of every CALL, UNION or subquery facility.

Source
Meets

Returning and unit CALL subqueries with scoped variables and graph updates. Syntax and transactional forms remain version-dependent.

Source
Native temporal valuesMeets

DATE, LOCALTIME, TIME, LOCALDATETIME, DATETIME and DURATION with constructors, clocks, arithmetic and durable native values. Equality keys are supported; ordered indexes for these families are refused.

Source
Meets

Native DATE, timestamp families and INTERVAL. The pinned date scenario matched the expected calendar value; families and timezone semantics still require mapping.

Source
Meets

Native date, local/zoned time and datetime, plus duration properties. Temporal values do not by themselves provide historical graph snapshots.

Source
Exact DECIMAL storageMeets

DECIMAL(p,s), up to 38 digits, with exact arithmetic, aggregates, ordering and typed equality-index seeks. Native history/copy and decimal128 columnar exchange preserve precision/scale. No decimal ordered index.

Source
Meets

Native DECIMAL. The pinned storage scenario preserved 1.2500 as DECIMAL(12,4), using an explicitly declared CAST adaptation without a floating-point intermediate.

Source
Not available

The documented native property types do not include a fixed-precision DECIMAL(p,s) type. INTEGER and FLOAT are not an exact decimal storage contract.

Source
Stored nested collectionsMeets

Typed LIST/MAP/ARRAY/STRUCT with nested nullability and exact descriptors, plus heterogeneous ANY values and lists of maps. Native, text and columnar consumers preserve supported types; collection property indexes are refused.

Source
Meets

Nested LIST/ARRAY/STRUCT/MAP/UNION types. A pinned STRUCT[] persistence case matched Grafx LIST<STRUCT> with an explicitly equivalent declaration.

Source
Partial

Homogeneous lists of simple property types can be stored. General maps, heterogeneous collections and lists containing null are not supported as stored properties.

Source
Registered procedures & authorityMeets

Trusted typed read/write/unit procedures with native value/entity signatures, nested calls and explicit transaction-scoped query/schema authority. Revocation and shared budgets apply; external side effects are not rolled back.

Source
Partial

Python and C++ user-defined functions are documented. An equivalent transaction-scoped writing/schema procedure authority contract was not established in this review.

Source
Meets

Custom JVM procedures with READ, WRITE, SCHEMA and DBMS modes. Registration, permissions and execution contracts differ from embedded Python callbacks.

Source
Search & graph intelligence
Vector searchMeets

Native exact and HNSW search with explicit vector spaces, metrics, filters and resource bounds.

Source
Partial

Vector extension with disk-based HNSW and filtered search.

Source
Meets

Native ANN indexes for node/relationship embeddings. VECTOR property storage has separate format and edition conditions.

Source
Full-text searchMeets

Native snapshot-bound weighted BM25 over node/relationship properties, with atomic analyzer/options replacement. New searches use the current analyzer with their owning data snapshot.

Source
Partial

FTS extension with BM25 and configurable stemming and stop words.

Source
Meets

Lucene-based full-text indexes with analyzers and optional eventually-consistent index updates.

Source
Text semantics & analysisPartial

Bounded prefix, exact phrases, persisted token positions and ordered proximity (slop). No phrase/prefix combination, character offsets, stemming or stopword configuration.

Source
Partial

FTS extension with term matching, stemming and stop words. Equivalent typed slop and position-return contracts were not established by this review.

Source
Partial

Lucene query syntax includes quoted exact matches and analyzers. Its visibility and returned evidence differ from the Grafx snapshot and token-position contract.

Source
Hybrid retrievalMeets

Native weighted RRF text/vector fusion with bounded graph evidence, on one snapshot and one target node table.

Source
Partial

Vector and FTS extensions exist. An equivalent single-snapshot RRF plus graph-evidence API was not established in this review.

Source
Partial

Query composition and the separate GraphRAG Python library provide HybridRetriever and HybridCypherRetriever.

Source
Graph algorithmsMeets

Native bounded projections: BFS, Dijkstra, PageRank, WCC/SCC, k-core, label propagation and topological ordering with cycle detection.

Source
Partial

Algo extension: PageRank, shortest paths, components, k-core and Louvain.

Source
Partial

The separate GDS library provides extensive algorithms and ML pipelines, with its own edition limits.

Source
Data interoperabilityMeets

Bounded CSV/JSONL/SQLite plus optional Arrow, Pandas, Polars, Parquet and NetworkX. Exact decimal and typed nested transport preserve descriptors with atomic imports; supported consumers and refusals are explicit.

Source
Meets

CSV, Parquet, NumPy/DataFrames and extensions for external data systems.

Source
Partial

Language drivers, import/export tools and integrations. GDS Arrow capabilities depend on its edition.

Source
Operations & product boundaries
Backup & recoveryMeets

WAL, verified recovery, bounded physical backups and verified offline replacement restore. A physical replacement retains the database identity.

Source
Partial

WAL, checkpoints and export. The reviewed material does not establish the same identity-aware restore contract.

Source
Partial

CE supports offline dump/load. EE adds online backup and restore tooling.

Source
Local catalogs & federationPartial

Attached local catalogs, aliases, permissions and workspace resolution. Each transaction belongs to one store; no cross-store joins, edges or distributed COMMIT.

Source
Partial

ATTACH / DETACH and external-system extensions. This review does not establish equivalent cross-store atomicity guarantees.

Source
Partial

Additional databases and composite databases are Enterprise features, with a different ownership model from embedded local catalogs.

Source
Logical copy & resumptionMeets

Resumable fresh-store transfer and bounded existing-target copy with durable receipts and optional endpoint closure. Qualified consumers preserve multiple labels, flexible/no-PK identities, relationship groups and expanded types. Historical transfer requires explicit current-only semantics.

Source
Partial

CSV, Parquet and JSON export. Equivalent logical identity, durable receipts and resumption guarantees were not established by this review.

Source
Partial

Dump/load and backup tooling provide different transfer contracts from the Grafx typed resumable logical-copy API.

Source
Retained system-time history & diffsMeets

Opt-in as-of reads, versions and graph/schema/property diffs; optional temporal index, retention, pins and quiescent physical compaction. Captures history from activation; no valid time or full bitemporality.

Source
Partial

Temporal value types exist. Equivalent native retained graph versions and diffs were not established by this review.

Source
Partial

CDC is available in Enterprise and specified Aura tiers. Change capture does not establish native arbitrary historical graph snapshots or equivalent diffs.

Source
Remote service & availabilityNot available

No native network service, replication or HA cluster. Direct local multi-process access is not replication.

Source
Partial

Embedded ownership; a service can wrap the engine. Native HA clustering was not established by this review.

Source
Partial

Client/server architecture. CE is single-instance; EE adds clustering and failover.

Source
AuthorizationNot available

Host application and filesystem policy own access. No native users, RBAC, TLS service boundary or at-rest encryption.

Source
Not available

Embedded database ownership is not an application user/RBAC system.

Source
Partial

Server authentication; advanced RBAC and LDAP are Enterprise capabilities.

Source
Developer toolsPartial

Python API, JSON CLI inventories/search, JS/TS subprocess recipe and script-free offline HTML snapshots. No native network driver or interactive GUI. Pulse supplies its own UI/MCP.

Source
Meets

CLI, Ladybug Explorer and visualization integrations.

Source
Meets

Neo4j Browser, Cypher Shell and additional tools; some are separate products.

Source
LicenseNot applicable

Elastic License 2.0 plus the SaaS/Branding Addendum. Source available; review the actual terms.

Source
Not applicable

MIT license.

Source
Not applicable

Community: GPLv3. Enterprise: separate licensing.

Source

0.0.6 / QUALIFIED DEVELOPMENT

The graph is evolving.
Here is what has changed.

These additions are included in the 0.0.6 comparison above. They have completed local acceptance and remain separate from the published 0.0.5 package.

NATIVE + CONSUMER QUALIFICATION

Current qualification covers the expanded language, labels, exact types, trusted procedures and their consumers. The installed label-format matrix records 36 native scenarios and 36 transfer worker checks. New native formats require compatible participants; a passing development build is not a release or production-maturity guarantee. Read the upgrade contract.

01

A graph that can change shape

Classify the same entity with multiple labels, add flexible properties and keep typed models where your application needs strict constraints. Preserve identity through label changes, history and copies.

Flexible storage does not bypass physical typed constraints. Nested values and ANY properties do not imply arbitrary property-index support.

Read the contract
02

Compose reads and writes together

Express correlated lookups, EXISTS, named paths, conditional MERGE actions and returning or unit writing subqueries. Combine up to 64 UNION branches under one statement rollback boundary.

Scoped imports, resource bounds and native error semantics apply. No inner transaction commits or promise that every vendor query runs unchanged.

Read the contract
03

Keep exact values across integrations

Store exact decimal amounts, calendar and duration values, and typed nested records. Carry supported descriptors through native history, copies, JSON/text and Arrow/Pandas/Polars/Parquet exchange.

Decimal precision is bounded at 38 digits. Consumer support varies by type; decimal ordered indexes and collection property indexes are refused explicitly.

Read the contract
04

Put application logic beside the graph

Register typed procedures that read, write or create permitted schema within the owning transaction. Share query budgets and pass native entities and values without losing their identity.

Callbacks are trusted application code, not sandboxed plugins. Authority expires with its invocation; external side effects have no rollback guarantee.

Read the contract
05

System-time history & graph diffs

Inspect retained nodes, relationships and schema at a commit or timestamp. Compare changes between two commits.

Opt-in from activation; bounded retention. Diffs compare retained commits from the same store. System time only, not valid-time or full bitemporal queries.

Read the contract
06

Local catalogs & bounded copy

Route work to named local stores and copy selected records with atomic target receipts and idempotent replay.

Each transaction belongs to one store. No distributed transactions or cross-store joins. NHC adds explicit one-hop endpoint closure.

Read the contract
07

Phrases, positions & proximity

Match ordered phrases, retain token positions and allow bounded gaps. Replace analyzer options under the same index name.

Positions are analyzed token ordinals. Proximity requires positional indexes; analyzer replacement is foreground and may conflict with writers.

Read the contract
08

Logical views & schema evolution

Reuse typed read definitions and append nullable fields as your application evolves.

Snapshot-bound logical views and bounded nullable-column append; not arbitrary schema rewrites.

Read the contract
09

More ways to inspect and integrate

Use CLI schema/catalog inventories, CLI search, bounded SQLite ingestion and script-free HTML graph snapshots.

Local operations. The JS/TS subprocess recipe is not a native network driver; HTML snapshots are not an interactive GUI.

Read the contract
10

Indexes, retention & dependency order

Use posting-hash layouts, an optional temporal access tree, quiescent history compaction and topological ordering.

Storage features are opt-in and format-sensitive. No performance gain is claimed without workload measurements. Cycles can block a complete order.

Read the contract

System-time history is not full bitemporality. Native HTTP/MCP services, distributed transactions and HA replication remain outside Grafx’s delivered engine scope.

A DECISION YOU CAN VERIFY

Start with your workload.

Validate your queries, read/write ownership, retrieval quality, recovery and upgrade behavior. No common-dataset benchmark was run for this comparison, so it makes no speed or throughput ranking.

Build with Grafx