Local-first development toolkit
Ship top-tier apps at high tempo.
Jazz is a framework for building local-first apps — an architecture that lets companies like Figma and Linear play in a league of their own.
Open source. Self-host or use Jazz Cloud for zero-config magic.
Instant updates
Real-time sync
Multiplayer
File uploads
Social features
Permissions
E2E encryption
Authentication
Hard things are easy now.
The sad truth is...
Every stack reinvents how users and machines share state.
For each new app you tackle a mess of moving parts, tech choices & deployment woes. Your code? All over the place.
It’s holding you back from shipping what your app could be.
The good news is...
There’s a single new abstraction that does the whole job.
Jazz gives you mutable local state that’s instantly synced. Including binary blobs. With users & permissions built-in.
All that’s left is building the UX that makes your app special.
Collaborative Values
Build entire apps using only client-side code
Step1
Define your schema using Collaborative Values — your new building blocks.
export class Message extends CoMap { text = co.string; } export class Chat extends CoList.Of( co.ref(Message) ) {}
Step2
Connect to sync and storage infrastructure — Jazz Cloud or self-hosted.
const Jazz = createJazzReactApp(); <Jazz.Provider peer="wss://cloud.jazz.tools/?key=you@example.com" > {children} </Jazz.Provider>
Step3
Create a Collaborative Value, and it will be synced and persisted automatically.
const message = Message.create({ text: “Hello world!” }, { owner: ... }) chat.push(message)
Step4
Read your data like simple local state. Get instant sync and UI updates across all devices and users. 🎉
const ChatScreen = (id) => { const chat = useCoState(Chat, id) return chat.messages.map(msg => ( <p>{msg.text}</p> )) }
Why local-first?
With local-first, your data is stored locally, then synced to the server.
This comes with the following benefits.
Role-based permissions
Making secure collaboration the default
Account
or Group
.Private
Create a CoValue visible only to you by assigning your Account as an owner.
const { me } = useAccount(); Message.create( { text: ... }, { owner: me } );
Public
Start collaborating by giving write access to everyone.
const group = Group.create({ owner: me }); group.addMember("everyone", "writer"); Chat.create([], { owner: group })
Invite-only
Generate an invite link, and share only with people you want to collaborate with.
createInviteLink( chatId, "writer", // or reader or admin );
End-to-end encrypted and tamper-proof
The syncing server never sees your data in plaintext. Instead of trusting centralised authorisation, Jazz uses public-key cryptography. Your edits are encrypted and signed on-device, verifiable by everyone and readable only by those given access.
Everything else you need to ship quickly
We take care of the groundwork that every app needs, so you can focus on building the cool stuff that makes your app unique.
BinaryCoStream.createFromBlob(file);
File uploads
<input type="file"/>
, and easily convert from and to Browser Blobs
using a BinaryCoStream
CoValue.400x300
Progressive image loading
ImageDefinition
component, you get progressive image up & downloading, super fast blur preview, and image size info.Server workers
Authentication
Jazz Cloud
Jazz Cloud is a real-time sync and storage infrastructure that scales your Jazz app up to millions of users. Instant setup, no configuration needed.
- Data & blob storage
- Global sync
- No limits for public alpha
Jazz works with your favorite stack
Coming soon
More features coming soon
Cursors & carets
Ready-made spatial presence.
- 2D canvas cursors
- Text carets
- Element-based focus-presence
- Scroll-based / out-of-bounds helpers
Two-way sync to your DB
Add Jazz to an existing app.
- Prisma
- Drizzle
- PostgreSQL introspection
Video presence & calls
Stream and record audio & video.
- Automatic WebRTC connections between
Group
members - Audio/video recording into
BinaryCoStreams
CoPlainText
& CoRichText
- Collaborative plain-text & rich-text
- Gracefully prevents most editing conflicts
- Rendered as markdown, HTML, JSX, etc.
Become an early adopter
We'll help you build your next app with Jazz
It's early days, but we work hard every day to make Jazz a great tool for our users.
We want to hear about what you're building, so we can help you every step of the way. We'll prioritize features that you need to succeed.