<!DOCTYPE html>
<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width,initial-scale=1">
    <title>Electric Sync</title>
    <meta name="description" content="Composable sync primitives for multi-agent systems — Postgres Sync, TanStack DB and PGlite.">
    <meta name="generator" content="VitePress v1.5.0">
    <link rel="preload stylesheet" href="/assets/style.RIjqY79U.css" as="style">
    <link rel="preload stylesheet" href="/vp-icons.css" as="style">
    
    <script type="module" src="/assets/app.6hFJuvLV.js"></script>
    <link rel="preload" href="/assets/inter-roman-latin.Di8DUHzh.woff2" as="font" type="font/woff2" crossorigin="">
    <link rel="modulepreload" href="/assets/chunks/theme.DCXLaQhN.js">
    <link rel="modulepreload" href="/assets/chunks/framework.D1Q5NcTP.js">
    <link rel="modulepreload" href="/assets/chunks/electric.tm52IRBj.js">
    <link rel="modulepreload" href="/assets/chunks/tanstack.68M86Wih.js">
    <link rel="modulepreload" href="/assets/chunks/Section.Ck-_y0om.js">
    <link rel="modulepreload" href="/assets/chunks/SyncHero.CDTJI5zO.js">
    <link rel="modulepreload" href="/assets/chunks/ComposeStackGrid.eIaGX7TB.js">
    <link rel="modulepreload" href="/assets/chunks/MultiClientPulseDemo.U2gFw13Y.js">
    <link rel="modulepreload" href="/assets/chunks/InstallPill.CBfrKfcL.js">
    <link rel="modulepreload" href="/assets/chunks/BottomCtaStrap.u7Mt1xu4.js">
    <link rel="modulepreload" href="/assets/chunks/CuratedBlogPosts.AtQNpm-G.js">
    <link rel="modulepreload" href="/assets/chunks/vitepressData._XIRpEZW.js">
    <link rel="modulepreload" href="/assets/chunks/demos.data.BrKEBUgw.js">
    <link rel="modulepreload" href="/assets/chunks/SyncFanOutBg.B7Ty27AZ.js">
    <link rel="modulepreload" href="/assets/chunks/primitives.data.DAoV3CMG.js">
    <link rel="modulepreload" href="/assets/chunks/useDemoVisibility.BmTEMX3c.js">
    <link rel="modulepreload" href="/assets/chunks/posts.data.C3Sb7aWn.js">
    <link rel="modulepreload" href="/assets/chunks/LandscapeBlogPostListing.rjXmP-PB.js">
    <link rel="modulepreload" href="/assets/chunks/PGliteReplDemo.BrtrEq0K.js">
    <link rel="modulepreload" href="/assets/sync_index.md.CygiKUnA.lean.js">
    <link rel="icon" type="image/png" href="/img/brand/favicon.png">
    <link rel="icon" type="image/svg+xml" href="/img/brand/favicon.svg">
    <link rel="prerender" href="https://airtable.com/embed/appDitPIpjlAxK7CL/pagrWjq3qw5Fp68Wa/form">
    <script defer data-domain="electric-sql.com,electric.ax" src="https://plausible.io/js/script.js"></script>
    <script id="check-dark-mode">document.documentElement.classList.add("dark");</script>
    <script id="check-mac-os">document.documentElement.classList.toggle("mac",/Mac|iPhone|iPod|iPad/i.test(navigator.platform));</script>
    <meta name="twitter:card" content="summary_large_image">
    <meta name="twitter:site" content="@ElectricSQL">
    <meta name="twitter:title" content="Electric Sync | Electric">
    <meta name="twitter:description" content="Composable sync primitives for multi-agent systems — Postgres Sync, TanStack DB and PGlite.">
    <meta name="twitter:image" content="https://electric.ax/.netlify/images?url=https%3A%2F%2Felectric.ax%2Fimg%2Fmeta%2Felectric-sync.jpg&amp;w=1200&amp;h=630&amp;fit=cover&amp;fm=jpg&amp;q=80">
    <meta property="og:title" content="Electric Sync | Electric">
    <meta property="og:description" content="Composable sync primitives for multi-agent systems — Postgres Sync, TanStack DB and PGlite.">
    <meta property="og:image" content="https://electric.ax/.netlify/images?url=https%3A%2F%2Felectric.ax%2Fimg%2Fmeta%2Felectric-sync.jpg&amp;w=1200&amp;h=630&amp;fit=cover&amp;fm=jpg&amp;q=80">
  </head>
  <body>
    <div id="app"><div class="Layout sync-page nav-relative has-release-banner sync-page" data-v-53d7592e><!--[--><div class="release-banner" data-v-9fff0dd0><div class="container" data-v-9fff0dd0><div data-v-9fff0dd0><a href="/blog/2026/08/11/electric-joining-databricks" data-v-9fff0dd0>⚡  Electric is joining <span class="hidden-xs" data-v-9fff0dd0> Neon at </span> Databricks » </a></div></div></div><!--]--><!--[--><span tabindex="-1" data-v-756fd5d1></span><a href="#VPContent" class="VPSkipLink visually-hidden" data-v-756fd5d1> Skip to content </a><!--]--><!----><header class="VPNav" data-v-53d7592e data-v-7d190830><div class="VPNavBar" data-v-7d190830 data-v-50db50bc><div class="wrapper" data-v-50db50bc><div class="container" data-v-50db50bc><div class="title" data-v-50db50bc><div class="VPNavBarTitle" data-v-50db50bc data-v-1658659a><a class="title" href="/" data-v-1658659a><!--[--><!--]--><!--[--><!--[--><!--[--><img class="VPImage dark logo" src="/img/brand/logo.svg" alt="Electric" data-v-048d2156><!--]--><!--[--><img class="VPImage light logo" src="/img/brand/logo.inverse.svg" alt="Electric" data-v-048d2156><!--]--><!--]--><!--]--><!----><!--[--><!--]--></a></div></div><div class="content" data-v-50db50bc><div class="content-body" data-v-50db50bc><!--[--><!--[--><!--[--><div class="VPNavBarMenu MegaNav"><!--[--><!--[--><div class="mega-nav-trigger-wrap" data-id="agents"><button type="button" class="VPNavBarMenuLink mega-nav-link mega-nav-trigger" aria-haspopup="menu" aria-expanded="false" aria-controls="mega-panel-agents">Agents <span class="mega-nav-chevron vpi-chevron-down" aria-hidden="true"></span></button><!----></div><!--]--><!--[--><div class="mega-nav-trigger-wrap" data-id="streams"><button type="button" class="VPNavBarMenuLink mega-nav-link mega-nav-trigger" aria-haspopup="menu" aria-expanded="false" aria-controls="mega-panel-streams">Streams <span class="mega-nav-chevron vpi-chevron-down" aria-hidden="true"></span></button><!----></div><!--]--><!--[--><div class="mega-nav-trigger-wrap" data-id="sync"><button type="button" class="active VPNavBarMenuLink mega-nav-link mega-nav-trigger" aria-haspopup="menu" aria-expanded="false" aria-controls="mega-panel-sync">Sync <span class="mega-nav-chevron vpi-chevron-down" aria-hidden="true"></span></button><!----></div><!--]--><!--[--><span class="mega-nav-divider" aria-hidden="true"></span><!--]--><!--[--><div class="mega-nav-trigger-wrap" data-id="cloud"><button type="button" class="VPNavBarMenuLink mega-nav-link mega-nav-trigger" aria-haspopup="menu" aria-expanded="false" aria-controls="mega-panel-cloud">Cloud <span class="mega-nav-chevron vpi-chevron-down" aria-hidden="true"></span></button><!----></div><!--]--><!--[--><a class="mega-nav-top-pricing VPNavBarMenuLink mega-nav-link" href="/pricing">Pricing</a><!--]--><!--[--><span class="mega-nav-divider" aria-hidden="true"></span><!--]--><!--[--><a class="mega-nav-top-blog VPNavBarMenuLink mega-nav-link" href="/blog">Blog</a><!--]--><!--[--><div class="mega-nav-trigger-wrap" data-id="resources"><button type="button" class="VPNavBarMenuLink mega-nav-link mega-nav-trigger" aria-haspopup="menu" aria-expanded="false" aria-controls="mega-panel-resources">More <span class="mega-nav-chevron vpi-chevron-down" aria-hidden="true"></span></button><!----></div><!--]--><!--]--></div><!--]--><!--]--><!--]--><div class="VPNavBarSearch search" data-v-50db50bc><!--[--><!----><div id="local-search"><button type="button" class="DocSearch DocSearch-Button" aria-label="Search"><span class="DocSearch-Button-Container"><span class="vp-icon DocSearch-Search-Icon"></span><span class="DocSearch-Button-Placeholder">Search</span></span><span class="DocSearch-Button-Keys"><kbd class="DocSearch-Button-Key"></kbd><kbd class="DocSearch-Button-Key">K</kbd></span></button></div><!--]--></div><nav aria-labelledby="main-nav-aria-label" class="VPNavBarMenu menu" data-v-50db50bc data-v-e02be8ee><span id="main-nav-aria-label" class="visually-hidden" data-v-e02be8ee> Main Navigation </span><!--[--><!--]--></nav><!----><!----><div class="VPSocialLinks VPNavBarSocialLinks social-links" data-v-50db50bc data-v-41f0c3ea data-v-4c1b1d12><!--[--><!--]--></div><div class="VPFlyout VPNavBarExtra extra" data-v-50db50bc data-v-4b696f69 data-v-55f0ba30><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="extra navigation" data-v-55f0ba30><span class="vpi-more-horizontal icon" data-v-55f0ba30></span></button><div class="menu" data-v-55f0ba30><div class="VPMenu" data-v-55f0ba30 data-v-cdf166a9><!----><!--[--><!--[--><!----><!----><div class="group" data-v-4b696f69><div class="item social-links" data-v-4b696f69><div class="VPSocialLinks social-links-list" data-v-4b696f69 data-v-4c1b1d12><!--[--><!--]--></div></div></div><!--]--><!--]--></div></div></div><!--[--><!--[--><!--[--><div class="nav-item VPNavBarMenuLink VPNavBarCTA" data-v-f78c127b><div class="cta-lg" data-v-f78c127b><a class="VPButton medium brand" href="https://dashboard.electric-sql.cloud/" target="_blank" rel="noreferrer" data-v-f78c127b data-v-43af2b7a>Go to Cloud</a></div><div class="cta-md" data-v-f78c127b><a class="VPButton medium brand" href="https://dashboard.electric-sql.cloud/" target="_blank" rel="noreferrer" data-v-f78c127b data-v-43af2b7a>Cloud</a></div><div class="cta-sm" data-v-f78c127b><a class="VPButton medium brand" href="https://dashboard.electric-sql.cloud/" target="_blank" rel="noreferrer" data-v-f78c127b data-v-43af2b7a>Go to Cloud</a></div></div><!--]--><!--]--><!--]--><button type="button" class="VPNavBarHamburger hamburger" aria-label="mobile navigation" aria-expanded="false" aria-controls="VPNavScreen" data-v-50db50bc data-v-98160fa3><span class="container" data-v-98160fa3><span class="top" data-v-98160fa3></span><span class="middle" data-v-98160fa3></span><span class="bottom" data-v-98160fa3></span></span></button></div></div></div></div><div class="divider" data-v-50db50bc><div class="divider-line" data-v-50db50bc></div></div></div><!----></header><div class="VPLocalNav empty fixed" data-v-53d7592e data-v-171f8b65><div class="container" data-v-171f8b65><!----><div class="VPLocalNavOutlineDropdown" style="--vp-vh:0px;" data-v-171f8b65 data-v-6b00a9e6><button data-v-6b00a9e6>Return to top</button><!----></div></div></div><!----><div class="VPContent" id="VPContent" data-v-53d7592e data-v-cc7caf18><div class="VPPage" data-v-cc7caf18><!--[--><!--]--><div style="position:relative;"><div><div style="display:none;" hidden="true" aria-hidden="true">Are you an LLM? You can read better optimized documentation at /sync.md for this page in Markdown format</div><!--[--><div class="sync-home" data-v-9367f239><section class="sh-hero" data-v-9367f239 data-v-ec81efa5><div class="sync-shapes-bg md-exclude" data-v-ec81efa5 data-v-6b06800f><canvas class="bg-canvas" aria-hidden="true" data-v-6b06800f></canvas><div class="bg-tooltip" data-v-6b06800f></div></div><div class="sh-hero-inner" data-v-ec81efa5><h1 class="sh-hero-name" data-v-ec81efa5> Electric <span class="sh-hero-accent" data-v-ec81efa5>Sync</span></h1><p class="sh-hero-text" data-v-ec81efa5> Composable sync primitives for multi-agent systems </p><div class="sh-hero-install-row" data-v-ec81efa5><button class="install-pill install-pill--raised" type="button" aria-label="Copy npx @electric-sql/start my-electric-app to clipboard" data-v-ec81efa5 data-v-ae27e236><span class="install-pill-text" data-v-ae27e236><span class="install-pill-prompt" data-v-ae27e236>$</span><!--[--><!--[--><!----><span class="install-pill-tok install-pill-tok--muted" data-v-ae27e236>npx</span><!--]--><!--[--><span data-v-ae27e236> </span><span class="install-pill-tok install-pill-tok--accent" data-v-ae27e236>@electric-sql/start</span><!--]--><!--[--><span data-v-ae27e236> </span><span class="install-pill-tok install-pill-tok--muted" data-v-ae27e236>my-electric-app</span><!--]--><!--]--></span><span class="install-pill-copy" aria-hidden="true" data-v-ae27e236><svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" data-v-ae27e236><rect width="14" height="14" x="8" y="8" rx="2" ry="2" data-v-ae27e236></rect><path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2" data-v-ae27e236></path></svg></span></button></div><div class="sh-hero-row" data-v-ec81efa5><a class="VPButton medium brand" href="/docs/sync/quickstart" data-v-ec81efa5 data-v-43af2b7a>Quickstart</a><a class="VPButton medium alt" href="/docs/sync" data-v-ec81efa5 data-v-43af2b7a>Docs</a></div></div></section><section id="compose" class="ea-section" data-v-9367f239 data-v-795b7ae5><div class="ea-section-inner" data-v-795b7ae5><div class="ea-section-header" data-v-795b7ae5><!----><h2 class="ea-section-title" data-v-795b7ae5><!--[-->Compose your sync stack<!--]--></h2><p class="ea-section-subtitle" data-v-795b7ae5><!--[-->Three composable primitives that work together — or independently — to keep state in sync from your database, through your network, into your apps and agents.<!--]--></p></div><!--[--><div class="compose-stack" data-v-9367f239 data-v-1745794a><!--[--><a href="/sync/postgres-sync" class="compose-card no-visual" data-v-1745794a><div class="compose-icon" data-v-1745794a><img src="/img/icons/electric.svg" alt="Postgres Sync" data-v-1745794a></div><h3 class="compose-title" data-v-1745794a>Postgres Sync</h3><p class="compose-body" data-v-1745794a><span data-v-1745794a>Sync from your database <span class="breaker no-wrap">into your apps</span></span>.</p><p class="compose-detail" data-v-1745794a><span data-v-1745794a>With partial replication, <span class="breaker no-wrap">data delivery and fan-out</span></span>.</p></a><a href="/sync/tanstack-db" class="compose-card no-visual" data-v-1745794a><div class="compose-icon" data-v-1745794a><img src="/img/icons/tanstack.svg" alt="TanStack DB" data-v-1745794a></div><h3 class="compose-title" data-v-1745794a>TanStack DB</h3><p class="compose-body" data-v-1745794a><span data-v-1745794a>Reactive client store <span class="breaker no-wrap">for super-fast apps</span></span>.</p><p class="compose-detail" data-v-1745794a><span data-v-1745794a>For sub-millisecond <span class="breaker no-wrap">reactivity and instant writes</span></span>.</p></a><a href="/sync/pglite" class="compose-card no-visual" data-v-1745794a><div class="compose-icon" data-v-1745794a><img src="/img/icons/pglite.product.svg" alt="PGlite" data-v-1745794a></div><h3 class="compose-title" data-v-1745794a>PGlite</h3><p class="compose-body" data-v-1745794a><span data-v-1745794a>Embeddable Postgres <span class="breaker no-wrap">with reactivity and sync</span></span>.</p><p class="compose-detail" data-v-1745794a><span data-v-1745794a>A full database inside <span class="breaker no-wrap">your client or runtime</span></span>.</p></a><!--]--></div><!--]--><!----></div></section><section id="postgres-sync" class="ea-section dark" data-v-9367f239 data-v-795b7ae5><div class="ea-section-inner" data-v-795b7ae5><!----><!--[--><div class="sh-primitive sh-primitive-two-col" data-v-9367f239><div class="sh-primitive-prose" data-v-9367f239><div class="sh-primitive-head" data-v-9367f239><img src="/img/icons/electric.svg" alt="" class="sh-primitive-icon md-exclude" data-v-9367f239><h2 class="sh-primitive-title" data-v-9367f239>Postgres Sync</h2></div><p class="ea-prose" data-v-9367f239><strong data-v-9367f239>Sync subsets of your Postgres into everything.</strong> A read-path sync engine that streams shapes from Postgres over plain HTTP. Cached at the edge, fanned out to millions of concurrent readers, with flat database load. </p><p class="ea-prose" data-v-9367f239> Define a shape on the server. Mount a collection on the client. Render a live query. Writes go through your existing backend. </p><div class="sh-primitive-actions" data-v-9367f239><a class="VPButton medium brand" href="/sync/postgres-sync" data-v-9367f239 data-v-43af2b7a>Explore Postgres Sync</a><a class="VPButton medium alt" href="/docs/sync" data-v-9367f239 data-v-43af2b7a>Docs</a></div></div><div class="sh-primitive-visual md-exclude" data-v-9367f239><div class="mcp-demo" data-v-9367f239 data-v-e7db0248><div class="mcp-stage" data-v-e7db0248><div class="mcp-source" data-v-e7db0248><div class="mcp-source-icon" aria-hidden="true" data-v-e7db0248><svg viewBox="0 0 24 24" width="20" height="20" fill="none" stroke="currentColor" stroke-width="1.5" data-v-e7db0248><ellipse cx="12" cy="5" rx="8" ry="3" data-v-e7db0248></ellipse><path d="M4 5v6c0 1.66 3.58 3 8 3s8-1.34 8-3V5" data-v-e7db0248></path><path d="M4 11v6c0 1.66 3.58 3 8 3s8-1.34 8-3v-6" data-v-e7db0248></path></svg></div><div class="mcp-source-text" data-v-e7db0248><div class="mcp-source-label" data-v-e7db0248>Postgres</div><div class="mcp-source-shape" data-v-e7db0248> shape: <span class="mono" data-v-e7db0248>events</span></div></div><div class="mcp-source-tick mono" data-v-e7db0248> tx 000</div></div><svg class="mcp-fan" viewBox="0 0 600 80" preserveAspectRatio="none" aria-hidden="true" data-v-e7db0248><line class="fan-line" x1="300" y1="0" x2="100" y2="80" data-v-e7db0248></line><line class="fan-line fan-line--mobile" x1="300" y1="0" x2="300" y2="80" data-v-e7db0248></line><line class="fan-line" x1="300" y1="0" x2="500" y2="80" data-v-e7db0248></line><circle class="fan-pulse" r="3.5" cx="300" cy="0" opacity="0" data-v-e7db0248></circle><circle class="fan-pulse" r="3.5" cx="300" cy="0" opacity="0" data-v-e7db0248></circle><circle class="fan-pulse" r="3.5" cx="300" cy="0" opacity="0" data-v-e7db0248></circle></svg><div class="mcp-clients" data-v-e7db0248><div class="mcp-client client-web" data-v-e7db0248><div class="client-header" data-v-e7db0248><span class="client-dot web-dot" data-v-e7db0248></span><span class="client-name client-name--wide" data-v-e7db0248>Web</span><span class="client-name client-name--compact" data-v-e7db0248>Web / Mobile</span><span class="client-meta mono" data-v-e7db0248>react</span></div><ul class="client-list" data-v-e7db0248><!--[--><!--]--></ul></div><div class="mcp-client client-mobile" data-v-e7db0248><div class="client-header" data-v-e7db0248><span class="client-dot mobile-dot" data-v-e7db0248></span><span class="client-name" data-v-e7db0248>Mobile</span><span class="client-meta mono" data-v-e7db0248>expo</span></div><ul class="client-list" data-v-e7db0248><!--[--><!--]--></ul></div><div class="mcp-client client-agent" data-v-e7db0248><div class="client-header" data-v-e7db0248><span class="client-dot agent-dot" data-v-e7db0248></span><span class="client-name" data-v-e7db0248>Agent</span><span class="client-meta mono" data-v-e7db0248>handler</span></div><ul class="client-list" data-v-e7db0248><!--[--><!--]--></ul></div></div></div></div></div></div><!--]--><!----></div></section><section id="tanstack-db" class="ea-section" data-v-9367f239 data-v-795b7ae5><div class="ea-section-inner" data-v-795b7ae5><!----><!--[--><div class="sh-primitive sh-primitive-two-col sh-primitive-reversed" data-v-9367f239><div class="sh-primitive-prose" data-v-9367f239><div class="sh-primitive-head" data-v-9367f239><img src="/img/icons/tanstack.svg" alt="" class="sh-primitive-icon md-exclude" data-v-9367f239><h2 class="sh-primitive-title" data-v-9367f239>TanStack DB</h2></div><p class="ea-prose" data-v-9367f239><strong data-v-9367f239>A reactive client store for building super-fast apps.</strong> Sub-millisecond reactivity, instant local writes, and live cross-collection queries powered by differential dataflow. </p><p class="ea-prose" data-v-9367f239> Loads data from any source — including <a href="/sync/postgres-sync" data-v-9367f239>Postgres Sync</a> and <a href="/streams/" data-v-9367f239>Electric Streams</a> — with optimistic mutations that reconcile against your backend. </p><div class="sh-primitive-actions" data-v-9367f239><a class="VPButton medium brand" href="/sync/tanstack-db" data-v-9367f239 data-v-43af2b7a>Explore TanStack DB</a><a class="VPButton medium alt" href="https://tanstack.com/db" target="_blank" rel="noreferrer" data-v-9367f239 data-v-43af2b7a>TanStack DB docs</a></div></div><div class="sh-primitive-visual" data-v-9367f239><div class="sh-fs-panel" data-v-9367f239><div class="code-file-header mono" data-v-9367f239>app/Todos.tsx</div><pre class="code-block annotated" data-v-9367f239><code data-v-9367f239><span class="tk-kw" data-v-9367f239>const</span> <span class="tk-v" data-v-9367f239>todos</span> = <span class="tk-fn" data-v-9367f239>createCollection</span>(
  <span class="tk-fn" data-v-9367f239>electricCollectionOptions</span>({<span class="ann-marker" data-n="1" data-v-9367f239></span>
    <span class="tk-prop" data-v-9367f239>shapeOptions</span>: { <span class="tk-prop" data-v-9367f239>url</span>: <span class="tk-str" data-v-9367f239>&quot;/api/todos&quot;</span> },
    <span class="tk-prop" data-v-9367f239>getKey</span>: (<span class="tk-v" data-v-9367f239>row</span>) <span class="tk-kw" data-v-9367f239>=&gt;</span> <span class="tk-v" data-v-9367f239>row</span>.<span class="tk-prop" data-v-9367f239>id</span>,
  }),
)

<span class="tk-kw" data-v-9367f239>export function</span> <span class="tk-fn" data-v-9367f239>Todos</span>() {
  <span class="tk-kw" data-v-9367f239>const</span> { <span class="tk-v" data-v-9367f239>data</span> } = <span class="tk-fn" data-v-9367f239>useLiveQuery</span>((<span class="tk-v" data-v-9367f239>q</span>) <span class="tk-kw" data-v-9367f239>=&gt;</span><span class="ann-marker" data-n="2" data-v-9367f239></span>
    <span class="tk-v" data-v-9367f239>q</span>.<span class="tk-fn" data-v-9367f239>from</span>({ <span class="tk-prop" data-v-9367f239>todo</span>: <span class="tk-v" data-v-9367f239>todos</span> })
     .<span class="tk-fn" data-v-9367f239>where</span>(({ <span class="tk-v" data-v-9367f239>todo</span> }) <span class="tk-kw" data-v-9367f239>=&gt;</span>
        <span class="tk-fn" data-v-9367f239>eq</span>(<span class="tk-v" data-v-9367f239>todo</span>.<span class="tk-prop" data-v-9367f239>completed</span>, <span class="tk-kw" data-v-9367f239>false</span>)),
  )
  <span class="tk-kw" data-v-9367f239>return</span> &lt;<span class="tk-v" data-v-9367f239>List</span> <span class="tk-prop" data-v-9367f239>todos</span>={<span class="tk-v" data-v-9367f239>data</span>} /&gt;
}</code></pre><ol class="sh-inline-annos" data-v-9367f239><li data-v-9367f239><span class="num" data-v-9367f239>1</span><div data-v-9367f239><strong data-v-9367f239>Electric collection.</strong> Subscribes to a server-defined shape. Synced rows live locally — persisted, reactive, and shared across every component that queries them. </div></li><li data-v-9367f239><span class="num" data-v-9367f239>2</span><div data-v-9367f239><strong data-v-9367f239>Live incremental reactivity.</strong> Differential dataflow keeps the result set up to date as rows arrive or change — sub-millisecond updates, only the diff re-renders. </div></li></ol></div></div></div><!--]--><!----></div></section><section id="pglite" class="ea-section dark" data-v-9367f239 data-v-795b7ae5><div class="ea-section-inner" data-v-795b7ae5><!----><!--[--><div class="sh-primitive sh-primitive-two-col" data-v-9367f239><div class="sh-primitive-prose" data-v-9367f239><div class="sh-primitive-head" data-v-9367f239><img src="/img/icons/pglite.product.svg" alt="" class="sh-primitive-icon md-exclude" data-v-9367f239><h2 class="sh-primitive-title" data-v-9367f239>PGlite</h2></div><p class="ea-prose" data-v-9367f239><strong data-v-9367f239>Embeddable Postgres with reactivity and sync.</strong> A lightweight WASM build of Postgres — under 3MB gzipped — that runs in the browser, Node.js, Bun and Deno, with built-in live query and sync primitives. </p><p class="ea-prose" data-v-9367f239> Pair it with <a href="/sync/postgres-sync" data-v-9367f239>Postgres Sync</a> to keep an embedded Postgres database in sync with your cloud Postgres — for fully local, offline-capable apps. </p><div class="sh-primitive-actions" data-v-9367f239><a class="VPButton medium brand" href="/sync/pglite" data-v-9367f239 data-v-43af2b7a>Explore PGlite</a><a class="VPButton medium alt" href="https://pglite.dev" target="_blank" rel="noreferrer" data-v-9367f239 data-v-43af2b7a>PGlite.dev</a></div></div><div class="sh-primitive-visual md-exclude" data-v-9367f239><div class="sh-pglite-panel" data-v-9367f239><div class="sh-pglite-header mono" data-v-9367f239><span class="sh-pglite-dot" data-v-9367f239></span><span class="sh-pglite-title" data-v-9367f239>PGlite REPL</span><span class="sh-pglite-meta" data-v-9367f239>WASM Postgres · in this page</span></div><div class="sh-pglite-body" data-v-9367f239><div class="sh-pglite-loading mono" data-v-9367f239> Booting PGlite… </div><!----></div></div></div></div><!--]--><!----></div></section><section id="agent-loop" class="ea-section" data-v-9367f239 data-v-795b7ae5><div class="ea-section-inner" data-v-795b7ae5><!----><!--[--><div class="sh-two-col sh-two-col-headed sh-two-col-mini-visual" data-v-9367f239><div class="sh-prose-col" data-v-9367f239><h2 class="sh-inline-title" data-v-9367f239> Sync is how humans stay in the agent loop </h2><p class="ea-prose" data-v-9367f239> Agents work on shared data — and they change it while users are still looking at it. Without sync, your UI shows stale state, users have to refresh, and teams lose track of what each agent is doing. </p><p class="ea-prose" data-v-9367f239> With Electric, every user, device, and teammate sees agent changes in real time. The same shared state powers multi-tab, multi-device, multi-user, and multi-agent collaboration — out of the box. </p><div class="sh-section-foot sh-section-foot-tight left" data-v-9367f239><a href="/blog/2026/04/08/data-primitive-agent-loop" data-v-9367f239> Read: the data primitive for the agent loop → </a></div></div><div class="sh-visual-col md-exclude" data-v-9367f239><div class="sh-agent-loop-diagram-v" aria-hidden="true" data-v-9367f239><div class="vbus-col vbus-users" data-v-9367f239><span class="node node-client small" data-v-9367f239>user</span><span class="node node-device small" data-v-9367f239>device</span><span class="node node-client small" data-v-9367f239>user</span><span class="node node-device small" data-v-9367f239>device</span><span class="node node-client small" data-v-9367f239>user</span><span class="node node-device small" data-v-9367f239>device</span></div><div class="vbus-rail" data-v-9367f239><span class="vbus-rail-label mono" data-v-9367f239>shared<br data-v-9367f239>state</span></div><div class="vbus-col vbus-agents" data-v-9367f239><span class="node node-agent small" data-v-9367f239>agent</span><span class="node node-agent small" data-v-9367f239>agent</span><span class="node node-agent small" data-v-9367f239>agent</span><span class="node node-agent small" data-v-9367f239>agent</span><span class="node node-agent small" data-v-9367f239>agent</span></div></div></div></div><!--]--><!----></div></section><section id="pillars" class="ea-section dark" data-v-9367f239 data-v-795b7ae5><div class="ea-section-inner" data-v-795b7ae5><div class="ea-section-header" data-v-795b7ae5><!----><h2 class="ea-section-title" data-v-795b7ae5><!--[-->The best way to build apps<!--]--></h2><p class="ea-section-subtitle" data-v-795b7ae5><!--[-->Sync makes your apps super-fast, with end-to-end reactivity, resilience, and built-in multi-user collaboration.<!--]--></p></div><!--[--><!--[--><!----><!--]--><div class="sh-pillars md-exclude" data-v-9367f239><!--[--><a href="/blog/2025/07/29/super-fast-apps-on-sync-with-tanstack-db" class="sh-pillar" data-v-9367f239><div class="sh-pillar-num mono" data-v-9367f239>01</div><h4 class="sh-pillar-title" data-v-9367f239>Super-fast reactivity</h4><p class="sh-pillar-body" data-v-9367f239>Build fast, modern apps like Figma and Linear. Sub-millisecond reactivity and instant local writes.</p><span class="sh-pillar-link" data-v-9367f239>Read more →</span></a><a href="/blog/2026/03/24/durable-transport-ai-sdks" class="sh-pillar" data-v-9367f239><div class="sh-pillar-num mono" data-v-9367f239>02</div><h4 class="sh-pillar-title" data-v-9367f239>Resilient transport</h4><p class="sh-pillar-body" data-v-9367f239>Build apps that work reliably, even with patchy connectivity. Resilient transport that ensures data is never lost.</p><span class="sh-pillar-link" data-v-9367f239>Read more →</span></a><a href="/blog/2026/01/12/durable-sessions-for-collaborative-ai" class="sh-pillar" data-v-9367f239><div class="sh-pillar-num mono" data-v-9367f239>03</div><h4 class="sh-pillar-title" data-v-9367f239>Real-time collaboration</h4><p class="sh-pillar-body" data-v-9367f239>Build multi-user, multi-agent apps that naturally support both real-time and asynchronous collaboration.</p><span class="sh-pillar-link" data-v-9367f239>Read more →</span></a><a href="/blog/2026/04/08/data-primitive-agent-loop" class="sh-pillar" data-v-9367f239><div class="sh-pillar-num mono" data-v-9367f239>04</div><h4 class="sh-pillar-title" data-v-9367f239>Durable state</h4><p class="sh-pillar-body" data-v-9367f239>Build multi-step agentic workflows that survive crashes and restarts. Agents and workers resume from the same durable state.</p><span class="sh-pillar-link" data-v-9367f239>Read more →</span></a><!--]--></div><!--]--><!----></div></section><section id="first-sync" class="ea-section" data-v-9367f239 data-v-795b7ae5><div class="ea-section-inner" data-v-795b7ae5><div class="ea-section-header" data-v-795b7ae5><div class="ea-section-eyebrow mono" data-v-795b7ae5><!--[--><span class="md-exclude" data-v-9367f239>Postgres Sync  +  TanStack DB</span><!--]--></div><h2 class="ea-section-title" data-v-795b7ae5><!--[-->Your first sync, end to end<!--]--></h2><p class="ea-section-subtitle" data-v-795b7ae5><!--[--> Compose <a href="/sync/postgres-sync" data-v-9367f239>Postgres Sync</a> with <a href="/sync/tanstack-db" data-v-9367f239>TanStack DB</a> to ship a real-time feature in three moves: define a shape on the server, mount a collection on the client, render a live query. <!--]--></p></div><!--[--><div class="sh-first-sync" data-v-9367f239><div class="sh-first-sync-grid" data-v-9367f239><div class="sh-fs-col" data-v-9367f239><div class="sh-fs-panel" data-v-9367f239><div class="code-file-header mono" data-v-9367f239> api/todos.ts  <span class="muted" data-v-9367f239>— server proxy</span></div><pre class="code-block annotated" data-v-9367f239><code data-v-9367f239><span class="tk-kw" data-v-9367f239>export const</span> <span class="tk-v" data-v-9367f239>ServerRoute</span> = <span class="tk-fn" data-v-9367f239>createServerFileRoute</span>(<span class="tk-str" data-v-9367f239>&quot;/api/todos&quot;</span>).<span class="tk-fn" data-v-9367f239>methods</span>({
  <span class="tk-prop" data-v-9367f239>GET</span>: <span class="tk-kw" data-v-9367f239>async</span> ({ <span class="tk-v" data-v-9367f239>request</span> }) <span class="tk-kw" data-v-9367f239>=&gt;</span> {
    <span class="tk-kw" data-v-9367f239>const</span> <span class="tk-v" data-v-9367f239>url</span> = <span class="tk-kw" data-v-9367f239>new</span> <span class="tk-v" data-v-9367f239>URL</span>(<span class="tk-v" data-v-9367f239>request</span>.<span class="tk-prop" data-v-9367f239>url</span>)
    <span class="tk-kw" data-v-9367f239>const</span> <span class="tk-v" data-v-9367f239>origin</span> = <span class="tk-kw" data-v-9367f239>new</span> <span class="tk-v" data-v-9367f239>URL</span>(<span class="tk-str" data-v-9367f239>&quot;https://api.electric-sql.cloud/v1/shape&quot;</span>)<span class="ann-marker" data-n="1" data-v-9367f239></span>
    <span class="tk-v" data-v-9367f239>url</span>.<span class="tk-prop" data-v-9367f239>searchParams</span>.<span class="tk-fn" data-v-9367f239>forEach</span>((<span class="tk-v" data-v-9367f239>v</span>, <span class="tk-v" data-v-9367f239>k</span>) <span class="tk-kw" data-v-9367f239>=&gt;</span>
      <span class="tk-v" data-v-9367f239>ELECTRIC_PROTOCOL_QUERY_PARAMS</span>.<span class="tk-fn" data-v-9367f239>includes</span>(<span class="tk-v" data-v-9367f239>k</span>) &amp;&amp;
        <span class="tk-v" data-v-9367f239>origin</span>.<span class="tk-prop" data-v-9367f239>searchParams</span>.<span class="tk-fn" data-v-9367f239>set</span>(<span class="tk-v" data-v-9367f239>k</span>, <span class="tk-v" data-v-9367f239>v</span>))

    <span class="tk-v" data-v-9367f239>origin</span>.<span class="tk-prop" data-v-9367f239>searchParams</span>.<span class="tk-fn" data-v-9367f239>set</span>(<span class="tk-str" data-v-9367f239>&quot;table&quot;</span>, <span class="tk-str" data-v-9367f239>&quot;todos&quot;</span>)<span class="ann-marker" data-n="2" data-v-9367f239></span>
    <span class="tk-v" data-v-9367f239>origin</span>.<span class="tk-prop" data-v-9367f239>searchParams</span>.<span class="tk-fn" data-v-9367f239>set</span>(<span class="tk-str" data-v-9367f239>&quot;where&quot;</span>, <span class="tk-str" data-v-9367f239>&quot;user_id = $1&quot;</span>)
    <span class="tk-v" data-v-9367f239>origin</span>.<span class="tk-prop" data-v-9367f239>searchParams</span>.<span class="tk-fn" data-v-9367f239>set</span>(<span class="tk-str" data-v-9367f239>&quot;params&quot;</span>, <span class="tk-v" data-v-9367f239>JSON</span>.<span class="tk-fn" data-v-9367f239>stringify</span>([<span class="tk-v" data-v-9367f239>user</span>.<span class="tk-prop" data-v-9367f239>id</span>]))<span class="ann-marker" data-n="3" data-v-9367f239></span>

    <span class="tk-kw" data-v-9367f239>return</span> <span class="tk-fn" data-v-9367f239>fetch</span>(<span class="tk-v" data-v-9367f239>origin</span>)<span class="ann-marker" data-n="4" data-v-9367f239></span>
  },
})</code></pre></div><div class="sh-fs-panel" data-v-9367f239><div class="code-file-header mono" data-v-9367f239> app/Todos.tsx  <span class="muted" data-v-9367f239>— client</span></div><pre class="code-block annotated" data-v-9367f239><code data-v-9367f239><span class="tk-kw" data-v-9367f239>export const</span> <span class="tk-v" data-v-9367f239>todoCollection</span> = <span class="tk-fn" data-v-9367f239>createCollection</span>(
  <span class="tk-fn" data-v-9367f239>electricCollectionOptions</span>({<span class="ann-marker" data-n="5" data-v-9367f239></span>
    <span class="tk-prop" data-v-9367f239>id</span>: <span class="tk-str" data-v-9367f239>&quot;todos&quot;</span>,
    <span class="tk-prop" data-v-9367f239>shapeOptions</span>: { <span class="tk-prop" data-v-9367f239>url</span>: <span class="tk-str" data-v-9367f239>&quot;/api/todos&quot;</span> },
    <span class="tk-prop" data-v-9367f239>getKey</span>: (<span class="tk-v" data-v-9367f239>row</span>) <span class="tk-kw" data-v-9367f239>=&gt;</span> <span class="tk-v" data-v-9367f239>row</span>.<span class="tk-prop" data-v-9367f239>id</span>,
  }),
)

<span class="tk-kw" data-v-9367f239>export function</span> <span class="tk-fn" data-v-9367f239>Todos</span>() {
  <span class="tk-kw" data-v-9367f239>const</span> { <span class="tk-v" data-v-9367f239>data</span> } = <span class="tk-fn" data-v-9367f239>useLiveQuery</span>((<span class="tk-v" data-v-9367f239>q</span>) <span class="tk-kw" data-v-9367f239>=&gt;</span><span class="ann-marker" data-n="6" data-v-9367f239></span>
    <span class="tk-v" data-v-9367f239>q</span>.<span class="tk-fn" data-v-9367f239>from</span>({ <span class="tk-prop" data-v-9367f239>todo</span>: <span class="tk-v" data-v-9367f239>todoCollection</span> })
     .<span class="tk-fn" data-v-9367f239>where</span>(({ <span class="tk-v" data-v-9367f239>todo</span> }) <span class="tk-kw" data-v-9367f239>=&gt;</span> <span class="tk-v" data-v-9367f239>eq</span>(<span class="tk-v" data-v-9367f239>todo</span>.<span class="tk-prop" data-v-9367f239>completed</span>, <span class="tk-kw" data-v-9367f239>false</span>)),
  )
  <span class="tk-kw" data-v-9367f239>return</span> &lt;<span class="tk-v" data-v-9367f239>List</span> <span class="tk-prop" data-v-9367f239>todos</span>={<span class="tk-v" data-v-9367f239>data</span>} /&gt;
}</code></pre></div></div><div class="sh-fs-col" data-v-9367f239><ol class="sh-fs-annos" data-v-9367f239><li class="sh-fs-anno" data-v-9367f239><span class="num" data-v-9367f239>1</span><div data-v-9367f239><strong data-v-9367f239>Server-side proxy.</strong><p data-v-9367f239> Forward the request to your Electric instance. Keep the source secret on the server. </p></div></li><li class="sh-fs-anno" data-v-9367f239><span class="num" data-v-9367f239>2</span><div data-v-9367f239><strong data-v-9367f239>Pin the table.</strong><p data-v-9367f239> The shape is defined server-side, not by the client. The client can&#39;t ask for tables it shouldn&#39;t see. </p></div></li><li class="sh-fs-anno" data-v-9367f239><span class="num" data-v-9367f239>3</span><div data-v-9367f239><strong data-v-9367f239>Tenant isolation.</strong><p data-v-9367f239> Bind the <code data-v-9367f239>where</code> clause to the authenticated user — every client gets its own slice. </p></div></li><li class="sh-fs-anno" data-v-9367f239><span class="num" data-v-9367f239>4</span><div data-v-9367f239><strong data-v-9367f239>It&#39;s just HTTP.</strong><p data-v-9367f239> Shapes stream over plain HTTP. Cache, log and rate-limit them with the middleware you already use. </p></div></li><li class="sh-fs-anno" data-v-9367f239><span class="num" data-v-9367f239>5</span><div data-v-9367f239><strong data-v-9367f239>Mount a collection.</strong><p data-v-9367f239> An Electric collection in TanStack DB — local, reactive, persisted. </p></div></li><li class="sh-fs-anno" data-v-9367f239><span class="num" data-v-9367f239>6</span><div data-v-9367f239><strong data-v-9367f239>Render a live query.</strong><p data-v-9367f239> Sub-millisecond reactivity over the local data. Updates flow in as the shape changes. </p></div></li></ol></div></div><div class="sh-fs-cta" data-v-9367f239><a class="VPButton medium brand" href="/docs/sync/quickstart" data-v-9367f239 data-v-43af2b7a>Quickstart</a><a class="VPButton medium alt" href="/docs/sync" data-v-9367f239 data-v-43af2b7a>Read the Docs</a></div></div><!--]--><!----></div></section><section id="demos" class="ea-section dark" data-v-9367f239 data-v-795b7ae5><div class="ea-section-inner" data-v-795b7ae5><div class="ea-section-header" data-v-795b7ae5><!----><h2 class="ea-section-title" data-v-795b7ae5><!--[-->Demos<!--]--></h2><p class="ea-section-subtitle" data-v-795b7ae5><!--[-->Reference apps you can clone, run locally, and learn from.<!--]--></p></div><!--[--><!--[--><!----><!--]--><div class="sh-demos md-exclude" data-v-9367f239><!--[--><a class="sh-demo" href="/sync/demos/burn" data-v-9367f239><div class="sh-demo-frame" data-v-9367f239><img src="/img/demos/burn.jpg" alt="Burn" data-v-9367f239></div><div class="sh-demo-meta" data-v-9367f239><h4 class="sh-demo-title" data-v-9367f239>Burn</h4><p class="sh-demo-body" data-v-9367f239>Agentic system built on Postgres and a real-time sync stack.</p></div></a><a class="sh-demo" href="/sync/demos/ai-chat" data-v-9367f239><div class="sh-demo-frame" data-v-9367f239><img src="/img/demos/ai-chat-demo.png" alt="AI Chat" data-v-9367f239></div><div class="sh-demo-meta" data-v-9367f239><h4 class="sh-demo-title" data-v-9367f239>AI Chat</h4><p class="sh-demo-body" data-v-9367f239>Resilient, multi-user, multi-agent AI chat app powered by Electric.</p></div></a><a class="sh-demo" href="/sync/demos/linearlite" data-v-9367f239><div class="sh-demo-frame" data-v-9367f239><img src="/img/demos/linearlite-demo.png" alt="Linearlite" data-v-9367f239></div><div class="sh-demo-meta" data-v-9367f239><h4 class="sh-demo-title" data-v-9367f239>Linearlite</h4><p class="sh-demo-body" data-v-9367f239>Local-first project management app built with Electric and PGlite.</p></div></a><!--]--></div><!--]--><!----></div></section><section id="blog" class="ea-section" data-v-9367f239 data-v-795b7ae5><div class="ea-section-inner" data-v-795b7ae5><div class="ea-section-header" data-v-795b7ae5><!----><h2 class="ea-section-title" data-v-795b7ae5><!--[-->From the blog<!--]--></h2><p class="ea-section-subtitle" data-v-795b7ae5><!--[-->Deep dives into sync engine architecture, the agent loop, and building real apps on the stack.<!--]--></p></div><!--[--><!--[--><!----><div class="curated-posts" data-v-09983742><!--[--><div class="post" data-v-09983742 data-v-cbc348de><a href="/blog/2026/04/08/data-primitive-agent-loop" class="no-visual" data-v-cbc348de><div class="post-image" data-v-cbc348de><img src="/.netlify/images?url=%2Fimg%2Fblog%2Fdata-primitive-agent-loop%2Fheader.jpg&amp;w=400" srcset="/.netlify/images?url=%2Fimg%2Fblog%2Fdata-primitive-agent-loop%2Fheader.jpg&amp;w=320 320w, /.netlify/images?url=%2Fimg%2Fblog%2Fdata-primitive-agent-loop%2Fheader.jpg&amp;w=640 640w" sizes="(max-width: 400px) 100vw, 400px" width="400" height="300" alt loading="lazy" decoding="async" data-v-cbc348de></div><div class="post-body" data-v-cbc348de><h3 data-v-cbc348de>Durable Streams — the data primitive for the agent loop</h3><span class="post-link" data-v-cbc348de>Read post →</span></div></a></div><div class="post" data-v-09983742 data-v-cbc348de><a href="/blog/2025/07/29/super-fast-apps-on-sync-with-tanstack-db" class="no-visual" data-v-cbc348de><div class="post-image" data-v-cbc348de><img src="/.netlify/images?url=%2Fimg%2Fblog%2Flocal-first-sync-with-tanstack-db%2Fheader2.jpg&amp;w=400" srcset="/.netlify/images?url=%2Fimg%2Fblog%2Flocal-first-sync-with-tanstack-db%2Fheader2.jpg&amp;w=320 320w, /.netlify/images?url=%2Fimg%2Fblog%2Flocal-first-sync-with-tanstack-db%2Fheader2.jpg&amp;w=640 640w" sizes="(max-width: 400px) 100vw, 400px" width="400" height="300" alt loading="lazy" decoding="async" data-v-cbc348de></div><div class="post-body" data-v-cbc348de><h3 data-v-cbc348de>Super-fast apps on sync with Electric and TanStack DB</h3><span class="post-link" data-v-cbc348de>Read post →</span></div></a></div><div class="post" data-v-09983742 data-v-cbc348de><a href="/blog/2026/03/25/tanstack-db-0.6-app-ready-with-persistence-and-includes" class="no-visual" data-v-cbc348de><div class="post-image" data-v-cbc348de><img src="/.netlify/images?url=%2Fimg%2Fblog%2Ftanstack-db-0.6-app-ready-with-persistence-and-includes%2Fheader.jpg&amp;w=400" srcset="/.netlify/images?url=%2Fimg%2Fblog%2Ftanstack-db-0.6-app-ready-with-persistence-and-includes%2Fheader.jpg&amp;w=320 320w, /.netlify/images?url=%2Fimg%2Fblog%2Ftanstack-db-0.6-app-ready-with-persistence-and-includes%2Fheader.jpg&amp;w=640 640w" sizes="(max-width: 400px) 100vw, 400px" width="400" height="300" alt loading="lazy" decoding="async" data-v-cbc348de></div><div class="post-body" data-v-cbc348de><h3 data-v-cbc348de>Electric apps get persistence and includes with TanStack DB 0.6</h3><span class="post-link" data-v-cbc348de>Read post →</span></div></a></div><div class="post" data-v-09983742 data-v-cbc348de><a href="/blog/2024/11/21/local-first-with-your-existing-api" class="no-visual" data-v-cbc348de><div class="post-image" data-v-cbc348de><img src="/.netlify/images?url=%2Fimg%2Fblog%2Flocal-first-with-your-existing-api%2Fhumble-toaster.jpg&amp;w=400" srcset="/.netlify/images?url=%2Fimg%2Fblog%2Flocal-first-with-your-existing-api%2Fhumble-toaster.jpg&amp;w=320 320w, /.netlify/images?url=%2Fimg%2Fblog%2Flocal-first-with-your-existing-api%2Fhumble-toaster.jpg&amp;w=640 640w" sizes="(max-width: 400px) 100vw, 400px" width="400" height="300" alt loading="lazy" decoding="async" data-v-cbc348de></div><div class="post-body" data-v-cbc348de><h3 data-v-cbc348de>Local-first with your existing API</h3><span class="post-link" data-v-cbc348de>Read post →</span></div></a></div><!--]--></div><!--]--><!--]--><div class="ea-section-actions" data-v-795b7ae5><!--[--><a class="VPButton medium alt" href="/blog" data-v-9367f239 data-v-43af2b7a>Electric Blog</a><!--]--></div></div></section><section class="bottom-cta-strap" id="get-started" data-v-9367f239 data-v-0c117666><div class="bottom-cta" data-v-0c117666><div class="bottom-cta-eyebrow mono" data-v-0c117666><span class="dot" data-v-0c117666></span><!--[--><span class="md-exclude" data-v-9367f239>Open source · Apache 2.0 · ★ 9.5k</span><!--]--></div><h2 class="bottom-cta-title" data-v-0c117666><!--[--> Start syncing in minutes <!--]--></h2><p class="bottom-cta-tagline" data-v-0c117666><!--[--> Spin up the starter, point it at Postgres, and ship a real-time app on top of your existing stack. <!--]--></p><div class="bottom-cta-install" data-v-0c117666><!--[--><button class="install-pill install-pill--sunken" type="button" aria-label="Copy npx @electric-sql/start my-electric-app to clipboard" data-v-9367f239 data-v-ae27e236><span class="install-pill-text" data-v-ae27e236><span class="install-pill-prompt" data-v-ae27e236>$</span><!--[--><!--[--><!----><span class="install-pill-tok install-pill-tok--muted" data-v-ae27e236>npx</span><!--]--><!--[--><span data-v-ae27e236> </span><span class="install-pill-tok install-pill-tok--accent" data-v-ae27e236>@electric-sql/start</span><!--]--><!--[--><span data-v-ae27e236> </span><span class="install-pill-tok install-pill-tok--muted" data-v-ae27e236>my-electric-app</span><!--]--><!--]--></span><span class="install-pill-copy" aria-hidden="true" data-v-ae27e236><svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" data-v-ae27e236><rect width="14" height="14" x="8" y="8" rx="2" ry="2" data-v-ae27e236></rect><path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2" data-v-ae27e236></path></svg></span></button><!--]--></div><div class="bottom-cta-buttons" data-v-0c117666><!--[--><a class="VPButton medium brand" href="/docs/sync/quickstart" data-v-9367f239 data-v-43af2b7a>Quickstart</a><a class="VPButton medium alt" href="/docs/sync" data-v-9367f239 data-v-43af2b7a>Docs</a><a class="VPButton medium alt" href="https://github.com/electric-sql/electric" target="_blank" rel="noreferrer" data-v-9367f239 data-v-43af2b7a>GitHub</a><!--]--></div></div></section></div><!--]--></div></div><!--[--><!--]--></div></div><!----><!--[--><footer class="VPFooter" data-v-59bb903a><div class="container" data-v-59bb903a><p class="footer-logo" data-v-59bb903a><img class="footer-logo-img footer-logo-dark" src="/img/brand/logo.svg" alt="Electric" data-v-59bb903a><img class="footer-logo-img footer-logo-light" src="/img/brand/logo.inverse.svg" alt="Electric" data-v-59bb903a></p><nav class="footer-nav" data-v-59bb903a><a href="/about/community" data-v-59bb903a>About</a><a href="/about/contact" data-v-59bb903a>Contact</a><a href="/about/legal/terms" data-v-59bb903a>Legal</a><a href="/docs/sync/" data-v-59bb903a>Docs</a><a href="/sync/demos/" data-v-59bb903a>Demos</a><a href="/blog" data-v-59bb903a>Blog</a><a href="https://dashboard.electric-sql.cloud/" data-v-59bb903a>Sign up</a></nav><nav class="footer-social" data-v-59bb903a><a href="https://tanstack.com/db" aria-label="TanStack DB" data-v-59bb903a><span class="vpi-social-tanstack" data-v-59bb903a></span><span class="social-name" data-v-59bb903a>TanStack DB</span></a><a href="https://pglite.dev" aria-label="PGlite" data-v-59bb903a><span class="vpi-social-pglite" data-v-59bb903a></span><span class="social-name" data-v-59bb903a>PGlite</span></a><a href="https://x.com/ElectricSQL" aria-label="X" data-v-59bb903a><span class="vpi-social-x" data-v-59bb903a></span><span class="social-name" data-v-59bb903a>X</span></a><a href="https://bsky.app/profile/electric.ax" aria-label="Bluesky" data-v-59bb903a><span class="vpi-social-bluesky" data-v-59bb903a></span><span class="social-name" data-v-59bb903a>Bluesky</span></a><a href="https://discord.electric-sql.com" aria-label="Discord" data-v-59bb903a><span class="vpi-social-discord" data-v-59bb903a></span><span class="social-name" data-v-59bb903a>Discord</span></a><a href="https://github.com/electric-sql" aria-label="GitHub" data-v-59bb903a><span class="vpi-social-github" data-v-59bb903a></span><span class="social-name" data-v-59bb903a>GitHub</span></a></nav><p class="copyright" data-v-59bb903a> © 2026 Electric DB Inc. Released under the <a href="https://github.com/electric-sql/electric/blob/main/LICENSE" target="_blank" data-v-59bb903a>Apache 2.0</a> License. </p><div class="footer-markdown-link" data-v-59bb903a><a class="markdown-link-footer" href="/sync/index.md" target="_blank" rel="noopener" data-v-59bb903a data-v-f88f512c><span class="title" data-v-f88f512c>✨ Markdown</span></a></div></div></footer><!--]--></div></div>
    <script>window.__VP_HASH_MAP__=JSON.parse("{\"about_community.md\":\"UuQw7PpW\",\"about_contact.md\":\"CrWeZGP9\",\"about_index.md\":\"Bq4KZzf1\",\"about_legal_delete-account.md\":\"DICjdN43\",\"about_legal_dpa.md\":\"CrPdIFxp\",\"about_legal_privacy.md\":\"C611Yjau\",\"about_legal_subprocessors.md\":\"60BNvMnV\",\"about_legal_terms.md\":\"DT1KLhME\",\"about_team.md\":\"CFJikY0z\",\"agents_demos.md\":\"C6KXCB6_\",\"agents_demos_chat-starter.md\":\"jOrNZOok\",\"agents_demos_deep-survey.md\":\"Zo9eelhq\",\"agents_index.md\":\"D5Vs-BRf\",\"app.md\":\"BhKbexup\",\"blog.md\":\"ofOT4asT\",\"blog_2022_05_03_introducing-rich-crdts.md\":\"mRerUczD\",\"blog_2022_05_20_relativity-causal-consistency.md\":\"COcdxIu1\",\"blog_2022_12_16_evolution-state-transfer.md\":\"DYPI1l3N\",\"blog_2023_02_02_introducing-jose-kevin-garry.md\":\"BwaGnHCI\",\"blog_2023_02_09_developing-local-first-software.md\":\"CZeRedyL\",\"blog_2023_05_10_welcome-andrei-oleksii.md\":\"eiBWAe3D\",\"blog_2023_09_20_introducing-electricsql-v0.6.md\":\"DDWXSB9a\",\"blog_2023_10_10_welcome-sam.md\":\"CkitPE9L\",\"blog_2023_10_12_linerlite-local-first-with-react.md\":\"ui4X1QdI\",\"blog_2023_10_26_local-first-software-london-meet-up.md\":\"BJFxTL0q\",\"blog_2023_11_02_electricsql-v0.7-released.md\":\"DXl8qrG7\",\"blog_2023_11_02_using-electricsql-with-the-ionic-framework-and-capacitor.md\":\"CCh6Rzbz\",\"blog_2023_12_13_electricsql-v0.8-released.md\":\"kEmocVVP\",\"blog_2023_12_15_secure-transactions-with-local-first.md\":\"E9HixMLR\",\"blog_2024_01_24_electricsql-v0.9-released.md\":\"gfcO1sKX\",\"blog_2024_02_05_local-first-ai-with-tauri-postgres-pgvector-llama.md\":\"DwsPscOL\",\"blog_2024_02_27_intel-ignite.md\":\"CYQ4ZqQL\",\"blog_2024_04_10_electricsql-v0.10-released.md\":\"zHPlO7EW\",\"blog_2024_05_14_electricsql-postgres-client-support.md\":\"COsfmo0d\",\"blog_2024_07_17_electric-next.md\":\"Deyv0ZgX\",\"blog_2024_11_21_local-first-with-your-existing-api.md\":\"D2sFRRct\",\"blog_2024_12_10_electric-beta-release.md\":\"CMQETgpK\",\"blog_2025_03_17_electricsql-1.0-released.md\":\"DsGpPE4A\",\"blog_2025_04_07_electric-cloud-public-beta-release.md\":\"Bjfl35T-\",\"blog_2025_04_09_building-ai-apps-on-sync.md\":\"B3B-lRW9\",\"blog_2025_04_22_untangling-llm-spaghetti.md\":\"D4wPgzao\",\"blog_2025_06_05_database-in-the-sandbox.md\":\"Bh9Hqadw\",\"blog_2025_07_29_super-fast-apps-on-sync-with-tanstack-db.md\":\"DSrYj0du\",\"blog_2025_08_04_reliability-sprint.md\":\"B8mnnGjP\",\"blog_2025_08_12_bringing-agents-back-down-to-earth.md\":\"0BjqObCU\",\"blog_2025_08_13_electricsql-v1.1-released.md\":\"-4PdpeCE\",\"blog_2025_12_09_announcing-durable-streams.md\":\"aC3UpQtp\",\"blog_2025_12_23_durable-streams-0.1.0.md\":\"CYvoVp1w\",\"blog_2026_01_12_durable-sessions-for-collaborative-ai.md\":\"C_Ece-8n\",\"blog_2026_01_20_from-science-fiction-to-reality-you-can-build-difficult-things-now.md\":\"DIqN2k2l\",\"blog_2026_01_22_announcing-hosted-durable-streams.md\":\"DZ8U66OM\",\"blog_2026_02_02_configurancy.md\":\"C8sfka6L\",\"blog_2026_02_19_amdahls-law-for-ai-agents.md\":\"B1d9DqMw\",\"blog_2026_03_06_agent-skills-now-shipping.md\":\"BZdruk20\",\"blog_2026_03_24_durable-transport-ai-sdks.md\":\"Cvjb-9Yu\",\"blog_2026_03_25_announcing-pglite-v04.md\":\"ByHu8ESa\",\"blog_2026_03_25_tanstack-db-0.6-app-ready-with-persistence-and-includes.md\":\"DMSoDlVK\",\"blog_2026_03_26_stream-db.md\":\"CEfor2AD\",\"blog_2026_04_02_electric-cloud-pricing.md\":\"VJpp1eZT\",\"blog_2026_04_07_yjs-durable-streams-on-electric-cloud.md\":\"D-jS_4_n\",\"blog_2026_04_08_ai-agents-as-crdt-peers-with-yjs.md\":\"b_HPl6j1\",\"blog_2026_04_08_data-primitive-agent-loop.md\":\"lw7j3UtO\",\"blog_2026_04_15_fork-branching-for-durable-streams.md\":\"Whm6CPqM\",\"blog_2026_04_20_doom-on-durable-streams.md\":\"BUeKgpEs\",\"blog_2026_04_29_introducing-electric-agents.md\":\"DRAvdYH9\",\"blog_2026_06_04_serverless-agents.md\":\"DtlH42na\",\"blog_2026_06_16_electric-agents-0-6-from-runtime-to-app.md\":\"B9-yTiO_\",\"blog_2026_06_25_pglite-reaches-10-million-weekly-downloads.md\":\"CElPFtoP\",\"blog_2026_06_26_durable-streams-at-kernel-speed.md\":\"Cbxtjx1W\",\"blog_2026_07_17_electric-circuits.md\":\"-cFNWPsT\",\"blog_2026_08_11_electric-joining-databricks.md\":\"B7o71sMj\",\"brand-toys.md\":\"Fy4UQIH0\",\"changelog.md\":\"Clr1MXla\",\"cloud_cli.md\":\"BU7cLi80\",\"cloud_index.md\":\"CSI1D_9q\",\"cloud_usage.md\":\"D9728tKK\",\"docs_agents_entities_agents_horton.md\":\"CVxAcC4x\",\"docs_agents_entities_agents_worker.md\":\"CQsIM53N\",\"docs_agents_entities_patterns_blackboard.md\":\"DaujizbE\",\"docs_agents_entities_patterns_dispatcher.md\":\"BtvRjkuQ\",\"docs_agents_entities_patterns_manager-worker.md\":\"r4RZOFKq\",\"docs_agents_entities_patterns_map-reduce.md\":\"C0TFuyhH\",\"docs_agents_entities_patterns_pipeline.md\":\"Dzjb_2Hh\",\"docs_agents_entities_patterns_reactive-observers.md\":\"DIu4o0Yz\",\"docs_agents_examples_playground.md\":\"C5EdQJjM\",\"docs_agents_index.md\":\"BG-YHP_e\",\"docs_agents_quickstart.md\":\"D5QlDjVW\",\"docs_agents_reference_agent-config.md\":\"DZ150NYR\",\"docs_agents_reference_agent-tool.md\":\"DW0Xz5pm\",\"docs_agents_reference_built-in-collections.md\":\"CLLSdrk7\",\"docs_agents_reference_cli.md\":\"COPEynMU\",\"docs_agents_reference_entity-definition.md\":\"C-1S3OER\",\"docs_agents_reference_entity-handle.md\":\"Bz6Fcrke\",\"docs_agents_reference_entity-registry.md\":\"CZ90_MSf\",\"docs_agents_reference_handler-context.md\":\"Dx29ZNB3\",\"docs_agents_reference_mcp-registry.md\":\"rAC7EPF9\",\"docs_agents_reference_mcp-server-config.md\":\"CaLJl9IN\",\"docs_agents_reference_runtime-handler.md\":\"53ebZQFF\",\"docs_agents_reference_shared-state-handle.md\":\"otE5AGpG\",\"docs_agents_reference_state-collection-proxy.md\":\"CqJ6GdML\",\"docs_agents_reference_wake-event.md\":\"D8Qj15NO\",\"docs_agents_usage_app-setup.md\":\"DjUCUPmR\",\"docs_agents_usage_attachments.md\":\"llfxlKOb\",\"docs_agents_usage_clients-and-react.md\":\"C0oaRkgq\",\"docs_agents_usage_configuring-the-agent.md\":\"DvqFwsOG\",\"docs_agents_usage_context-composition.md\":\"ZIuwF0Je\",\"docs_agents_usage_defining-entities.md\":\"Cv3KgQlC\",\"docs_agents_usage_defining-tools.md\":\"ROR2cyab\",\"docs_agents_usage_embedded-builtins.md\":\"CVO_gNQE\",\"docs_agents_usage_managing-state.md\":\"DV3au0Qo\",\"docs_agents_usage_mcp-servers.md\":\"CxxQ7Ye7\",\"docs_agents_usage_overview.md\":\"xyImYIEN\",\"docs_agents_usage_permissions-and-principals.md\":\"DDIT5K1I\",\"docs_agents_usage_programmatic-runtime-client.md\":\"BHpq3A0B\",\"docs_agents_usage_sandboxing.md\":\"3FZKbnMg\",\"docs_agents_usage_shared-state.md\":\"Bw7AnIyB\",\"docs_agents_usage_signals.md\":\"BsLK8Ywv\",\"docs_agents_usage_spawning-and-coordinating.md\":\"CohnEMRv\",\"docs_agents_usage_testing.md\":\"KimbkNTV\",\"docs_agents_usage_waking-entities.md\":\"A-94GK18\",\"docs_agents_usage_webhook-sources.md\":\"Sqd2hNVr\",\"docs_agents_usage_writing-handlers.md\":\"DzcjSQ9L\",\"docs_agents_walkthrough.md\":\"Bvrqcrfi\",\"docs_streams_cli.md\":\"ObVBddHf\",\"docs_streams_clients_other.md\":\"DI1sHRPM\",\"docs_streams_clients_python.md\":\"D1GJddva\",\"docs_streams_clients_typescript.md\":\"DeyCrcc0\",\"docs_streams_durable-proxy.md\":\"Cc84hUE2\",\"docs_streams_durable-state.md\":\"D0_8bTEA\",\"docs_streams_index.md\":\"CxnjtvDd\",\"docs_streams_integrations_tanstack-ai.md\":\"I_qBEWHO\",\"docs_streams_integrations_vercel-ai-sdk.md\":\"BIo96yHu\",\"docs_streams_integrations_yjs.md\":\"SQoUkQjW\",\"docs_streams_json-mode.md\":\"BYbzS18a\",\"docs_streams_quickstart.md\":\"CORpX5Vd\",\"docs_streams_stream-db.md\":\"JyO1VTP4\",\"docs_streams_stream-fs.md\":\"BGEPNXi7\",\"docs_sync_api_clients_elixir.md\":\"w0-9uuFf\",\"docs_sync_api_clients_typescript.md\":\"BsdPKcK5\",\"docs_sync_api_config.md\":\"DHfZgyLI\",\"docs_sync_api_http.md\":\"CQ176Pxb\",\"docs_sync_guides_auth.md\":\"DfK4_zOQ\",\"docs_sync_guides_client-development.md\":\"J-yaSBtt\",\"docs_sync_guides_deployment.md\":\"DAN-IBOp\",\"docs_sync_guides_installation.md\":\"Diok8fHR\",\"docs_sync_guides_postgres-permissions.md\":\"UyadFc07\",\"docs_sync_guides_security.md\":\"spqe2WB0\",\"docs_sync_guides_shapes.md\":\"CGNnARt5\",\"docs_sync_guides_sharding.md\":\"D0WaY4Gr\",\"docs_sync_guides_troubleshooting.md\":\"p18oqooR\",\"docs_sync_guides_upgrading.md\":\"DaL6MuHF\",\"docs_sync_guides_writes.md\":\"C5pPvyYL\",\"docs_sync_index.md\":\"BZIXF6k7\",\"docs_sync_integrations_aws.md\":\"CFfyX_IX\",\"docs_sync_integrations_cloudflare.md\":\"DK2Plaiv\",\"docs_sync_integrations_crunchy.md\":\"Bon_YHsm\",\"docs_sync_integrations_digital-ocean.md\":\"DRoAY_DT\",\"docs_sync_integrations_expo.md\":\"DnyvQmMo\",\"docs_sync_integrations_fly.md\":\"08_ADkUX\",\"docs_sync_integrations_gcp.md\":\"D0zsl4B4\",\"docs_sync_integrations_livestore.md\":\"C2CGiYiU\",\"docs_sync_integrations_mobx.md\":\"D1G4Mv8y\",\"docs_sync_integrations_neon.md\":\"DBW4Q0UN\",\"docs_sync_integrations_netlify.md\":\"0Aoc0P12\",\"docs_sync_integrations_next.md\":\"EAcZc9He\",\"docs_sync_integrations_phoenix.md\":\"DYJCkdLF\",\"docs_sync_integrations_planetscale.md\":\"Md6CXZcP\",\"docs_sync_integrations_react.md\":\"CV4Er8Ia\",\"docs_sync_integrations_redis.md\":\"DYCyqyYq\",\"docs_sync_integrations_render.md\":\"BAKzq0e_\",\"docs_sync_integrations_supabase.md\":\"DvZPEbo3\",\"docs_sync_integrations_tanstack.md\":\"CSNjTR3p\",\"docs_sync_integrations_vercel.md\":\"e1iYsiVy\",\"docs_sync_integrations_yjs.md\":\"COYaMhy7\",\"docs_sync_llms__intro_redux.md\":\"C2GXx9EZ\",\"docs_sync_llms__quickstart_redux.md\":\"AW5dGiLC\",\"docs_sync_llms__tutorial.md\":\"DrRI3xNz\",\"docs_sync_quickstart.md\":\"DZjtiXKd\",\"docs_sync_reference_alternatives.md\":\"Dl302COE\",\"docs_sync_reference_benchmarks.md\":\"DYKqtXU8\",\"docs_sync_reference_literature.md\":\"DbBcRE0l\",\"docs_sync_reference_telemetry.md\":\"D6sH8Lgc\",\"docs_sync_stacks.md\":\"Bly4oaX4\",\"index.md\":\"VckipgZH\",\"llms.md\":\"BExSzd0K\",\"og_agents.md\":\"BZPK5qXQ\",\"og_cloud.md\":\"C5zjVLJI\",\"og_default.md\":\"CCS4LdPe\",\"og_streams.md\":\"CgzIIa2u\",\"og_sync.md\":\"CCPgPBwg\",\"old-index.md\":\"DdVbzBBY\",\"pricing.md\":\"Ck_PZyHK\",\"src_partials_home-cta.md\":\"DY6UbUj_\",\"src_partials_home-features-after.md\":\"C9DlaIGZ\",\"src_partials_home-features-before.md\":\"BAGq4DRI\",\"src_partials_home-your-stack-simplified.md\":\"e4A7FKZJ\",\"streams_demos_collaborative-ai-editor.md\":\"Ce4jAuvY\",\"streams_demos_durable-doom.md\":\"ByRQLtF3\",\"streams_demos_index.md\":\"ZeIcbC4q\",\"streams_demos_territory-wars.md\":\"CS0UJqw4\",\"streams_index.md\":\"Dtp5ynmr\",\"sync_demos_ai-chat.md\":\"au9O5yjj\",\"sync_demos_bash.md\":\"Dlgcfhz8\",\"sync_demos_burn.md\":\"BctCEEU5\",\"sync_demos_encryption.md\":\"D60GDQJb\",\"sync_demos_gatekeeper-auth.md\":\"-7F5bQPB\",\"sync_demos_index.md\":\"DBsaGlYm\",\"sync_demos_linearlite.md\":\"CB-dKY9S\",\"sync_demos_nextjs.md\":\"BglOX7oy\",\"sync_demos_notes.md\":\"n-0At1ak\",\"sync_demos_phoenix-liveview.md\":\"p5-vNs2t\",\"sync_demos_pixel-art.md\":\"cUcP17Te\",\"sync_demos_proxy-auth.md\":\"DxUTwVG4\",\"sync_demos_react.md\":\"o4Tzw8A0\",\"sync_demos_redis.md\":\"BsZZk2C1\",\"sync_demos_remix.md\":\"TwFt5iIX\",\"sync_demos_tanstack.md\":\"CTHQEbxX\",\"sync_demos_todo-app.md\":\"CRr1YjnV\",\"sync_demos_write-patterns.md\":\"YGD2CIKU\",\"sync_demos_yjs.md\":\"H4FNKtRy\",\"sync_index.md\":\"CygiKUnA\",\"sync_pglite.md\":\"C3lqrXXk\",\"sync_postgres-sync.md\":\"DYcl4YY7\",\"sync_tanstack-db.md\":\"BgQvoWlg\"}");window.__VP_SITE_DATA__=JSON.parse("{\"lang\":\"en\",\"dir\":\"ltr\",\"title\":\"Electric\",\"description\":\"Electric provides the data primitives and infra to build collaborative, multi-agent systems. Including Postgres Sync, Durable Streams, TanStack DB and PGlite.\",\"base\":\"/\",\"head\":[],\"router\":{\"prefetchLinks\":true},\"appearance\":\"force-dark\",\"themeConfig\":{\"editLink\":{\"pattern\":\"https://github.com/electric-sql/electric/edit/main/website/:path\"},\"logo\":{\"light\":\"/img/brand/logo.inverse.svg\",\"dark\":\"/img/brand/logo.svg\",\"alt\":\"Electric\"},\"nav\":[],\"search\":{\"provider\":\"local\"},\"sidebar\":{\"/cloud/\":[{\"text\":\"Hosted products\",\"collapsed\":false,\"items\":[{\"text\":\"Electric Streams\",\"link\":\"/streams\"},{\"text\":\"Electric Sync\",\"link\":\"/sync\"}]}],\"/sync/postgres-sync\":[{\"text\":\"Sync primitives\",\"collapsed\":false,\"items\":[{\"text\":\"Postgres Sync\",\"link\":\"/sync/postgres-sync\"},{\"text\":\"TanStack DB\",\"link\":\"/sync/tanstack-db\"},{\"text\":\"PGlite\",\"link\":\"/sync/pglite\"}]},{\"text\":\"Guides\",\"collapsed\":false,\"items\":[{\"text\":\"Auth\",\"link\":\"/docs/sync/guides/auth\"},{\"text\":\"Shapes\",\"link\":\"/docs/sync/guides/shapes\"},{\"text\":\"Writes\",\"link\":\"/docs/sync/guides/writes\"},{\"text\":\"Installation\",\"link\":\"/docs/sync/guides/installation\"},{\"text\":\"PostgreSQL Permissions\",\"link\":\"/docs/sync/guides/postgres-permissions\"},{\"text\":\"Deployment\",\"link\":\"/docs/sync/guides/deployment\"},{\"text\":\"Upgrading\",\"link\":\"/docs/sync/guides/upgrading\"},{\"text\":\"Sharding\",\"link\":\"/docs/sync/guides/sharding\"},{\"text\":\"Security\",\"link\":\"/docs/sync/guides/security\"},{\"text\":\"Troubleshooting\",\"link\":\"/docs/sync/guides/troubleshooting\"},{\"text\":\"Client development\",\"link\":\"/docs/sync/guides/client-development\"}]},{\"text\":\"API\",\"collapsed\":false,\"items\":[{\"text\":\"HTTP\",\"link\":\"/docs/sync/api/http\"},{\"text\":\"Clients\",\"items\":[{\"text\":\"TypeScript\",\"link\":\"/docs/sync/api/clients/typescript\"},{\"text\":\"Elixir\",\"link\":\"/docs/sync/api/clients/elixir\"}],\"collapsed\":false},{\"text\":\"Config\",\"link\":\"/docs/sync/api/config\"}]},{\"text\":\"Integrations\",\"collapsed\":false,\"items\":[{\"text\":\"Frameworks\",\"items\":[{\"text\":\"LiveStore\",\"link\":\"/docs/sync/integrations/livestore\"},{\"text\":\"MobX\",\"link\":\"/docs/sync/integrations/mobx\"},{\"text\":\"Next.js\",\"link\":\"/docs/sync/integrations/next\"},{\"text\":\"Phoenix\",\"link\":\"/docs/sync/integrations/phoenix\"},{\"text\":\"React\",\"link\":\"/docs/sync/integrations/react\"},{\"text\":\"Redis\",\"link\":\"/docs/sync/integrations/redis\"},{\"text\":\"TanStack\",\"link\":\"/docs/sync/integrations/tanstack\"},{\"text\":\"Yjs\",\"link\":\"/docs/sync/integrations/yjs\"}]},{\"text\":\"Platforms\",\"items\":[{\"text\":\"AWS\",\"link\":\"/docs/sync/integrations/aws\"},{\"text\":\"Cloudflare\",\"link\":\"/docs/sync/integrations/cloudflare\"},{\"text\":\"Crunchy\",\"link\":\"/docs/sync/integrations/crunchy\"},{\"text\":\"Digital Ocean\",\"link\":\"/docs/sync/integrations/digital-ocean\"},{\"text\":\"Expo\",\"link\":\"/docs/sync/integrations/expo\"},{\"text\":\"Fly.io\",\"link\":\"/docs/sync/integrations/fly\"},{\"text\":\"GCP\",\"link\":\"/docs/sync/integrations/gcp\"},{\"text\":\"Neon\",\"link\":\"/docs/sync/integrations/neon\"},{\"text\":\"Netlify\",\"link\":\"/docs/sync/integrations/netlify\"},{\"text\":\"PlanetScale\",\"link\":\"/docs/sync/integrations/planetscale\"},{\"text\":\"Render\",\"link\":\"/docs/sync/integrations/render\"},{\"text\":\"Supabase\",\"link\":\"/docs/sync/integrations/supabase\"}]}]},{\"text\":\"Reference\",\"collapsed\":false,\"items\":[{\"text\":\"Alternatives\",\"link\":\"/docs/sync/reference/alternatives\"},{\"text\":\"Benchmarks\",\"link\":\"/docs/sync/reference/benchmarks\"},{\"text\":\"Literature\",\"link\":\"/docs/sync/reference/literature\"},{\"text\":\"Telemetry\",\"link\":\"/docs/sync/reference/telemetry\"}]}],\"/sync/tanstack-db\":[{\"text\":\"Sync primitives\",\"collapsed\":false,\"items\":[{\"text\":\"Postgres Sync\",\"link\":\"/sync/postgres-sync\"},{\"text\":\"TanStack DB\",\"link\":\"/sync/tanstack-db\"},{\"text\":\"PGlite\",\"link\":\"/sync/pglite\"}]},{\"text\":\"Guides\",\"collapsed\":false,\"items\":[{\"text\":\"Auth\",\"link\":\"/docs/sync/guides/auth\"},{\"text\":\"Shapes\",\"link\":\"/docs/sync/guides/shapes\"},{\"text\":\"Writes\",\"link\":\"/docs/sync/guides/writes\"},{\"text\":\"Installation\",\"link\":\"/docs/sync/guides/installation\"},{\"text\":\"PostgreSQL Permissions\",\"link\":\"/docs/sync/guides/postgres-permissions\"},{\"text\":\"Deployment\",\"link\":\"/docs/sync/guides/deployment\"},{\"text\":\"Upgrading\",\"link\":\"/docs/sync/guides/upgrading\"},{\"text\":\"Sharding\",\"link\":\"/docs/sync/guides/sharding\"},{\"text\":\"Security\",\"link\":\"/docs/sync/guides/security\"},{\"text\":\"Troubleshooting\",\"link\":\"/docs/sync/guides/troubleshooting\"},{\"text\":\"Client development\",\"link\":\"/docs/sync/guides/client-development\"}]},{\"text\":\"API\",\"collapsed\":false,\"items\":[{\"text\":\"HTTP\",\"link\":\"/docs/sync/api/http\"},{\"text\":\"Clients\",\"items\":[{\"text\":\"TypeScript\",\"link\":\"/docs/sync/api/clients/typescript\"},{\"text\":\"Elixir\",\"link\":\"/docs/sync/api/clients/elixir\"}],\"collapsed\":false},{\"text\":\"Config\",\"link\":\"/docs/sync/api/config\"}]},{\"text\":\"Integrations\",\"collapsed\":false,\"items\":[{\"text\":\"Frameworks\",\"items\":[{\"text\":\"LiveStore\",\"link\":\"/docs/sync/integrations/livestore\"},{\"text\":\"MobX\",\"link\":\"/docs/sync/integrations/mobx\"},{\"text\":\"Next.js\",\"link\":\"/docs/sync/integrations/next\"},{\"text\":\"Phoenix\",\"link\":\"/docs/sync/integrations/phoenix\"},{\"text\":\"React\",\"link\":\"/docs/sync/integrations/react\"},{\"text\":\"Redis\",\"link\":\"/docs/sync/integrations/redis\"},{\"text\":\"TanStack\",\"link\":\"/docs/sync/integrations/tanstack\"},{\"text\":\"Yjs\",\"link\":\"/docs/sync/integrations/yjs\"}]},{\"text\":\"Platforms\",\"items\":[{\"text\":\"AWS\",\"link\":\"/docs/sync/integrations/aws\"},{\"text\":\"Cloudflare\",\"link\":\"/docs/sync/integrations/cloudflare\"},{\"text\":\"Crunchy\",\"link\":\"/docs/sync/integrations/crunchy\"},{\"text\":\"Digital Ocean\",\"link\":\"/docs/sync/integrations/digital-ocean\"},{\"text\":\"Expo\",\"link\":\"/docs/sync/integrations/expo\"},{\"text\":\"Fly.io\",\"link\":\"/docs/sync/integrations/fly\"},{\"text\":\"GCP\",\"link\":\"/docs/sync/integrations/gcp\"},{\"text\":\"Neon\",\"link\":\"/docs/sync/integrations/neon\"},{\"text\":\"Netlify\",\"link\":\"/docs/sync/integrations/netlify\"},{\"text\":\"PlanetScale\",\"link\":\"/docs/sync/integrations/planetscale\"},{\"text\":\"Render\",\"link\":\"/docs/sync/integrations/render\"},{\"text\":\"Supabase\",\"link\":\"/docs/sync/integrations/supabase\"}]}]},{\"text\":\"Reference\",\"collapsed\":false,\"items\":[{\"text\":\"Alternatives\",\"link\":\"/docs/sync/reference/alternatives\"},{\"text\":\"Benchmarks\",\"link\":\"/docs/sync/reference/benchmarks\"},{\"text\":\"Literature\",\"link\":\"/docs/sync/reference/literature\"},{\"text\":\"Telemetry\",\"link\":\"/docs/sync/reference/telemetry\"}]}],\"/sync/pglite\":[{\"text\":\"Sync primitives\",\"collapsed\":false,\"items\":[{\"text\":\"Postgres Sync\",\"link\":\"/sync/postgres-sync\"},{\"text\":\"TanStack DB\",\"link\":\"/sync/tanstack-db\"},{\"text\":\"PGlite\",\"link\":\"/sync/pglite\"}]},{\"text\":\"Guides\",\"collapsed\":false,\"items\":[{\"text\":\"Auth\",\"link\":\"/docs/sync/guides/auth\"},{\"text\":\"Shapes\",\"link\":\"/docs/sync/guides/shapes\"},{\"text\":\"Writes\",\"link\":\"/docs/sync/guides/writes\"},{\"text\":\"Installation\",\"link\":\"/docs/sync/guides/installation\"},{\"text\":\"PostgreSQL Permissions\",\"link\":\"/docs/sync/guides/postgres-permissions\"},{\"text\":\"Deployment\",\"link\":\"/docs/sync/guides/deployment\"},{\"text\":\"Upgrading\",\"link\":\"/docs/sync/guides/upgrading\"},{\"text\":\"Sharding\",\"link\":\"/docs/sync/guides/sharding\"},{\"text\":\"Security\",\"link\":\"/docs/sync/guides/security\"},{\"text\":\"Troubleshooting\",\"link\":\"/docs/sync/guides/troubleshooting\"},{\"text\":\"Client development\",\"link\":\"/docs/sync/guides/client-development\"}]},{\"text\":\"API\",\"collapsed\":false,\"items\":[{\"text\":\"HTTP\",\"link\":\"/docs/sync/api/http\"},{\"text\":\"Clients\",\"items\":[{\"text\":\"TypeScript\",\"link\":\"/docs/sync/api/clients/typescript\"},{\"text\":\"Elixir\",\"link\":\"/docs/sync/api/clients/elixir\"}],\"collapsed\":false},{\"text\":\"Config\",\"link\":\"/docs/sync/api/config\"}]},{\"text\":\"Integrations\",\"collapsed\":false,\"items\":[{\"text\":\"Frameworks\",\"items\":[{\"text\":\"LiveStore\",\"link\":\"/docs/sync/integrations/livestore\"},{\"text\":\"MobX\",\"link\":\"/docs/sync/integrations/mobx\"},{\"text\":\"Next.js\",\"link\":\"/docs/sync/integrations/next\"},{\"text\":\"Phoenix\",\"link\":\"/docs/sync/integrations/phoenix\"},{\"text\":\"React\",\"link\":\"/docs/sync/integrations/react\"},{\"text\":\"Redis\",\"link\":\"/docs/sync/integrations/redis\"},{\"text\":\"TanStack\",\"link\":\"/docs/sync/integrations/tanstack\"},{\"text\":\"Yjs\",\"link\":\"/docs/sync/integrations/yjs\"}]},{\"text\":\"Platforms\",\"items\":[{\"text\":\"AWS\",\"link\":\"/docs/sync/integrations/aws\"},{\"text\":\"Cloudflare\",\"link\":\"/docs/sync/integrations/cloudflare\"},{\"text\":\"Crunchy\",\"link\":\"/docs/sync/integrations/crunchy\"},{\"text\":\"Digital Ocean\",\"link\":\"/docs/sync/integrations/digital-ocean\"},{\"text\":\"Expo\",\"link\":\"/docs/sync/integrations/expo\"},{\"text\":\"Fly.io\",\"link\":\"/docs/sync/integrations/fly\"},{\"text\":\"GCP\",\"link\":\"/docs/sync/integrations/gcp\"},{\"text\":\"Neon\",\"link\":\"/docs/sync/integrations/neon\"},{\"text\":\"Netlify\",\"link\":\"/docs/sync/integrations/netlify\"},{\"text\":\"PlanetScale\",\"link\":\"/docs/sync/integrations/planetscale\"},{\"text\":\"Render\",\"link\":\"/docs/sync/integrations/render\"},{\"text\":\"Supabase\",\"link\":\"/docs/sync/integrations/supabase\"}]}]},{\"text\":\"Reference\",\"collapsed\":false,\"items\":[{\"text\":\"Alternatives\",\"link\":\"/docs/sync/reference/alternatives\"},{\"text\":\"Benchmarks\",\"link\":\"/docs/sync/reference/benchmarks\"},{\"text\":\"Literature\",\"link\":\"/docs/sync/reference/literature\"},{\"text\":\"Telemetry\",\"link\":\"/docs/sync/reference/telemetry\"}]}],\"/sync/demos\":[{\"text\":\"Demo apps\",\"collapsed\":false,\"items\":[{\"text\":\"Burn\",\"link\":\"/sync/demos/burn\"},{\"text\":\"AI Chat\",\"link\":\"/sync/demos/ai-chat\"},{\"text\":\"Linearlite\",\"link\":\"/sync/demos/linearlite\"},{\"text\":\"Notes\",\"link\":\"/sync/demos/notes\"},{\"text\":\"Pixel art\",\"link\":\"/sync/demos/pixel-art\"}]},{\"text\":\"Technical examples\",\"collapsed\":false,\"items\":[{\"text\":\"Bash\",\"link\":\"/sync/demos/bash\"},{\"text\":\"Encryption\",\"link\":\"/sync/demos/encryption\"},{\"text\":\"Gatekeeper auth\",\"link\":\"/sync/demos/gatekeeper-auth\"},{\"text\":\"Next.js\",\"link\":\"/sync/demos/nextjs\"},{\"text\":\"Phoenix LiveView\",\"link\":\"/sync/demos/phoenix-liveview\"},{\"text\":\"Proxy auth\",\"link\":\"/sync/demos/proxy-auth\"},{\"text\":\"React\",\"link\":\"/sync/demos/react\"},{\"text\":\"Redis\",\"link\":\"/sync/demos/redis\"},{\"text\":\"Remix\",\"link\":\"/sync/demos/remix\"},{\"text\":\"Tanstack\",\"link\":\"/sync/demos/tanstack\"},{\"text\":\"Todo app\",\"link\":\"/sync/demos/todo-app\"},{\"text\":\"Write patterns\",\"link\":\"/sync/demos/write-patterns\"},{\"text\":\"Yjs\",\"link\":\"/sync/demos/yjs\"}]}],\"/sync/\":[{\"text\":\"Electric Sync\",\"items\":[{\"text\":\"Overview\",\"link\":\"/sync\"}]},{\"text\":\"Sync primitives\",\"items\":[{\"text\":\"Postgres Sync\",\"link\":\"/sync/postgres-sync\"},{\"text\":\"TanStack DB\",\"link\":\"/sync/tanstack-db\"},{\"text\":\"PGlite\",\"link\":\"/sync/pglite\"}]}],\"/agents/demos\":[{\"text\":\"Demo apps\",\"collapsed\":false,\"items\":[{\"text\":\"Chat Starter\",\"link\":\"/agents/demos/chat-starter\"},{\"text\":\"Deep Survey\",\"link\":\"/agents/demos/deep-survey\"}]},{\"text\":\"Technical examples\",\"collapsed\":false,\"items\":[{\"text\":\"Playground\",\"link\":\"/docs/agents/examples/playground\"}]}],\"/streams/demos\":[{\"text\":\"Demo apps\",\"collapsed\":false,\"items\":[{\"text\":\"Durable Doom\",\"link\":\"/streams/demos/durable-doom\"},{\"text\":\"Collaborative AI Editor\",\"link\":\"/streams/demos/collaborative-ai-editor\"},{\"text\":\"Territory Wars\",\"link\":\"/streams/demos/territory-wars\"}]},{\"text\":\"Technical examples\",\"collapsed\":false,\"items\":[{\"text\":\"Yjs demo\",\"link\":\"https://github.com/durable-streams/durable-streams/tree/main/examples/yjs-demo\"},{\"text\":\"StreamDB\",\"link\":\"https://github.com/durable-streams/durable-streams/tree/main/examples/stream-db\"},{\"text\":\"Chat AI SDK\",\"link\":\"https://github.com/durable-streams/durable-streams/tree/main/examples/chat-aisdk\"},{\"text\":\"Chat TanStack\",\"link\":\"https://github.com/durable-streams/durable-streams/tree/main/examples/chat-tanstack\"}]}],\"/docs/sync\":[{\"text\":\"Sync primitives\",\"collapsed\":false,\"items\":[{\"text\":\"Postgres Sync\",\"link\":\"/sync/postgres-sync\"},{\"text\":\"TanStack DB\",\"link\":\"/sync/tanstack-db\"},{\"text\":\"PGlite\",\"link\":\"/sync/pglite\"}]},{\"text\":\"Guides\",\"collapsed\":false,\"items\":[{\"text\":\"Auth\",\"link\":\"/docs/sync/guides/auth\"},{\"text\":\"Shapes\",\"link\":\"/docs/sync/guides/shapes\"},{\"text\":\"Writes\",\"link\":\"/docs/sync/guides/writes\"},{\"text\":\"Installation\",\"link\":\"/docs/sync/guides/installation\"},{\"text\":\"PostgreSQL Permissions\",\"link\":\"/docs/sync/guides/postgres-permissions\"},{\"text\":\"Deployment\",\"link\":\"/docs/sync/guides/deployment\"},{\"text\":\"Upgrading\",\"link\":\"/docs/sync/guides/upgrading\"},{\"text\":\"Sharding\",\"link\":\"/docs/sync/guides/sharding\"},{\"text\":\"Security\",\"link\":\"/docs/sync/guides/security\"},{\"text\":\"Troubleshooting\",\"link\":\"/docs/sync/guides/troubleshooting\"},{\"text\":\"Client development\",\"link\":\"/docs/sync/guides/client-development\"}]},{\"text\":\"API\",\"collapsed\":false,\"items\":[{\"text\":\"HTTP\",\"link\":\"/docs/sync/api/http\"},{\"text\":\"Clients\",\"items\":[{\"text\":\"TypeScript\",\"link\":\"/docs/sync/api/clients/typescript\"},{\"text\":\"Elixir\",\"link\":\"/docs/sync/api/clients/elixir\"}],\"collapsed\":false},{\"text\":\"Config\",\"link\":\"/docs/sync/api/config\"}]},{\"text\":\"Integrations\",\"collapsed\":false,\"items\":[{\"text\":\"Frameworks\",\"items\":[{\"text\":\"LiveStore\",\"link\":\"/docs/sync/integrations/livestore\"},{\"text\":\"MobX\",\"link\":\"/docs/sync/integrations/mobx\"},{\"text\":\"Next.js\",\"link\":\"/docs/sync/integrations/next\"},{\"text\":\"Phoenix\",\"link\":\"/docs/sync/integrations/phoenix\"},{\"text\":\"React\",\"link\":\"/docs/sync/integrations/react\"},{\"text\":\"Redis\",\"link\":\"/docs/sync/integrations/redis\"},{\"text\":\"TanStack\",\"link\":\"/docs/sync/integrations/tanstack\"},{\"text\":\"Yjs\",\"link\":\"/docs/sync/integrations/yjs\"}]},{\"text\":\"Platforms\",\"items\":[{\"text\":\"AWS\",\"link\":\"/docs/sync/integrations/aws\"},{\"text\":\"Cloudflare\",\"link\":\"/docs/sync/integrations/cloudflare\"},{\"text\":\"Crunchy\",\"link\":\"/docs/sync/integrations/crunchy\"},{\"text\":\"Digital Ocean\",\"link\":\"/docs/sync/integrations/digital-ocean\"},{\"text\":\"Expo\",\"link\":\"/docs/sync/integrations/expo\"},{\"text\":\"Fly.io\",\"link\":\"/docs/sync/integrations/fly\"},{\"text\":\"GCP\",\"link\":\"/docs/sync/integrations/gcp\"},{\"text\":\"Neon\",\"link\":\"/docs/sync/integrations/neon\"},{\"text\":\"Netlify\",\"link\":\"/docs/sync/integrations/netlify\"},{\"text\":\"PlanetScale\",\"link\":\"/docs/sync/integrations/planetscale\"},{\"text\":\"Render\",\"link\":\"/docs/sync/integrations/render\"},{\"text\":\"Supabase\",\"link\":\"/docs/sync/integrations/supabase\"}]}]},{\"text\":\"Reference\",\"collapsed\":false,\"items\":[{\"text\":\"Alternatives\",\"link\":\"/docs/sync/reference/alternatives\"},{\"text\":\"Benchmarks\",\"link\":\"/docs/sync/reference/benchmarks\"},{\"text\":\"Literature\",\"link\":\"/docs/sync/reference/literature\"},{\"text\":\"Telemetry\",\"link\":\"/docs/sync/reference/telemetry\"}]}],\"/docs/agents/examples\":[{\"text\":\"Demo apps\",\"collapsed\":false,\"items\":[{\"text\":\"Chat Starter\",\"link\":\"/agents/demos/chat-starter\"},{\"text\":\"Deep Survey\",\"link\":\"/agents/demos/deep-survey\"}]},{\"text\":\"Technical examples\",\"collapsed\":false,\"items\":[{\"text\":\"Playground\",\"link\":\"/docs/agents/examples/playground\"}]}],\"/docs/agents\":[{\"text\":\"Usage\",\"collapsed\":false,\"items\":[{\"text\":\"Overview\",\"link\":\"/docs/agents/usage/overview\"},{\"text\":\"Defining entities\",\"link\":\"/docs/agents/usage/defining-entities\"},{\"text\":\"Writing handlers\",\"link\":\"/docs/agents/usage/writing-handlers\"},{\"text\":\"Configuring the agent\",\"link\":\"/docs/agents/usage/configuring-the-agent\"},{\"text\":\"Context composition\",\"link\":\"/docs/agents/usage/context-composition\"},{\"text\":\"Defining tools\",\"link\":\"/docs/agents/usage/defining-tools\"},{\"text\":\"Managing state\",\"link\":\"/docs/agents/usage/managing-state\"},{\"text\":\"Permissions & principals\",\"link\":\"/docs/agents/usage/permissions-and-principals\"},{\"text\":\"Spawning & coordinating\",\"link\":\"/docs/agents/usage/spawning-and-coordinating\"},{\"text\":\"Waking entities\",\"link\":\"/docs/agents/usage/waking-entities\"},{\"text\":\"Signals\",\"link\":\"/docs/agents/usage/signals\"},{\"text\":\"Sandboxing\",\"link\":\"/docs/agents/usage/sandboxing\"},{\"text\":\"Attachments\",\"link\":\"/docs/agents/usage/attachments\"},{\"text\":\"Shared state\",\"link\":\"/docs/agents/usage/shared-state\"},{\"text\":\"Clients & React\",\"link\":\"/docs/agents/usage/clients-and-react\"},{\"text\":\"Programmatic runtime client\",\"link\":\"/docs/agents/usage/programmatic-runtime-client\"},{\"text\":\"App setup\",\"link\":\"/docs/agents/usage/app-setup\"},{\"text\":\"Embedded built-ins\",\"link\":\"/docs/agents/usage/embedded-builtins\"},{\"text\":\"Webhook sources\",\"link\":\"/docs/agents/usage/webhook-sources\"},{\"text\":\"MCP servers\",\"link\":\"/docs/agents/usage/mcp-servers\"},{\"text\":\"Testing\",\"link\":\"/docs/agents/usage/testing\"}]},{\"text\":\"Reference\",\"collapsed\":false,\"items\":[{\"text\":\"CLI\",\"link\":\"/docs/agents/reference/cli\"},{\"text\":\"HandlerContext\",\"link\":\"/docs/agents/reference/handler-context\"},{\"text\":\"EntityDefinition\",\"link\":\"/docs/agents/reference/entity-definition\"},{\"text\":\"AgentConfig\",\"link\":\"/docs/agents/reference/agent-config\"},{\"text\":\"AgentTool\",\"link\":\"/docs/agents/reference/agent-tool\"},{\"text\":\"StateCollectionProxy\",\"link\":\"/docs/agents/reference/state-collection-proxy\"},{\"text\":\"EntityHandle\",\"link\":\"/docs/agents/reference/entity-handle\"},{\"text\":\"SharedStateHandle\",\"link\":\"/docs/agents/reference/shared-state-handle\"},{\"text\":\"WakeEvent\",\"link\":\"/docs/agents/reference/wake-event\"},{\"text\":\"Built-in collections\",\"link\":\"/docs/agents/reference/built-in-collections\"},{\"text\":\"EntityRegistry\",\"link\":\"/docs/agents/reference/entity-registry\"},{\"text\":\"RuntimeHandler\",\"link\":\"/docs/agents/reference/runtime-handler\"},{\"text\":\"McpRegistry\",\"link\":\"/docs/agents/reference/mcp-registry\"},{\"text\":\"McpServerConfig\",\"link\":\"/docs/agents/reference/mcp-server-config\"}]},{\"text\":\"Entities\",\"collapsed\":false,\"items\":[{\"text\":\"Agents\",\"items\":[{\"text\":\"Horton\",\"link\":\"/docs/agents/entities/agents/horton\"},{\"text\":\"Worker\",\"link\":\"/docs/agents/entities/agents/worker\"}],\"collapsed\":false},{\"text\":\"Patterns\",\"items\":[{\"text\":\"Manager-Worker\",\"link\":\"/docs/agents/entities/patterns/manager-worker\"},{\"text\":\"Pipeline\",\"link\":\"/docs/agents/entities/patterns/pipeline\"},{\"text\":\"Map-Reduce\",\"link\":\"/docs/agents/entities/patterns/map-reduce\"},{\"text\":\"Dispatcher\",\"link\":\"/docs/agents/entities/patterns/dispatcher\"},{\"text\":\"Blackboard (shared state)\",\"link\":\"/docs/agents/entities/patterns/blackboard\"},{\"text\":\"Reactive observers\",\"link\":\"/docs/agents/entities/patterns/reactive-observers\"}],\"collapsed\":false}]}],\"/docs/streams\":[{\"text\":\"Usage\",\"collapsed\":false,\"items\":[{\"text\":\"CLI\",\"link\":\"/docs/streams/cli\"},{\"text\":\"Clients\",\"collapsed\":false,\"items\":[{\"text\":\"TypeScript\",\"link\":\"/docs/streams/clients/typescript\"},{\"text\":\"Python\",\"link\":\"/docs/streams/clients/python\"},{\"text\":\"Other clients\",\"link\":\"/docs/streams/clients/other\"}]},{\"text\":\"JSON mode\",\"link\":\"/docs/streams/json-mode\"},{\"text\":\"Durable Proxy\",\"link\":\"/docs/streams/durable-proxy\"},{\"text\":\"Durable State\",\"link\":\"/docs/streams/durable-state\"},{\"text\":\"StreamDB\",\"link\":\"/docs/streams/stream-db\"},{\"text\":\"StreamFS\",\"link\":\"/docs/streams/stream-fs\"}]},{\"text\":\"Integrations\",\"collapsed\":false,\"items\":[{\"text\":\"TanStack AI\",\"link\":\"/docs/streams/integrations/tanstack-ai\"},{\"text\":\"Vercel AI SDK\",\"link\":\"/docs/streams/integrations/vercel-ai-sdk\"},{\"text\":\"Yjs\",\"link\":\"/docs/streams/integrations/yjs\"}]},{\"text\":\"Open Protocol\",\"items\":[{\"text\":\"durablestreams.com\",\"link\":\"https://durablestreams.com\"}]}],\"/about\":[{\"text\":\"About\",\"link\":\"/about/\"},{\"text\":\"Community\",\"link\":\"/about/community\"},{\"text\":\"Team\",\"link\":\"/about/team\"},{\"text\":\"Contact\",\"link\":\"/about/contact\"},{\"text\":\"Legal\",\"items\":[{\"text\":\"Terms\",\"link\":\"/about/legal/terms\"},{\"text\":\"Privacy\",\"link\":\"/about/legal/privacy\"},{\"text\":\"Delete your account\",\"link\":\"/about/legal/delete-account\"}],\"collapsed\":false},{\"text\":\"LLMs / AGENTS.md\",\"link\":\"/llms\"}],\"/llms\":[{\"text\":\"About\",\"link\":\"/about/\"},{\"text\":\"Community\",\"link\":\"/about/community\"},{\"text\":\"Team\",\"link\":\"/about/team\"},{\"text\":\"Contact\",\"link\":\"/about/contact\"},{\"text\":\"Legal\",\"items\":[{\"text\":\"Terms\",\"link\":\"/about/legal/terms\"},{\"text\":\"Privacy\",\"link\":\"/about/legal/privacy\"},{\"text\":\"Delete your account\",\"link\":\"/about/legal/delete-account\"}],\"collapsed\":false},{\"text\":\"LLMs / AGENTS.md\",\"link\":\"/llms\"}]},\"siteTitle\":false,\"socialLinks\":[]},\"locales\":{},\"scrollOffset\":134,\"cleanUrls\":true}");</script>
    
  </body>
</html>