thedatabasethat syncs

Jazz is a relational database built on real-time sync. It runs distributed across the cloud, your backend, frontend, native apps, CLIs and agent sandboxes. Mix and match ACID and local-first.

One database from the client to the cloud

jazz cloud(or self-hosted via CLI)all dataauthorizes every writesyncweb apppartial local copy(on disk)react · svelte · vue · …mobile apppartial local copy(on disk)react nativebackendpartial local copy(in memory)typescript · rustagents & jobspartial local copy(in memory)any serverthe clients and server modules making up your app
Fig. 1Jazz uses the same Rust database engine core everywhere: as WebAssembly in the browser, as a native module in React Native and Node, and as the database server in Jazz Cloud and the jazz-tools CLI.

Local copies

Every client and server keeps the rows its queries need, so reads never wait on the network.

Partial sync

Only the rows a query touches move, on demand. First load is fast, later loads are instant.

One source of truth

Core authorizes every write and stores it durably. Everyone converges on the same data.

Use straight from the client as simple reactive state

Define tables and permissions in TypeScript, then query from any component. Writes apply locally at once and sync in the background.

import { useAll, useDb } from "jazz-tools/react";
import { app } from "./schema";
​
export function OpenTodos() {
const db = useDb();
const { data: todos = [] } = useAll(
app.todos.where({ done: false }),
);
​
return todos.map((todo) => (
<label key={todo.id}>
<input
type="checkbox"
onChange={() =>
db.update(app.todos, todo.id, { done: true })
}
/>
{todo.title}
</label>
));
}
Fig. 2The todo example on two devices, recorded from the running app.
More examples and benchmarks →

Also for Vue, Svelte, Solid, React Native, plain TypeScript and Rust. Install guides

A database responsible for more. The hard parts of shared, live data, handled once instead of in every app.

Row-level security and per-query auth

Permissions are policies over your data and the user's JWT claims, defined in code and testable like the rest of your app.

Jazz optimizes each query together with the policies that apply to it, which removes work from your backend and gives you zero-roundtrip security.

tasks · all rowstitledone$createdByplan launchfalseyoudraft pricingfalsesamreview prtrueyoubook venuefalseyoufix loginfalseanacombined queryread policy$createdBy = youyour querydone = falsesynced to youtitleplan launchbook venueone plan · rows you may not read never leave the cloud
Fig. 3A query and its read policy, planned together

Blobs, streams, JSON, richtext? To Jazz it's all just columns.

Jazz is designed to efficiently handle all kinds, sizes, shapes and intensities of data, while still representing everything in a simple relational model.

  • Durable streams? Just keep appending to a column, or stream out of one.
  • Binary blobs? Just put 2GB in a column, and read ranges.
  • Giant JSON document? Just put it in a column and stream parts with JSON pointers.
  • Long markdown document? It's just a very big string column.

This allows you to truly keep all data in one place, with no external links and no separate systems. And permission policies apply exactly like on normal data.

columnstored as chunksstays fasteventsstreamappend · stream outvideobinary · 2GBread a byte rangesettingsjsonread /theme by pointerbodymarkdownedit mid-documentonly touched chunks sync · permissions apply as on any column
Fig. 4Under the hood, Jazz uses prolly trees when values get large, ensuring appends, point edits, partial and streaming reads stay fast. Jazz syncs only the parts you need and any queries you run over large data operate in a streaming fashion.

Local-first data with tunable consistency

Like an embedded database, Jazz brings durable data directly into your frontend and backend, and syncs it to the cloud. It feels like shared reactive state that abstracts away networking.

Jazz is eventually consistent by default. Where transactionality matters, trade latency for globally consistent transactions, in the same database.

devicecloudlocal statewrite visible at oncetier "local" resolvessync + permission checkremote stateauthorizedstored durablyfate confirmationconfirmed statetier "global" resolvesor rolled back
Fig. 5A write's local state, its sync message, and its confirmed fate

Real-time collaboration and deep edit histories

People and agents now edit the same data at a much higher rate, and you need to reason about it afterwards.

Jazz gives you flexible, branch-like views over your data. Build anything from drafts to complex git-like workflows on them, including permissions over branches.

maindraftanaanaagentagentsammergeread any version · compare branches · see who changed what
Fig. 6The history of one row, with a draft branch

Fluid schema evolution for fast teams

Instead of stop-the-world migrations, Jazz migrations are live compatibility layers that translate between the versions of your app.

Old clients keep working, new features ship without complicated rollouts, and apps with many feature flags stay safe to change.

app v1title · doneapp v2title · statuslens v1status → donelens v2done → statusraw table · superset of all versionstitledonestatuswrittenbuy milktrue·v1call anafalse·v1ship v2·doingv2fix bug·donev2
Fig. 7One raw table, read as two app versions through migration lenses

Slims your backend and simplifies your infra

Networking, permissions, auth integration and a collaboration-native data model are standard in Jazz, so your backend holds business logic instead of glue.

Jazz also covers roles that usually need their own infrastructure or vendors: blob storage, file and image CDN, durable streams and real-time message queues.

typical stackwith jazzbusiness logicCRUD api endpointsrequests and reconnectsclient data state handlingwebsocket fan-outcache + invalidationpermission checksmessage queueblob storage + cdndatabasebusiness logicjazzsync + live queriesrow-level permissionsdurable streamsfiles + blobsdatabase
Fig. 8What moves out of your code into Jazz

Self-host or use Jazz Cloud

The single-tenant Jazz server will always be open source and is easy to self-host. Jazz Cloud is the same database, running on global infrastructure tailored for it.

As developers, we hate pricing that makes limiting assumptions about your app and your users, so we bill across simple metrics for the things that are irreducibly hard.

Self-hostedJazz CloudEnterprise
Setup
One open-source, single-tenant server binaryZero config; create an app from the CLI or dashboardDedicated deployment or bring your own cloud, set up with you
Topology
Runs where you deploy itGlobally distributed and geo-optimizedRegions and data residency to your requirements
Reliability
You operate backups and failoverFault-tolerant, with backups includedUptime SLA and direct support
Scaling
Size the instance yourselfScales more granularly than instance-based databasesCapacity planned with you
Compute
Your own servers; one instance runs a whole app

$0.039 per hour of 2GB RAM instance

Auto-scaling available soon. 1GB RAM instance always included.

Volume pricing
Storage
Your own disks

$0.45 per GB/month

Includes backups and caches. 1GB/month included.

Volume pricing
Egress
Your hosting provider's rates

$0.09 per GB out

Passed through at cost. 5GB/month included.

Volume pricing
How to self-hostGenerate API keyBook a call

Estimate your Jazz Cloud bill

Move the sliders to match your app. The estimate uses the Jazz Cloud prices above.

Monthly active users1k MAUs
Frequency of useDaily
Real-time profileMostly form-like apps

Daily estimates about 20 visits per monthly active user across 20 active days each month.

Mostly form-like apps assumes ~3 minute sessions over the active window, plus a short idle shutdown grace period.

Cost per user / mo

$0.02

Based on 1k monthly active users

Estimated monthly bill

$22.9

Rough self-serve estimate based on the draft public meters on this page. Enterprise contracts can still diverge.

From the blog

All posts →
  1. · Anselm Eickhoff

    The four fresh ideas behind Jazz

    Why local-first, per-query auth, deep histories, and fluid migrations come together in Jazz

  2. · Anselm Eickhoff

    What is Jazz?

    (a local-first relational database)

  3. · Anselm Eickhoff

    What we learned from classic Jazz

    The main lessons from Jazz v0.x, why Jazz v2 changed so much, and how migration works

npm create jazz

Scaffold a synced app in one command, with auth and hosting set up for you.

npm create jazz

Read the quickstart or join the Jazz Discord.