First Envision

Get in touch.

A few lines is enough. Links welcome. You can also write an email.

nodekin

A graph database that fits in one file.

Written in Rust. It runs inside the app that uses it, or as one small server that speaks the protocol graph apps already use. Pre-alpha, and we say so.

What it promises
Language
Rust
Storage
One file per database
Speaks
Bolt
Status
Pre-alpha
One fileIts log6 nodes · 9 relationships
AdaBenCleoDanEvagraphs
nodekin>
MATCH (a:Person {name: "Ada"})-[:KNOWS]->(f)
      -[:LIKES]->(t:Topic)
RETURN f.name, t.name
f.namet.name
"Eva""graphs"
1 row
Fig. 01 — One file, one graph, one query. Made-up data.

3,867 / 3,897

openCypher test scenarios passing on the crash-safe store

0 / 12,022

Acknowledged commits lost across 16 hard kills

30 MiB

The whole container image

0.13 s

From start to the first answer

Measured 16 October 2026: Docker on a Mac with four CPUs, 300,000 nodes and 750,000 relationships.

Five promises. Each one counted.

A database earns trust with numbers, not adjectives. Each promise below comes with the test that keeps it.

  1. 01One file.Each database is one file, with its write-ahead log beside it.
  2. 02Inside or beside.A Rust library in your process, or a small server that speaks Bolt.
  3. 03Familiar.The query language graph apps already use.
  4. 04Crash-safe.Kill it mid-write; no acknowledged commit is lost.
  5. 05Small.30 MiB, answering 0.13 s after it starts.

One file. Its log beside it.

Each database is a single file, with its write-ahead log next to it. Every commit is on disk before it returns, and concurrent writers share one flush.

One file
Its log
  1. 1Written to the log
  2. 2Flushed to disk
  3. 3Then acknowledged
  4. Group commit: concurrent writers share one durable flush, so many small writes cost about one write to disk.

Inside the app, or beside it.

The same engine, two ways in. Existing drivers connect to the server without changes.

EmbeddedRust
Your app
nodekin

A Rust library in the app's own process. No network, no second service.

ServerBolt
Your app
Bolt
nodekin
server

One small server speaking Bolt, the protocol graph apps already use.

Tested today

The official JavaScript driver and the command line.

Not built yet

Bindings for Node, Python and C; more than one database per server.

The query language graph apps already use.

3,867 of the 3,897 openCypher test scenarios pass on the crash-safe store. The other 30 deliberately follow the behaviour existing apps rely on.

3,867/3,897

openCypher

Pass · 3,867Deliberately different · 30

Every change runs the whole suite, so a fix can't quietly break something else.

Kill it. Count the commits.

Loops that kill the server mid-write, then count what survived: alone, and with eight writers at once.

12,022

acknowledged commits, 16 hard kills

0lost

11,377

acknowledged commits, eight writers at once

0lost

Readers never wait.

Each statement reads its own snapshot without locks, while writers commit together through one slot. Fulltext ranked by BM25 and exact vector search are built in.

Reader 1own snapshot · no lockReader 2own snapshot · no lockReader 3own snapshot · no lockWritersone commit slot

Small.

About 55,000 lines of Rust in 19 crates, shipped as one small image.

30 MiB

container image

0.13 s

to the first answer

Measured 16 October 2026: Docker on a Mac with four CPUs, 300,000 nodes and 750,000 relationships.

How we're building it.

The matching engine we built for MyMonday is its main test case: when that runs unchanged, the job is done.

  1. 01

    Decisions first.

    43 design records, each a decision with its reasons, written before and during the build.

  2. 02

    A conformance suite.

    Every change runs against the openCypher scenarios, so a fix can't quietly break something else.

  3. 03

    Kill it, count the commits.

    Loops that kill the server mid-write and count what survived, alone and with eight writers.

  4. 04

    Numbers with their conditions.

    Speed and size stated in absolute numbers, with the date, the machine and the data, never as a ratio against another database.

Under the hood.What was hard, and what we did about it.

19 crates.

About 55,000 lines of Rust in 19 crates, built in October 2026.

Group commit.

Concurrent writers share one durable flush, so many small writes cost about one write to disk.

Search built in.

Fulltext ranked by BM25; vector search exact, for now.

Not built yet.

Bindings for Node, Python and C; approximate vector search; access control; replicas; change data capture; more than one database per server.

Where it is now

Pre-alpha. The Rust library and the server work today; the rest is on the list above, in that order of honesty.

More from the workshop

From our workshop
Get in touch

Still reading? Good sign.Write to us.

Work with people who keep their word.

  1. 01A few lines is enough.
  2. 02A short call. Questions, not a pitch.
  3. 03A written proposal with a clear price, or a straight no.