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.5K ·GitHub
Что это такое?Instant — это бэкенд как сервис. Он даёт клиентским приложениям реляционную базу данных с многопользовательским режимом по умолчанию, а также авторизацию, права доступа, хранение файлов, presence и потоки данных в реальном времени. Всё это уже встроено, поэтому традиционный бэкенд писать не нужно.
Это библиотека, которую я устанавливаю, или хостируемый сервис?И то, и другое: вы подключаете небольшие клиентские SDK (JS, React, React Native), чтобы писать запросы InstaQL прямо в приложении, а сами данные хранятся в размещённой многопользовательской базе Postgres и на сервере синхронизации Instant. Серверный код запускать не нужно.
Как начать работу с Instant?Зарегистрируйтесь на instantdb.com: примерно за 5 минут можно запустить рабочее приложение, без самостоятельной настройки базы данных или бэкенда.
Нужно ли мне сначала самому настраивать базу данных или эндпоинты?Нет. Instant заменяет привычную связку «база данных + ORM + эндпоинты»: вы просто пишете запросы InstaQL на клиенте, а Instant сам занимается получением данных, проверкой прав и кешированием.
Могу ли я развернуть Instant у себя, вместо instantdb.com?Путь, описанный в README, — это размещённый сервис. Самостоятельное развёртывание упоминается только как настройка для контрибьюторов (чтение README клиента и сервера, чтобы запустить Instant локально), а не как готовый вариант развёртывания.
Где на самом деле хранятся данные моего приложения?Ваши данные хранятся в виде триплетов в одной большой многопользовательской базе Postgres, которой управляет Instant. На ней же работает их постоянно доступный бесплатный тариф.
Что такое InstaQL?InstaQL — это реляционный язык запросов Instant. По духу он похож на GraphQL и позволяет на клиенте описать точную структуру нужных данных.
Работает ли Instant офлайн и с оптимистичными обновлениями?Да. Клиентский SDK сохраняет кеш недавних запросов (IndexedDB в вебе, AsyncStorage в React Native) и автоматически обрабатывает оптимистичные обновления и откаты при изменении данных.
Для чего нужны presence и эфемерные обновления?Они нужны для лёгких многопользовательских функций, например живых курсоров или индикаторов «кто сейчас в сети». Работают они отдельно от запросов к сохранённым данным.
Почему команда создала базу данных для клиента, а не обычный бэкенд?Команда обнаружила, что большинство проблем при создании приложений (сторы, селекторы, эндпоинты) по сути являются проблемами базы данных. Поэтому Instant помещает многопользовательскую базу с возможностью отката прямо в клиент, вместо того чтобы заставлять писать серверный стек.
Creator
instantdb
Size
130.4 MB
Stars
10.5K
Updated
CommitSep 28
Age
2y
Commits · 90 Days