Skip to content
lanck

Your application runs as .wasm. Inside the database.

Planck collapses the boundary between code and data. It is a log-structured document store with a built-in WebAssembly Runtime. Handlers query the store in-process with zero network overhead, zero serialisation and deserialisation, and no ORMs. Build, compile, and deploy your entire application with a single command.

What's in the box.

Storage engine, WASM Runtime, HTTP Server, Change Streams, Async-Replication and a Web based Workbench control plane that can be used to monitor apps, take backups, create schemas, export/import data, schedule tasks like GC, Wal Truncate, Export/Import etc.

Document store

LSM-Tree-based: Skiplist MemTable, WAL, Value Log, B+tree Primary/Secondary Indexes. BSON documents, u128 keys.

WASM Runtime in-process

Your service compiles to one .wasm. Planck loads it in it's own address-space. Data reads and writes are function calls, not network round-trips.

PQL query language

Method-chain: store.filter(...).orderBy(...).limit(N). Range scans, aggregates, projections, get-by-key. No ORM.

You pick the Format

Render HTML fragments for HTMX / Alpine / Datastar, return JSON for an API, or stream bytes. The same handler decides per route.

Change Streams

Subscribe to store mutations from inside a service or over the wire. Watch required stores for changes.

Replication + WAL Streaming

Primary Ships WAL frames to a read-only replica asynchronously. Rotated WAL segments can also be streamed to an archive path for offsite retention.

Scheduler

Cron-style tasks for backup, GC, WAL truncate. Editable from the workbench.

Live UIs over SSE

An optional SSE service subscribes to change streams and fans events out to browser EventSource clients. Hypermedia front-ends update without polling.

Workbench UI

Browser based control plane on :2369. Deploy, monitor stats using dashboards, run PQL, edit schedules, view logs, manage backups, watch the store. Everything operations cares about.

One process. Five layers.

The database, the HTTP server, the WASM runtime and your handlers, all in the same process.

CLIENT

Browser or API consumer

HTMX · Alpine · Datastar · JSON

HOST

planck

HTTP listener · WASM runtime · change streams

SERVICE

your-service.wasm

handlers · zsx templates · query builder

STORE

document stores + indexes

memtable · WAL · vlog · B+tree · primary/secondary indexes

RESPONSE

HTML · JSON · stream · chosen per route

Pick the architecture that fits your team.

Same primitives, three architecture styles. Planck supports all three.

A
Recommended for new systems

Self-Contained Systems

Each domain (orders, products, billing) is a vertical slice owning its private database, business logic, and UI layout. Handlers return HTML fragments directly using HTMX or Datastar, keeping the frontend and database completely co-located.

orders.wasm (UI + logic + store)
products.wasm (UI + logic + store)
billing.wasm (UI + logic + store)
B
Familiar mental model

Monolith

One planck instance, one .wasm, handlers across every domain. The classic monolith: compiled, sandboxed, deployed in one step. Stores share an instance but stay independent at the schema level.

app.wasm, all routes
orders store
products store
billing store
C
Drop-in for classic APIs

API-First Microservices

Similar horizontal slice topology to A, but handlers serve JSON data instead of UI fragments. Perfect for native mobile applications or traditional single-page apps (React, Vue) where the frontend is fully decoupled and hosted elsewhere.

orders.wasm (JSON API + store)
products.wasm (JSON API + store)
billing.wasm (JSON API + store)

A and B are both Self-Contained Systems: many vertical slices versus one. C is the classic API-services style, where the UI lives outside the service boundary. Planck supports all three from the same primitives.