# Rindle > Rindle keeps query results current as data changes. Use its live-query engine in an existing program, query a database, or build a synced app. Rindle uses incremental view maintenance (IVM) to update registered query results after writes. Embed SQLite and live queries with the Rust `rindle-replica` crate, or supply changes directly to the raw `rindle` engine. Browser choices include a standalone WASM store, flat remote results, normalized sync without prediction, and the integrated optimistic `createRindleClient`. These clients share query APIs but have different protocols and lifecycles. Rindle SQL provides ordinary request/response SQL. PostgreSQL can remain the write authority through a preview source integration. Start with [Onboarding](https://rindle.sh/docs/overview.md), then [Getting started](https://rindle.sh/docs/getting-started.md) to select a setup. Use [Guides](https://rindle.sh/docs/guides.md) for tasks, [Reference](https://rindle.sh/docs/api.md) for APIs and packages, and the [coding-agent guide](https://rindle.sh/docs/for-agents.md) for task-specific reading. Fetch the relevant individual pages before choosing a full bundle. Each documentation page is available at its canonical URL plus `.md`. ## Onboarding ### Start here - [Welcome to Rindle](https://rindle.sh/docs/overview.md): Maintain query results as data changes. Use a local engine, embed a database, stream server results, or build an optimistic synced app. - [Is Rindle for you?](https://rindle.sh/docs/compare.md): Decide whether Rindle fits your application: what live queries replace, where they help, and which limits matter before you start. - [Getting started](https://rindle.sh/docs/getting-started.md): Choose a first project, see what it requires, and follow a short sequence to a working result. - [Rindle for coding agents](https://rindle.sh/docs/for-agents.md): Choose the Rindle integration that fits the task, fetch the relevant documentation, and keep runtime boundaries clear. ### First steps - [Choose a browser client](https://rindle.sh/docs/browser-clients.md): Compare the standalone wasm store, remote result client, normalized sync, and optimistic app client. - [Scaffold with create-rindle](https://rindle.sh/docs/create-rindle.md): Generate and run a TanStack Start app with SQL migrations, a synced browser client, an API server, and SSR. - [Synced-app quickstart](https://rindle.sh/docs/synced-app-quickstart.md): Connect a SQL schema, named queries, shared mutators, browser client, and API server in an existing project. - [Reactive queries in the browser](https://rindle.sh/docs/wasm-client.md): Use the wasm client to create an in-memory browser store, write rows, and subscribe to a typed live query without a server. - [Embed SQLite and live queries](https://rindle.sh/docs/replica-and-views.md): Use the database runtime to capture SQL writes and deliver query changes in one process or across read workers. - [Backends & runtimes](https://rindle.sh/docs/backends.md): Choose where queries run: a browser, Node, a remote server, or an embedded Rust application. - [Raw Rust engine quickstart](https://rindle.sh/docs/quickstart.md): Connect a SQLite source to the raw Rust engine, supply row changes, and observe the maintained result. ## Guides ### Guide directory - [Guides](https://rindle.sh/docs/guides.md): Build on your first example: query data, connect an application, and run it in production. ### Core concepts - [How it works](https://rindle.sh/docs/how-it-works.md): Follow the Rust engine lifecycle: create sources, build a query pipeline, hydrate a view, and apply changes. - [The synced-app architecture](https://rindle.sh/docs/architecture.md): Follow an authorized query and an optimistic write through the browser, application API, and Rindle data tier. ### Queries & schemas - [Schema & migrations](https://rindle.sh/docs/schema.md): Define database tables with SQL, apply migrations, and generate TypeScript types for live queries. - [Compose the UI with fragments](https://rindle.sh/docs/fragments.md): Define component data requirements, combine them into named queries, and subscribe through useRoot and useFragment. - [Live counts & aggregates](https://rindle.sh/docs/live-aggregates.md): Maintain counts and grouped aggregates as rows change, including counts attached to related parent rows. - [Pagination & infinite scroll](https://rindle.sh/docs/pagination.md): Choose a growing live window or keyset pages, and define stable ordering and cursors. - [Pinned queries](https://rindle.sh/docs/pinned-queries.md): Keep a server query result current between requests, even with no subscribers, and read it without a live client. - [Refining schema types](https://rindle.sh/docs/refining-schema-types.md): Refine generated JSON and string types in a handwritten module that survives schema regeneration. - [Fold the delta stream yourself (Rust)](https://rindle.sh/docs/example-rust.md): Consume individual view changes in Rust and assemble a result that matches a fresh query. ### Sync & optimistic writes - [Isomorphic mutators](https://rindle.sh/docs/mutators.md): Define shared write logic, run it as a browser prediction and server transaction, and understand replay requirements. - [Authorizing reads & writes](https://rindle.sh/docs/authorization.md): Scope named queries and mutators with server-derived identity, and handle writes the server rejects. - [Handling rejected writes](https://rindle.sh/docs/rejected-writes.md): Let the client reconcile a rejected prediction, then show the failure and a useful next action to the user. - [Folded mutations](https://rindle.sh/docs/folded-mutations.md): Coalesce repeated optimistic writes from typing, sliders, and dragging before sending them to the server. - [Undo / redo](https://rindle.sh/docs/undo-redo.md): Implement undo and redo as inverse named mutations that use the normal optimistic write protocol. ### UI & local state - [TanStack Start](https://rindle.sh/docs/tanstack.md): Connect Rindle to TanStack Start with a provider, route loaders, and optional server preloads. - [Preload & navigate](https://rindle.sh/docs/preloads.md): Preload named queries during navigation and reuse available local rows while server subscriptions load. - [Server rendering](https://rindle.sh/docs/ssr.md): Read named queries on the server, seed the rendered page, and hand the browser over to live subscriptions. - [Local-only tables](https://rindle.sh/docs/local-only-tables.md): Keep drafts, selections, and preferences in reactive client tables that do not sync to the server. - [Persisting local tables](https://rindle.sh/docs/persisting-local-tables.md): Persist local-only client tables in IndexedDB, restore them after reloads, and coordinate updates across tabs. - [Fine-grained reactivity](https://rindle.sh/docs/fine-grained-reactivity.md): Use fragment references and per-row reads to limit React updates to the components whose data changes. - [Search & typeahead](https://rindle.sh/docs/typeahead.md): Build live search with escaped filters, available local data, and prompt cleanup of abandoned queries. - [Streaming LLM responses](https://rindle.sh/docs/llm-streams.md): Combine live response text with database checkpoints so reloads and other devices can recover the stream. - [Agents on live data](https://rindle.sh/docs/agents.md): Turn live query changes into named events and digests for an agent that uses your application data. ### SQL & data sources - [Background & system writes](https://rindle.sh/docs/background-writes.md): Write SQL from jobs, webhooks, and services, and understand how those writes reach subscribed clients. - [Postgres as the source of truth](https://rindle.sh/docs/postgres-source.md): Preview: keep PostgreSQL authoritative while Rindle captures its changes and serves live queries. Review setup, limits, and recovery. ### Runtime & deployment - [Deploying & scaling Rindle](https://rindle.sh/docs/deploy.md): Deploy a standalone authority or a replicated fleet, then configure read scaling, durability, and recovery. - [Cloud quickstart](https://rindle.sh/docs/cloud-quickstart.md): Provision managed Rindle SQL or a synced Rindle backend, then connect with one URL and one server-only token. - [Connect your app to Rindle Cloud](https://rindle.sh/docs/cloud-connect.md): Connect SQL services and synced apps to Rindle Cloud with one ingress URL and one server-only database token. - [Scale & operate on Rindle Cloud](https://rindle.sh/docs/cloud-scaling.md): Read managed fleet convergence, switch between SQL and Sync, and recover a suspended Rindle Cloud app. ### Testing & troubleshooting - [Testing your app](https://rindle.sh/docs/testing.md): Test query definitions and mutators, then validate optimistic reconciliation and synchronization with real clients. - [Devtools](https://rindle.sh/docs/devtools.md): Inspect mutations, live queries, and changes during development with Rindle devtools. - [Troubleshooting](https://rindle.sh/docs/troubleshooting.md): Diagnose missing sync, schema mismatches, optimistic corrections, and authorization errors. ## Reference ### API & packages - [API & package map](https://rindle.sh/docs/api.md): Find a component by responsibility, then open generated TypeScript signatures or Rust API documentation for this source revision. - [Crates & API map](https://rindle.sh/docs/crates.md): What each crate owns, how they compose, and the API index — the map for navigating between the building blocks. ### Query reference - [TypeScript queries](https://rindle.sh/docs/supported-queries-ts.md): Look up supported TypeScript query shapes, examples, and current restrictions. - [Rust queries](https://rindle.sh/docs/supported-queries.md): Look up supported Rust query shapes, examples, and current restrictions. - [The change model](https://rindle.sh/docs/change-model.md): Learn the changes sources accept, the changes views emit, and the rule that makes replay correct. ### Clients & servers - [Optimistic browser client](https://rindle.sh/docs/client.md): Create a synced browser client, subscribe to named queries, and manage optimistic writes and client resources. - [The API server](https://rindle.sh/docs/api-server.md): Resolve authorized named queries, run authoritative mutators, and serve one-shot reads from the Rindle data tier. - [Rindle SQL (@rindle/sql-client)](https://rindle.sh/docs/sql-client.md): Run SQL over HTTP with transactions, session consistency, and a Drizzle adapter. No browser client is required. ### Configuration & limits - [Run the daemon (rindled)](https://rindle.sh/docs/daemon.md): Configure rindled as a standalone database authority or a read follower, and understand its network and recovery requirements. - [@rindle/cli](https://rindle.sh/docs/rindle-cli.md): The npm-installed Rindle toolchain: local fleet and app lifecycle, SQL, local HCTree/wal2 inspection, migrations, schema generation, backup, and Rindle Cloud deployment. - [Performance](https://rindle.sh/docs/performance.md): Read measured query-maintenance costs, benchmark conditions, and comparisons across workloads. ## Generated API reference - [API index and search](https://rindle.sh/reference/): exported TypeScript symbols and Rust crate documentation - [TypeScript signatures](https://rindle.sh/reference/reference.json): package exports, full declarations, options, return types, and source links - [Build metadata](https://rindle.sh/reference/metadata.json): exact source revision, source digests, manifest versions, distribution, and checks ## Product - [Rindle — reactive queries, anywhere](https://rindle.sh/home.md): One small engine that keeps your queries live — in the browser, in Node, over the network, or embedded in Rust. Live queries, caching, and optimistic updates, handled by one engine. - [The AI track — agents on live data](https://rindle.sh/ai.md): Rindle streams cache-coherent semantic diffs to agents, coordinates them by subscription, and lets them branch reality before committing to it. - [The UI track — the reactive database, on both ends](https://rindle.sh/ui.md): A reactive database in the browser, in your backend, or both: live queries into components, optimistic writes that rebase themselves, SSR, fragments, and local-only state. - [The cache track — pin the query, delete the invalidation](https://rindle.sh/cache.md): Pin a query, read it one-shot from your API server, and share one materialization across every viewer. Cache speed, fresh-query correctness — no invalidation code. - [The embedded track — the engine in your process](https://rindle.sh/embedded.md): A std-only Rust IVM core, ~200 kB gzipped as wasm — embed it in a binary, Node, or the browser, fold the raw delta stream, then scale the same queries onto a replicated read fleet. ## Blog - [What Rindle Is For](https://rindle.sh/blog/what-rindle-is-for.md): An honest account of Rindle Cloud — the problems it's shaped for, the ones it isn't, and where the edges are. Written for someone deciding whether to build on it, not to sell them on it. ## Optional - [Full text](https://rindle.sh/llms-full.txt): every page on this site concatenated into one Markdown document - [Use the engine — one file](https://rindle.sh/llms-engine.txt): engine and runtime documentation in reading order - [Build a synced app — one file](https://rindle.sh/llms-app.txt): synced-app documentation in reading order