instant README

The project's README from github.com/instantdb/instant. As one markdown file: README.md.

Shows the Instant logo

stars

Get Started · Examples · Try the Demo · Docs · Discord

Instant is the best backend for AI-coded apps. You get auth, permissions, storage, presence, and streams — everything you need to ship apps your users will love.

You write relational queries in the shape of the data you want and Instant handles all the data fetching, permission checking, and offline caching. When you change data, optimistic updates and rollbacks are handled for you as well. Plus, every query is multiplayer by default.

We also support ephemeral updates, like cursors, or who's online. Currently we have SDKs for Javascript, React, and React Native.

How does it look? Here's a barebones chat app in about 12 lines:

// ༼ つ ◕_◕ ༽つ Real-time Chat
// ----------------------------------
// * Updates instantly
// * Multiplayer
// * Works offline

import { init, id } from "@instantdb/react";

const db = init({ 
  appId: process.env.NEXT_PUBLIC_APP_ID,
});

function Chat() {
  // 1. Read
  const { isLoading, error, data } = db.useQuery({
    messages: {},
  });

  // 2. Write
  const addMessage = (message) => {
    db.transact(db.tx.messages[id()].update(message));
  };

  // 3. Render!
  return <UI data={data} onAdd={addMessage} />;
}

Want to see for yourself? try a demo in your browser.

Motivation

Writing modern apps is full of schleps. Most of the time you start with the server: stand up databases, caches, ORMs, and endpoints. Then you write client-side code: stores, selectors, mutators. Finally you paint a screen. If you add multiplayer you need to think about stateful servers, and if you support offline mode, you need to think about IndexedDB and transaction queues.

To make things worse, whenever you add a new feature, you go through the same song and dance over and over again: add models, write endpoints, stores, selectors, and finally the UI.

Could it be better?

In 2021, we realized that most of the schleps we face as UI engineers are actually database problems in disguise. (We got into greater detail in this essay)

Shows how Instant compresses schleps

If you had a database on the client, you wouldn't need to think about stores, selectors, endpoints, or local caches: just write queries. If these queries were multiplayer by default, you wouldn't have to worry about stateful servers. And if your database supported rollback, you'd get optimistic updates for free.

So we built Instant. Instant gives you a database you can use in the client, so you can focus on what’s important: building a great UX for your users, and doing it quickly.

Architectural Overview

Here's how Instant works at a high level:

Shows how Instant compresses schleps

Under the hood, we store all user data as triples in one big Postgres database. A multi-tenant setup lets us offer a free tier that never pauses.

A sync server written in Clojure talks to Postgres. We wrote a query engine that understands datalog and InstaQL, a relational language that looks a lot like GraphQL:

// give me all users, their posts and comments
{
  users: {
    posts: {
      comments: {
      }
    }
  }
}

Taking inspiration from Asana’s WorldStore and Figma’s LiveGraph, we tail postgres’ WAL to detect novelty and invalidate relevant queries.

For the frontend, we wrote a client-side triple store. The SDK handles persisting a cache of recent queries to IndexedDB on web, and AsyncStorage in React Native.

All data goes through a permission system powered by Google's CEL library.

Getting Started

The easiest way to get started with Instant is by signing up on instantdb.com. You can create a functional app in 5 minutes or less.

If you have any questions, you can jump in on our discord.

Contributing

You can start by joining our discord and introducing yourself. Even if you don't contribute code, we always love feedback.

If you want to make changes, start by reading the client and server READMEs. There you'll find instructions to start Instant locally.

instant (instantdb/instant)

Searching Database…

10.6K ·GitHub
What is this?Instant is a backend-as-a-service that gives client apps a relational, multiplayer-by-default database with auth, permissions, file storage, presence, and real-time streams built in, so you skip writing a traditional backend.
Is this a library I install, or a hosted service?Both: you use small client SDKs (JS, React, React Native) to write InstaQL queries right in your app, while the actual data lives in Instant's hosted, multi-tenant Postgres and sync server — there is no server code for you to run.
How do I get started with Instant?Sign up at instantdb.com — you can have a functional app running in about 5 minutes, with no database or backend to provision yourself.
Do I need to set up my own database or endpoints first?No. Instant replaces the usual database-plus-ORM-plus-endpoints stack; you just write InstaQL queries from the client and Instant handles fetching, permission checks, and caching for you.
Can I self-host Instant instead of using instantdb.com?The README's documented path is the hosted service; self-hosting is covered only as a contributor setup (reading the client/server READMEs to run Instant locally), not as a polished turnkey deployment option.
Where does my app's data actually live?Your data is stored as triples in one big, multi-tenant Postgres database run by Instant, which also powers their always-on free tier.
What is InstaQL?InstaQL is Instant's relational query language, similar in spirit to GraphQL, used to describe exactly the shape of data you want from the client.
Does Instant work offline with optimistic updates?Yes. The client SDK persists a cache of recent queries (IndexedDB on web, AsyncStorage on React Native) and handles optimistic updates and rollbacks automatically when you mutate data.
What are presence and ephemeral updates for?They power lightweight multiplayer features like live cursors or 'who's online' indicators, separate from Instant's persisted-data queries.
Why did the team build a client-usable database instead of a normal backend?They found that most app-building pain (stores, selectors, endpoints) is really a database problem in disguise, so Instant puts a multiplayer-by-default, rollback-capable database directly in the client instead of making you write a server stack.
Creator
instantdb
Size
130.4 MB
Stars
10.6K
Updated
CommitSep 28
Age
2y
Commits · 90 Days