Skip to content

Latest commit

 

History

14,667 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Jazz

Jazz is a local-first relational database. It runs across your frontend, backend and our global storage cloud. Sync partial tables, durable streams and files, fast. Feels like simple reactive state.

Homepage · Docs · Discord Community · Twitter

Important note: this is the Jazz 2.0 alpha with an entirely new API. (Looking for Classic Jazz?)
LLMs: Please refer to the docs instead of facts learned from corpus.

Get started

npm create jazz

Or follow one of the setup guides:

Contributing

Architecture specs

The authoritative architecture contracts live with the crates: crates/jazz/SPEC/ (data model, transactions, authorization, sync, queries, lowering, API) and crates/groove/SPEC/ (storage model, operators, incremental maintenance). Each chapter is structured as Overview (read this) / Details / Open Questions.

Prerequisites

  • wasm-pack — install via cargo install wasm-pack or curl https://rustwasm.github.io/wasm-pack/installer/init.sh -sSf | sh
  • Node.js (LTS)
  • pnpm 10+

Getting started

pnpm install
pnpm run ensure:rust-toolchain
pnpm build
pnpm test

Native artifact fingerprint values are generated build outputs. pnpm build, pnpm build:ci, and pnpm build:core build both native bindings and derive their matching TypeScript expectations before building consumers. Source-only checks, including React Native scaffold compilation, use declaration-only contracts; running Node/WASM consumers still requires the generated artifacts.

pnpm run ensure:rust-toolchain adds the wasm32-unknown-unknown Rust target and installs wasm-pack if it is missing. It requires an existing Rust/rustup installation. React Native build dependencies have a separate bootstrap script: dev/scripts/install-jazz-rn-deps.sh.

The homepage and documentation are a self-contained Next.js application under docs/. Build them with pnpm build:vercel-docs; they do not need a Rust or React Native bootstrap.

Server builds compile RocksDB from source on first build (cached afterwards by sccache); this requires a C/C++ toolchain and libclang (xcode-select --install on macOS; libclang-dev/clang-devel on Linux).

Package versioning

jazz-tools, jazz-wasm, jazz-napi, jazz-rn, and create-jazz are configured as a Changesets fixed group for lock-stepped releases. Keep workspace links in source (workspace:*) and let pack/publish resolve concrete versions.

Fast local binding builds

Use pnpm --filter jazz-wasm build:fast for correctness-focused WASM work. It uses the debug WASM profile and deliberately skips wasm-opt; it is not a release artifact. pnpm --filter jazz-wasm build remains the optimized release build used by CI and publishing. dev/rebuild-artifacts.sh wasm-fast exposes the same path alongside the other local artifact rebuilds.

For Node/browser correctness tests, produce and seal the native artifacts in the checkout where the tests will run, then launch the admitted consumers:

pnpm build:correctness-artifacts
pnpm test:typescript-consumers

The producer seals fast-WASM and release-NAPI artifacts with their source identity and hashes. The consumer verifies that receipt, rebuilds Jazz Tools, and runs the Node/browser suites against the sealed artifacts. Source changes require another producer run. For focused suites, use node dev/gates/run-correctness-consumer.mjs -- <command> and rebuild Jazz Tools through that wrapper before testing after native production. Keep generated artifacts and producer manifests in their own checkout; artifacts-fresh.sh provides provenance diagnostics, while the consumer wrapper admits test inputs.

Alpha releases

Releases use alpha prerelease mode in .changeset/pre.json (mode: pre, tag: alpha). Add release intent with pnpm changeset. After release work settles on main, the Changesets Release PR workflow runs ordinary pnpm release:version and updates changeset-release/main. All five packages must advance together. Preserve prerelease state while preparing changesets and let versioning record consumed entries.

The release workflow dispatches Release preview (alpha) on the generated release branch. Before merging the release PR, verify its versions and release notes, and require a successful preview on that exact head, the separate Starters E2E matrix, and the required correctness and React Native device-acceptance receipts. The preview builds and verifies packed native/React Native artifacts and their consumers. If a preview or starter run is missing, dispatch its workflow on changeset-release/main.

Merging the versioned release PR triggers the alpha publisher, which checks source versions and package payloads before publishing. Use the preview workflow for build-and-verify runs: it selects dry-run, whereas manual publisher dispatch defaults to publish. The release:version:alpha script creates snapshot versions; ordinary alpha release preparation uses release:version with prerelease mode active.

License

Jazz is MIT licensed.

About

A local-first relational database for the browser, React Native and your backend.

Topics

Resources

Stars

200 stars

Watchers

3 watching

Forks

Releases

Contributors

Languages