Build apps that are fast, work offline, and just sync.
The real-time backend for your vibe coded frontend.
Project goals
Incredible DX
A declarative API that helps humans and agents get things right the first time.
Fully open source
No vendor lock-in. Designed to self-host. Deploy to a VPS or on bare metal at home.
Fast, reactive, and multiplayer
Data lives on the device, can be edited offline, and stays in sync with others.
Build apps, not infrastructure
Define your data. Query with a type-safe ORM. React when data changes — online or off.
- -- Full type-safety with client-side validation
- -- Declare relationships and permissions
- -- Compose and reuse mutations easily
import { e, defineModel, defineSchema } from "@ebbjs/core"; const todo = defineModel("todo", { schema: e.object({ title: e.string(), completed: e.boolean(), }), }); export const schema = defineSchema({ todo, });
import { createClient } from "@ebbjs/client"; import { schema } from "./model"; export const client = createClient({ serverUrl: "http://localhost:3000", schema, fetch: { headers: { Authorization: `Bearer ${getToken()}`, }, }, });
import { client } from "./client"; // Create const todo = await client.todo.create( { title: "Ship it", completed: false }, ); // Update await client.todo.update(todo.id, { completed: true, }); // Query — works offline const todos = await client.todo .find() .eq("completed", false) .orderBy("createdAt", "desc");
$ ebb deploy Bundling functions... ✓ sendEmail 12.3 KB ✓ processOrder 8.1 KB ✓ generateReport 5.7 KB Uploading to sidecar... ✓ 3 functions deployed Activating v14 → v15... ✓ Live — zero downtime Deploy complete in 1.2s
Deploy in seconds. Rollback instantly.
Your server runs two processes: a persistent sync engine and a stateless sidecar. ebb deploy ships new code to the sidecar — the sync engine never restarts. Versions activate atomically, so there's zero downtime. Rolling back is just as fast.
- --
ebb deploy— one command to ship - -- Atomic version swap — zero downtime
- -- Instant rollback to any previous version
Real-time in no-time.
Every client gets a local replica that reads and writes instantly. Changes sync to all connected users in real-time — with presence, awareness, and conflict resolution. No polling, no spinners, no plumbing.
- -- Local reads and optimistic writes — zero latency
- -- Live presence and real-time updates across clients
- -- Custom conflict resolution and no data loss
Roadmap
Where we are and where we're headed.
Complete prototype
ShippedEnd-to-end proof of concept — local-first writes, sync, and materialization working together across client and server.
Core storage engine
In ProgressRocksDB-backed Action log with dual-writer pipelining and on-demand entity materialization via SQLite.
Sync protocol
In ProgressThree-phase sync: handshake, per-group catch-up with CDN-friendly pagination, and live SSE streaming.
Client SDK
In ProgressLocal-first reactive client with offline writes, outbox, and automatic conflict resolution via typed field merges.
Auth & permissions
PlannedBYO auth integration with group-based access control. Permission checks run against an in-memory cache — never block on disk.
React bindings
PlanneduseQuery, useClient, and EbbProvider hooks for reactive, type-safe data access in React apps.
Server functions
PlanneddefineFunction handlers that run server-side with direct data access. Deploy, version, and roll back with a single CLI command.
Real-time presence
PlannedEphemeral cursor and selection broadcasting for live multiplayer — fire-and-forget, not persisted.
Collaborative text
PlannedYjs-powered rich text fields with character-level CRDT merge. Works offline, syncs automatically.
Server-side SDK
PlannedHTTP client for reading and writing ebb data from SSR frameworks, server actions, and external processes.
Self-hosting
PlannedRun the full sync server on your own infrastructure with a single Docker image.
CLI tooling
Plannedebb deploy, function management, schema migrations, and project scaffolding from the command line.
Observability hooks
PlannedonAction server hook for piping the Action stream to analytics, audit logs, webhooks, or data warehouses.
Horizontal scaling
PlannedMulti-master replication across nodes for elastic throughput — no single writer bottleneck, automatic conflict resolution at the cluster level.
Stay in sync
ebb is in early development. Sign up to receive updates.