connecting…this is a live OriginDB board — move your cursor, double-click to pin a note
OPEN SOURCEMIT LICENSESELF-HOSTED

Lightweight real-time app server.
Database & business logic, all in one.

OriginDB is an open-source realtime database where your application logic lives inside the engine — as sandboxed WebAssembly reducers. Every write is transactional, logged to a durable WAL, and streamed to each client over a SQL-filtered changefeed.

Runs anywhere you can run a binary.
wasmtime sandbox fsync-durable SQL changefeed
THE MODEL

One write. A whole pipeline.

A client calls a reducer. Your WebAssembly code runs in a wasmtime sandbox against a staged overlay, commits atomically, hits the WAL, and emits exactly one changefeed event — delivered only to subscribers whose WHERE clause matches.

01

Call a reducer

A client invokes a function you deployed. Args arrive as JSON; the host freezes the clock for determinism.

gRPC · your .wasm
02

Commit + WAL

Staged writes apply through one transaction, or roll back entirely on a trap or abort. Durable before you hear “ok”.

ACID · group-commit fsync
03

Filtered changefeed

Each commit emits one ordered event. Subscribers get only rows matching their SQL — no client sees the firehose.

websocket · SQL WHERE
EVERYTHING YOU NEED

Your backend, compiled in.

A small, readable engine — the whole thing is roughly 15k lines — with the primitives a realtime app actually needs.

Code runs inside the DB

Deploy a WebAssembly module; OriginDB runs it in a wasmtime sandbox with epoch CPU deadlines and a memory limiter.

SQL-filtered changefeed

Subscribe with SELECT … WHERE … and receive only matching changes, in order. The predicate runs server-side.

Durable by default

A writer thread batches commits behind one fdatasync. Power-loss safe; throughput rises with concurrency.

Live module hot-swap

Redeploy a new version and the rules change instantly — no migration, no downtime, against a running world.

ACID transactions

Reducer writes stage in an overlay and apply as one atomic commit, or the entire call rolls back. No partial state.

SQL engine

Query and subscribe with real SQL — WHERE, comparisons, LIKE, and boolean logic over your tables.

Write in your language

First-class SDKs for AssemblyScript and C#, with Rust and C++ in the tree.

Crash-recoverable

The WAL is the canonical world. Replay on boot rebuilds exactly the set of acknowledged commits — fast, compact binary.

BUILT ON IT

Whole apps, authoritative in WASM.

Each demo's entire simulation is a reducer. The browser is a pure subscriber — it renders what the changefeed streams and holds no authority of its own.

MEASURED, NOT MARKETED

Honest numbers.

From the repo's benchmark suite on a dev Mac — deliberately the worst realistic case (F_FULLFSYNC ≈ 21 ms). On Linux with fdatasync, the absolute figures climb.

4.0×
durable-commit throughput at 8 concurrent writers vs 1 — group commit working
−57%
WAL size after moving to a compact binary record format
~15k LOC
the entire engine — storage, WAL, changefeed, SQL, WASM host
1event
exactly one ordered changefeed event per committed write
FROM DEV TO PRODUCTION

From clone to changefeed in minutes.

server
# build, then run the server
$ origindb_server -d ./data -p 8787 -g 50051
✓ listening — ws :8787  grpc :50051

# deploy your reducer module
$ origindb deploy chat chat.wasm 1.0.0

# call it — the write commits and streams
$ origindb call chat sendMsg '["general","hi"]'
subscribe.js
// a browser is a pure subscriber
const ws = new WebSocket("ws://localhost:8787");

ws.onopen = () => ws.send(JSON.stringify({
  type: "sql_subscribe",
  sql:  "SELECT * FROM msgs WHERE room='general'"
}));

// initial snapshot + live matching commits
ws.onmessage = (e) => render(JSON.parse(e.data));

Ready to build something realtime?

OriginDB is MIT-licensed and self-hosted. No seats, no metered egress, no proprietary runtime between you and your data. Read the source, run it on your box, ship on top of it.