Release 0.1.0
The first public release of Graphersal: an in-memory graph traversal engine in Rust, modelled on Apache TinkerPop
Gremlin, with a durable store, a command line, a Python binding and a browser playground. This page gives the
highlights; the complete list of changes is CHANGELOG.md in the repository root. What 0.1.0 does not do yet is
on Current Limitations.
The engine and the query language
- Gremlin traversals in Rust and in a Rhai script DSL, in both spellings (
has_labelandhasLabel), with a rule-based optimizer, bulk traversers, sacks,repeat()loops, upserts (mergeV/mergeE),math(), nested property paths (jpath), UUID values and multi-label vertices. - TinkerPop conformance: the vendored Apache TinkerPop 3.8.2 Gherkin suite runs on every test run. More than 95 % of the in-scope scenarios pass and no supported step behaves differently from the specification; the numbers and every deliberate difference are on TinkerPop Compliance and TinkerPop Deviations.
- Every traversal is atomic: a failing traversal leaves nothing behind; explicit transactions, dry runs, change capture and commit hooks are in the Rust API (Transactions).
- Profiling of the optimized plan with timings, traverser counts and
optional exact memory figures;
execute()returns results, error and profile of one run without throwing. - Schemas: one format everywhere (a strict subset of JSON Schema 2020-12
per label), enforced in
openorclosedmode, inferred from data, diffed and patched; a schema change is a database change. - Saved queries and compressed properties live in a catalog stored with the graph.
- Safe for untrusted queries: resource limits, an optional memory budget, cancellation, and a pluggable authorizer; no query may crash the engine (a fuzzer checks it).
Data in and out
- GraphSON 3.0 import and export (TinkerGraph reads the export), and GraphML with logical types restored from a stored schema.
- Persistence: lossless packed snapshots, a write-ahead journal and the Store: one directory (or one file) per graph with recovery on open, checkpoints, marks, point-in-time reads, fork, rollback with an attic, verified full and incremental backups, verify, damage detection with a read-only maintenance mode and repair. The format is a public specification.
Front ends
- Command line
graphersal: a REPL with completion and help, a scriptable one-shot runner with bounded display and exit codes, andgraphersal storeto operate stores (Command Cheat Sheet). - Web playground: the real engine compiled to WebAssembly, with a graph
drawing, a schema editor, saved queries and a store in memory; the same UI runs over the
dev server (
graphersal --server), which can also serve MCP to AI clients and an experimental AI Chat. - Python: the
graphersalpackage (abi3 wheels for Python 3.10+) with graphs, schemas and the Store (Python).
For integrators
- The
GraphStoragetrait lets a host run the engine, the DSL, saved queries and the Store over its own storage (Custom Storages);graphersal-storage-testschecks an implementation (Storage Conformance). Both are experimental in 0.1.x.
Compatibility
- Minimum supported Rust version: 1.88.
- Versioning and what is stable in 0.1.x: Releases and Versioning.
- Date and time values and the TinkerPop date steps are planned for 0.2.0.