Skip to main content

8 posts tagged with "Founder notes"

Why LoraDB exists, who it is for, and how the product is shaped.

View All Tags

Building LoraDB with Claude and Codex

· 5 min read
Joost van Berkel
Author, LoraDB

Built with Claude and Codex — the code stays the source of truth.

I use Claude and Codex to build LoraDB.

That is not a positioning statement or a shortcut around the work. It is simply part of how the project gets built.

Claude and Codex help with different parts of the process: reading code, checking assumptions, shaping docs, reviewing release work, and testing whether the project is saying things the implementation can actually support. They are useful tools, but they are not the source of truth.

The LoraDB release journey so far

· 5 min read
The LoraDB team
Engineering

The LoraDB release journey — v0.1 through v0.6 milestones.

LoraDB has moved quickly since the public release, so it is worth stepping back from the version numbers and looking at the journey.

The individual posts tell the detail of each release. This one is the map: why the releases landed in this order, what each one proved, and how the current work fits the long arc from "fast local graph engine" to "database people can trust in the product loop."

Snapshots before a log

· 9 min read
Joost van Berkel
Author, LoraDB

Snapshots before a log — the simpler primitive earns the harder one.

Most databases I have worked with had a write-ahead log before they had a snapshot story. LoraDB went the other way.

Current API note

This founder note is historical. The WAL has since landed on every filesystem-backed surface, snapshots now write the columnar LORACOL1 format with compression/encryption support, and WASM uses saveSnapshot / loadSnapshot instead of the older byte-specific method names.

At the time, v0.3 shipped manual point-in-time snapshots and nothing else on the persistence side. No append-only log. No background checkpoint loop. No continuous durability. One file on disk, taken on demand, atomic on rename.

The order is intentional, and it is the kind of decision that is easier to defend before the release than after.

Vectors belong next to relationships

· 9 min read
Joost van Berkel
Author, LoraDB

Vectors belong next to relationships — connected context makes retrieval explainable.

The conventional advice for AI retrieval is to pick a side.

You pick a vector database if you want similarity. You pick a graph database if you want structure. You bolt them together with glue code when the product inevitably needs both.

That framing has never matched the workloads I actually care about. The interesting systems — agent memory, recommendations, internal search over connected product data, knowledge graphs that feed chat features — do not want a vector store or a graph store. They want to retrieve candidates by similarity, then explain and filter those candidates by relationships. Splitting that into two products splits the query path, the data model, and eventually the team.

LoraDB v0.2 adds VECTOR as a first-class value type. Vectors live directly on nodes and relationships, next to labels, properties, and edges. The argument is not that a graph database should replace a vector database. The argument is that similarity belongs next to the relationships that give it meaning.

From developer trust to hosted platform

· 5 min read
Joost van Berkel
Author, LoraDB

From developer trust to hosted platform — local adoption first, managed operations later.

The easiest way to misunderstand LoraDB is to see the open core and the hosted platform as separate ideas.

They are the same journey.

The core database has to be developer-first because graph databases ask for a lot of trust. You are not just storing records. You are putting relationships, paths, and product logic into a system that needs to be correct and fast. If a developer cannot run it locally, inspect it, and build confidence in the query engine, the hosted product has no foundation.

Efficient storage is the product

· 6 min read
Joost van Berkel
Author, LoraDB

Efficient storage is the product — memory layout and traversal cost are product features.

When people talk about graph databases, they usually talk about query languages, visualizations, and relationship modeling. All of that matters. But for the kind of database I wanted, the deeper product question was storage.

If the database is in memory, storage efficiency is not an implementation detail. It is the product boundary.

Every extra allocation is less graph. Every unnecessary clone is less fan-out. Every vague data structure is a future performance mystery. A graph database can have a beautiful query language and still feel wrong if the storage layer wastes the machine.

In-memory or it does not work

· 5 min read
Joost van Berkel
Author, LoraDB

In-memory or it does not work — hot data, predictable traversal, the engine close to the application.

The phrase "in-memory database" can sound like a performance trick. For LoraDB, it is more basic than that. The product I wanted to build did not make sense if the graph was slow to touch.

Graphs are not like simple key-value lookups. The interesting queries walk. They expand. They branch. They filter while moving through relationships. A single product interaction can turn into a set of small traversals that need to feel instant.

If the graph is on the hot path, latency is not an optimization. It is the product.

Why I started LoraDB

· 6 min read
Joost van Berkel
Author, LoraDB

Why I started LoraDB — a graph database fast enough to keep in the hot path.

I did not start LoraDB because the world was missing another database with a logo and a query language. I started it because I kept reaching for a graph database in places where the existing choices felt too heavy for the job.

The shape of the problem was clear: I needed a really fast in-memory graph database. Not a graph feature bolted onto a document store. Not a large server that needed its own operational plan before I could answer a product question. Not a database that looked elegant in a demo but became expensive once the working set, query fan-out, and deployment model got real.

I needed something smaller, sharper, and more efficient.