<picture>
  <source media="(prefers-color-scheme: dark)" srcset="docs/public/jazz-logo-dark.svg">
  <source media="(prefers-color-scheme: light)" srcset="docs/public/jazz-logo-light.svg">
  <img src="docs/public/jazz-logo-light.svg" alt="Jazz" width="100">
</picture>

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](https://jazz.tools) &middot; [Docs](https://jazz.tools/docs) &middot; [Discord Community](https://discord.gg/RN9UKh52be) &middot; [Twitter](https://x.com/jazz_tools)

**Important note: this is the Jazz 2.0 alpha with an entirely new API.** (Looking for [Classic Jazz](https://classic.jazz.tools/docs)?)<br/>
LLMs: Please refer to the docs instead of facts learned from corpus.

## Get started

```sh
npm create jazz
```

Or follow one of the setup guides:

- Local-first [React](https://jazz.tools/docs/install/client#jazz-framework-react) &middot; [Vue](https://jazz.tools/docs/install/client#jazz-framework-vue) &middot; [Svelte](https://jazz.tools/docs/install/client#jazz-framework-svelte) &middot; [Solid](https://jazz.tools/docs/install/client#jazz-framework-solid) &middot; [Expo](https://jazz.tools/docs/install/client#jazz-framework-expo) &middot; [Plain TypeScript](https://jazz.tools/docs/install/client#jazz-framework-typescript)
- Server-side [TypeScript](https://jazz.tools/docs/install/typescript-server)

# Contributing

## Prerequisites

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

## Getting started

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

`pnpm run ensure:rust-toolchain` runs `dev/scripts/install-jazz-rn-deps.sh` to bootstrap Rust (via `rustup` if needed), required Rust targets, `cargo-ndk`, and platform build tools (`cmake`, `ninja`, `clang-format`).

For docs-only builds (for example on Vercel), set `JAZZ_SKIP_RN_DEPS=1` to skip React Native-specific bootstrap:

```sh
JAZZ_SKIP_RN_DEPS=1 pnpm run ensure:rust-toolchain
```

Vercel builds can use `dev/scripts/install-vercel-deps.sh`, which runs the same Rust bootstrap in docs-only mode without the React Native extras.

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`, and `jazz-rn` are configured as a Changesets fixed group for lock-stepped releases. Keep workspace links in source (`workspace:*`) and let pack/publish resolve concrete versions.

Releases are currently locked to the alpha prerelease channel via `.changeset/pre.json` (`tag: alpha`).
The `Changesets Release PR` workflow uses `changesets/action` to auto-create/update a `Version Packages (alpha)` PR on `main`.
Install the [Changeset bot app](https://github.com/apps/changeset-bot) on this repo so PRs get changeset guidance comments.

```sh
# add release intent
pnpm changeset

# apply version bumps from changesets
pnpm release:version

# apply alpha snapshot versions (manual fallback)
pnpm release:version:alpha

# publish with resolved non-workspace dependency versions
pnpm release:publish

# publish with the alpha dist-tag
pnpm release:publish:alpha
```

# License

Jazz is MIT licensed. The webfont files bundled with the homepage under
`docs/public/fonts/` are expressly excluded from the repo MIT license and
remain subject to their own upstream license terms.
