<!DOCTYPE html>
<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width,initial-scale=1">
    <title>Deployment - Guide | Electric</title>
    <meta name="description" content="How to deploy the Electric sync engine.">
    <meta name="generator" content="VitePress v1.5.0">
    <link rel="preload stylesheet" href="/assets/style.D0bGBbpO.css" as="style">
    <link rel="preload stylesheet" href="/vp-icons.css" as="style">
    
    <script type="module" src="/assets/app.J4ApIFzv.js"></script>
    <link rel="modulepreload" href="/assets/src_partials_home-features-after.md.DlD7kZR2.js">
    <link rel="modulepreload" href="/assets/chunks/framework.DjYoZdHD.js">
    <link rel="modulepreload" href="/assets/chunks/deploy.C-RmH-S2.js">
    <link rel="modulepreload" href="/assets/chunks/components.sm.c-ITFty9.js">
    <link rel="modulepreload" href="/assets/docs_guides_deployment.md.CFli_dKV.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" 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="Deployment - Guide | ElectricSQL">
    <meta name="twitter:description" content="How to deploy the Electric sync engine.">
    <meta name="twitter:image" content="https://electric-sql.com/.netlify/images?url=https%3A%2F%2Felectric-sql.com%2Fimg%2Fmeta%2Felectric-sync-primitives.jpg&amp;w=1200&amp;h=630&amp;fit=cover&amp;fm=jpg&amp;q=80">
    <meta property="og:title" content="Deployment - Guide | ElectricSQL">
    <meta property="og:description" content="How to deploy the Electric sync engine.">
    <meta property="og:image" content="https://electric-sql.com/.netlify/images?url=https%3A%2F%2Felectric-sql.com%2Fimg%2Fmeta%2Felectric-sync-primitives.jpg&amp;w=1200&amp;h=630&amp;fit=cover&amp;fm=jpg&amp;q=80">
  </head>
  <body>
    <div id="app"><div class="Layout" data-v-a29e6ba2><!--[--><!--]--><!--[--><span tabindex="-1" data-v-c3906ed2></span><a href="#VPContent" class="VPSkipLink visually-hidden" data-v-c3906ed2> Skip to content </a><!--]--><!----><header class="VPNav" data-v-a29e6ba2 data-v-388babf5><div class="VPNavBar" data-v-388babf5 data-v-5d557444><div class="wrapper" data-v-5d557444><div class="container" data-v-5d557444><div class="title" data-v-5d557444><div class="VPNavBarTitle has-sidebar" data-v-5d557444 data-v-ac766fc0><a class="title" href="/" data-v-ac766fc0><!--[--><!--]--><!--[--><img class="VPImage logo" src="/img/brand/logo.svg" alt data-v-2d46c176><!--]--><!----><!--[--><!--]--></a></div></div><div class="content" data-v-5d557444><div class="content-body" data-v-5d557444><!--[--><!--]--><div class="VPNavBarSearch search" data-v-5d557444><!--[--><!----><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-5d557444 data-v-e138a194><span id="main-nav-aria-label" class="visually-hidden" data-v-e138a194> Main Navigation </span><!--[--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/sync" tabindex="0" data-v-e138a194 data-v-4ebd574a><!--[--><span data-v-4ebd574a>Sync</span><!--]--></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/primitives" tabindex="0" data-v-e138a194 data-v-4ebd574a><!--[--><span data-v-4ebd574a>Primitives</span><!--]--></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/cloud" tabindex="0" data-v-e138a194 data-v-4ebd574a><!--[--><span data-v-4ebd574a>Cloud</span><!--]--></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/pricing" tabindex="0" data-v-e138a194 data-v-4ebd574a><!--[--><span data-v-4ebd574a>Pricing</span><!--]--></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink active" href="/docs/intro" tabindex="0" data-v-e138a194 data-v-4ebd574a><!--[--><span data-v-4ebd574a>Docs</span><!--]--></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/demos" tabindex="0" data-v-e138a194 data-v-4ebd574a><!--[--><span data-v-4ebd574a>Demos</span><!--]--></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/blog" tabindex="0" data-v-e138a194 data-v-4ebd574a><!--[--><span data-v-4ebd574a>Blog</span><!--]--></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/about/community" tabindex="0" data-v-e138a194 data-v-4ebd574a><!--[--><span data-v-4ebd574a>About</span><!--]--></a><!--]--><!--[--><div class="nav-item VPNavBarMenuLink VPNavBarCTA" data-v-e138a194 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-c160c05e>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-c160c05e>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-c160c05e>Go to Cloud</a></div></div><!--]--><!--]--></nav><!----><!----><div class="VPSocialLinks VPNavBarSocialLinks social-links" data-v-5d557444 data-v-c62242fd data-v-e5810ca3><!--[--><a class="VPSocialLink no-icon" href="https://durablestreams.com" aria-label="durable-streams" target="_blank" rel="noopener" data-v-e5810ca3 data-v-f0af069a><span class="vpi-social-durable-streams"></span></a><a class="VPSocialLink no-icon" href="https://tanstack.com/db" aria-label="tanstack" target="_blank" rel="noopener" data-v-e5810ca3 data-v-f0af069a><span class="vpi-social-tanstack"></span></a><a class="VPSocialLink no-icon" href="https://pglite.dev" aria-label="pglite" target="_blank" rel="noopener" data-v-e5810ca3 data-v-f0af069a><span class="vpi-social-pglite"></span></a><a class="VPSocialLink no-icon" href="https://x.com/ElectricSQL" aria-label="x" target="_blank" rel="noopener" data-v-e5810ca3 data-v-f0af069a><span class="vpi-social-x"></span></a><a class="VPSocialLink no-icon" href="https://discord.electric-sql.com" aria-label="discord" target="_blank" rel="noopener" data-v-e5810ca3 data-v-f0af069a><span class="vpi-social-discord"></span></a><a class="VPSocialLink no-icon" href="https://github.com/electric-sql/electric" aria-label="github" target="_blank" rel="noopener" data-v-e5810ca3 data-v-f0af069a><span class="vpi-social-github"></span></a><!--]--></div><div class="VPFlyout VPNavBarExtra extra" data-v-5d557444 data-v-73029a02 data-v-8015fcbb><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="extra navigation" data-v-8015fcbb><span class="vpi-more-horizontal icon" data-v-8015fcbb></span></button><div class="menu" data-v-8015fcbb><div class="VPMenu" data-v-8015fcbb data-v-cbddf0cc><!----><!--[--><!--[--><!----><!----><div class="group" data-v-73029a02><div class="item social-links" data-v-73029a02><div class="VPSocialLinks social-links-list" data-v-73029a02 data-v-e5810ca3><!--[--><a class="VPSocialLink no-icon" href="https://durablestreams.com" aria-label="durable-streams" target="_blank" rel="noopener" data-v-e5810ca3 data-v-f0af069a><span class="vpi-social-durable-streams"></span></a><a class="VPSocialLink no-icon" href="https://tanstack.com/db" aria-label="tanstack" target="_blank" rel="noopener" data-v-e5810ca3 data-v-f0af069a><span class="vpi-social-tanstack"></span></a><a class="VPSocialLink no-icon" href="https://pglite.dev" aria-label="pglite" target="_blank" rel="noopener" data-v-e5810ca3 data-v-f0af069a><span class="vpi-social-pglite"></span></a><a class="VPSocialLink no-icon" href="https://x.com/ElectricSQL" aria-label="x" target="_blank" rel="noopener" data-v-e5810ca3 data-v-f0af069a><span class="vpi-social-x"></span></a><a class="VPSocialLink no-icon" href="https://discord.electric-sql.com" aria-label="discord" target="_blank" rel="noopener" data-v-e5810ca3 data-v-f0af069a><span class="vpi-social-discord"></span></a><a class="VPSocialLink no-icon" href="https://github.com/electric-sql/electric" aria-label="github" target="_blank" rel="noopener" data-v-e5810ca3 data-v-f0af069a><span class="vpi-social-github"></span></a><!--]--></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-c160c05e>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-c160c05e>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-c160c05e>Go to Cloud</a></div></div><!--]--><!--]--><!--]--><button type="button" class="VPNavBarHamburger hamburger" aria-label="mobile navigation" aria-expanded="false" aria-controls="VPNavScreen" data-v-5d557444 data-v-998521f3><span class="container" data-v-998521f3><span class="top" data-v-998521f3></span><span class="middle" data-v-998521f3></span><span class="bottom" data-v-998521f3></span></span></button></div></div></div></div><div class="divider" data-v-5d557444><div class="divider-line" data-v-5d557444></div></div></div><!----></header><div class="VPLocalNav has-sidebar empty" data-v-a29e6ba2 data-v-c84339ae><div class="container" data-v-c84339ae><button class="menu" aria-expanded="false" aria-controls="VPSidebarNav" data-v-c84339ae><span class="vpi-align-left menu-icon" data-v-c84339ae></span><span class="menu-text" data-v-c84339ae>Menu</span></button><div class="VPLocalNavOutlineDropdown" style="--vp-vh:0px;" data-v-c84339ae data-v-91cce16e><button data-v-91cce16e>Return to top</button><!----></div></div></div><aside class="VPSidebar" data-v-a29e6ba2 data-v-0a014151><div class="curtain" data-v-0a014151></div><nav class="nav" id="VPSidebarNav" aria-labelledby="sidebar-aria-label" tabindex="-1" data-v-0a014151><span class="visually-hidden" id="sidebar-aria-label" data-v-0a014151> Sidebar Navigation </span><!--[--><!--]--><!--[--><div class="no-transition group" data-v-665c6ffe><section class="VPSidebarItem level-0 collapsible" data-v-665c6ffe data-v-f65b8172><div class="item" role="button" tabindex="0" data-v-f65b8172><div class="indicator" data-v-f65b8172></div><h2 class="text" data-v-f65b8172>Docs</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-f65b8172><span class="vpi-chevron-right caret-icon" data-v-f65b8172></span></div></div><div class="items" data-v-f65b8172><!--[--><div class="VPSidebarItem level-1 is-link" data-v-f65b8172 data-v-f65b8172><div class="item" data-v-f65b8172><div class="indicator" data-v-f65b8172></div><a class="VPLink link link" href="/docs/intro" data-v-f65b8172><!--[--><p class="text" data-v-f65b8172>Intro</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-f65b8172 data-v-f65b8172><div class="item" data-v-f65b8172><div class="indicator" data-v-f65b8172></div><a class="VPLink link link" href="/docs/quickstart" data-v-f65b8172><!--[--><p class="text" data-v-f65b8172>Quickstart</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-f65b8172 data-v-f65b8172><div class="item" data-v-f65b8172><div class="indicator" data-v-f65b8172></div><a class="VPLink link link" href="/docs/stacks" data-v-f65b8172><!--[--><p class="text" data-v-f65b8172>Stacks</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-f65b8172 data-v-f65b8172><div class="item" data-v-f65b8172><div class="indicator" data-v-f65b8172></div><a class="VPLink link link" href="/docs/agents" data-v-f65b8172><!--[--><p class="text" data-v-f65b8172>AGENTS.md</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-665c6ffe><section class="VPSidebarItem level-0 collapsible has-active" data-v-665c6ffe data-v-f65b8172><div class="item" role="button" tabindex="0" data-v-f65b8172><div class="indicator" data-v-f65b8172></div><h2 class="text" data-v-f65b8172>Guides</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-f65b8172><span class="vpi-chevron-right caret-icon" data-v-f65b8172></span></div></div><div class="items" data-v-f65b8172><!--[--><div class="VPSidebarItem level-1 is-link" data-v-f65b8172 data-v-f65b8172><div class="item" data-v-f65b8172><div class="indicator" data-v-f65b8172></div><a class="VPLink link link" href="/docs/guides/auth" data-v-f65b8172><!--[--><p class="text" data-v-f65b8172>Auth</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-f65b8172 data-v-f65b8172><div class="item" data-v-f65b8172><div class="indicator" data-v-f65b8172></div><a class="VPLink link link" href="/docs/guides/shapes" data-v-f65b8172><!--[--><p class="text" data-v-f65b8172>Shapes</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-f65b8172 data-v-f65b8172><div class="item" data-v-f65b8172><div class="indicator" data-v-f65b8172></div><a class="VPLink link link" href="/docs/guides/writes" data-v-f65b8172><!--[--><p class="text" data-v-f65b8172>Writes</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-f65b8172 data-v-f65b8172><div class="item" data-v-f65b8172><div class="indicator" data-v-f65b8172></div><a class="VPLink link link" href="/docs/guides/installation" data-v-f65b8172><!--[--><p class="text" data-v-f65b8172>Installation</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-f65b8172 data-v-f65b8172><div class="item" data-v-f65b8172><div class="indicator" data-v-f65b8172></div><a class="VPLink link link" href="/docs/guides/postgres-permissions" data-v-f65b8172><!--[--><p class="text" data-v-f65b8172>PostgreSQL Permissions</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-f65b8172 data-v-f65b8172><div class="item" data-v-f65b8172><div class="indicator" data-v-f65b8172></div><a class="VPLink link link" href="/docs/guides/deployment" data-v-f65b8172><!--[--><p class="text" data-v-f65b8172>Deployment</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-f65b8172 data-v-f65b8172><div class="item" data-v-f65b8172><div class="indicator" data-v-f65b8172></div><a class="VPLink link link" href="/docs/guides/sharding" data-v-f65b8172><!--[--><p class="text" data-v-f65b8172>Sharding</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-f65b8172 data-v-f65b8172><div class="item" data-v-f65b8172><div class="indicator" data-v-f65b8172></div><a class="VPLink link link" href="/docs/guides/security" data-v-f65b8172><!--[--><p class="text" data-v-f65b8172>Security</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-f65b8172 data-v-f65b8172><div class="item" data-v-f65b8172><div class="indicator" data-v-f65b8172></div><a class="VPLink link link" href="/docs/guides/troubleshooting" data-v-f65b8172><!--[--><p class="text" data-v-f65b8172>Troubleshooting</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-f65b8172 data-v-f65b8172><div class="item" data-v-f65b8172><div class="indicator" data-v-f65b8172></div><a class="VPLink link link" href="/docs/guides/client-development" data-v-f65b8172><!--[--><p class="text" data-v-f65b8172>Client development</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-665c6ffe><section class="VPSidebarItem level-0 collapsible" data-v-665c6ffe data-v-f65b8172><div class="item" role="button" tabindex="0" data-v-f65b8172><div class="indicator" data-v-f65b8172></div><h2 class="text" data-v-f65b8172>API</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-f65b8172><span class="vpi-chevron-right caret-icon" data-v-f65b8172></span></div></div><div class="items" data-v-f65b8172><!--[--><div class="VPSidebarItem level-1 is-link" data-v-f65b8172 data-v-f65b8172><div class="item" data-v-f65b8172><div class="indicator" data-v-f65b8172></div><a class="VPLink link link" href="/docs/api/http" data-v-f65b8172><!--[--><p class="text" data-v-f65b8172>HTTP</p><!--]--></a><!----></div><!----></div><section class="VPSidebarItem level-1 collapsible" data-v-f65b8172 data-v-f65b8172><div class="item" role="button" tabindex="0" data-v-f65b8172><div class="indicator" data-v-f65b8172></div><h3 class="text" data-v-f65b8172>Clients</h3><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-f65b8172><span class="vpi-chevron-right caret-icon" data-v-f65b8172></span></div></div><div class="items" data-v-f65b8172><!--[--><div class="VPSidebarItem level-2 is-link" data-v-f65b8172 data-v-f65b8172><div class="item" data-v-f65b8172><div class="indicator" data-v-f65b8172></div><a class="VPLink link link" href="/docs/api/clients/typescript" data-v-f65b8172><!--[--><p class="text" data-v-f65b8172>TypeScript</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-f65b8172 data-v-f65b8172><div class="item" data-v-f65b8172><div class="indicator" data-v-f65b8172></div><a class="VPLink link link" href="/docs/api/clients/elixir" data-v-f65b8172><!--[--><p class="text" data-v-f65b8172>Elixir</p><!--]--></a><!----></div><!----></div><!--]--></div></section><div class="VPSidebarItem level-1 is-link" data-v-f65b8172 data-v-f65b8172><div class="item" data-v-f65b8172><div class="indicator" data-v-f65b8172></div><a class="VPLink link link" href="/docs/api/config" data-v-f65b8172><!--[--><p class="text" data-v-f65b8172>Config</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-665c6ffe><section class="VPSidebarItem level-0 collapsible" data-v-665c6ffe data-v-f65b8172><div class="item" role="button" tabindex="0" data-v-f65b8172><div class="indicator" data-v-f65b8172></div><h2 class="text" data-v-f65b8172>Integrations</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-f65b8172><span class="vpi-chevron-right caret-icon" data-v-f65b8172></span></div></div><div class="items" data-v-f65b8172><!--[--><section class="VPSidebarItem level-1" data-v-f65b8172 data-v-f65b8172><div class="item" role="button" tabindex="0" data-v-f65b8172><div class="indicator" data-v-f65b8172></div><h3 class="text" data-v-f65b8172>Frameworks</h3><!----></div><div class="items" data-v-f65b8172><!--[--><div class="VPSidebarItem level-2 is-link" data-v-f65b8172 data-v-f65b8172><div class="item" data-v-f65b8172><div class="indicator" data-v-f65b8172></div><a class="VPLink link link" href="/docs/integrations/livestore" data-v-f65b8172><!--[--><p class="text" data-v-f65b8172>LiveStore</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-f65b8172 data-v-f65b8172><div class="item" data-v-f65b8172><div class="indicator" data-v-f65b8172></div><a class="VPLink link link" href="/docs/integrations/mobx" data-v-f65b8172><!--[--><p class="text" data-v-f65b8172>MobX</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-f65b8172 data-v-f65b8172><div class="item" data-v-f65b8172><div class="indicator" data-v-f65b8172></div><a class="VPLink link link" href="/docs/integrations/next" data-v-f65b8172><!--[--><p class="text" data-v-f65b8172>Next.js</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-f65b8172 data-v-f65b8172><div class="item" data-v-f65b8172><div class="indicator" data-v-f65b8172></div><a class="VPLink link link" href="/docs/integrations/phoenix" data-v-f65b8172><!--[--><p class="text" data-v-f65b8172>Phoenix</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-f65b8172 data-v-f65b8172><div class="item" data-v-f65b8172><div class="indicator" data-v-f65b8172></div><a class="VPLink link link" href="/docs/integrations/react" data-v-f65b8172><!--[--><p class="text" data-v-f65b8172>React</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-f65b8172 data-v-f65b8172><div class="item" data-v-f65b8172><div class="indicator" data-v-f65b8172></div><a class="VPLink link link" href="/docs/integrations/redis" data-v-f65b8172><!--[--><p class="text" data-v-f65b8172>Redis</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-f65b8172 data-v-f65b8172><div class="item" data-v-f65b8172><div class="indicator" data-v-f65b8172></div><a class="VPLink link link" href="/docs/integrations/tanstack" data-v-f65b8172><!--[--><p class="text" data-v-f65b8172>TanStack</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-f65b8172 data-v-f65b8172><div class="item" data-v-f65b8172><div class="indicator" data-v-f65b8172></div><a class="VPLink link link" href="/docs/integrations/yjs" data-v-f65b8172><!--[--><p class="text" data-v-f65b8172>Yjs</p><!--]--></a><!----></div><!----></div><!--]--></div></section><section class="VPSidebarItem level-1" data-v-f65b8172 data-v-f65b8172><div class="item" role="button" tabindex="0" data-v-f65b8172><div class="indicator" data-v-f65b8172></div><h3 class="text" data-v-f65b8172>Platforms</h3><!----></div><div class="items" data-v-f65b8172><!--[--><div class="VPSidebarItem level-2 is-link" data-v-f65b8172 data-v-f65b8172><div class="item" data-v-f65b8172><div class="indicator" data-v-f65b8172></div><a class="VPLink link link" href="/docs/integrations/aws" data-v-f65b8172><!--[--><p class="text" data-v-f65b8172>AWS</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-f65b8172 data-v-f65b8172><div class="item" data-v-f65b8172><div class="indicator" data-v-f65b8172></div><a class="VPLink link link" href="/docs/integrations/cloudflare" data-v-f65b8172><!--[--><p class="text" data-v-f65b8172>Cloudflare</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-f65b8172 data-v-f65b8172><div class="item" data-v-f65b8172><div class="indicator" data-v-f65b8172></div><a class="VPLink link link" href="/docs/integrations/crunchy" data-v-f65b8172><!--[--><p class="text" data-v-f65b8172>Crunchy</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-f65b8172 data-v-f65b8172><div class="item" data-v-f65b8172><div class="indicator" data-v-f65b8172></div><a class="VPLink link link" href="/docs/integrations/digital-ocean" data-v-f65b8172><!--[--><p class="text" data-v-f65b8172>Digital Ocean</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-f65b8172 data-v-f65b8172><div class="item" data-v-f65b8172><div class="indicator" data-v-f65b8172></div><a class="VPLink link link" href="/docs/integrations/expo" data-v-f65b8172><!--[--><p class="text" data-v-f65b8172>Expo</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-f65b8172 data-v-f65b8172><div class="item" data-v-f65b8172><div class="indicator" data-v-f65b8172></div><a class="VPLink link link" href="/docs/integrations/fly" data-v-f65b8172><!--[--><p class="text" data-v-f65b8172>Fly.io</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-f65b8172 data-v-f65b8172><div class="item" data-v-f65b8172><div class="indicator" data-v-f65b8172></div><a class="VPLink link link" href="/docs/integrations/gcp" data-v-f65b8172><!--[--><p class="text" data-v-f65b8172>GCP</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-f65b8172 data-v-f65b8172><div class="item" data-v-f65b8172><div class="indicator" data-v-f65b8172></div><a class="VPLink link link" href="/docs/integrations/neon" data-v-f65b8172><!--[--><p class="text" data-v-f65b8172>Neon</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-f65b8172 data-v-f65b8172><div class="item" data-v-f65b8172><div class="indicator" data-v-f65b8172></div><a class="VPLink link link" href="/docs/integrations/netlify" data-v-f65b8172><!--[--><p class="text" data-v-f65b8172>Netlify</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-f65b8172 data-v-f65b8172><div class="item" data-v-f65b8172><div class="indicator" data-v-f65b8172></div><a class="VPLink link link" href="/docs/integrations/planetscale" data-v-f65b8172><!--[--><p class="text" data-v-f65b8172>PlanetScale</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-f65b8172 data-v-f65b8172><div class="item" data-v-f65b8172><div class="indicator" data-v-f65b8172></div><a class="VPLink link link" href="/docs/integrations/render" data-v-f65b8172><!--[--><p class="text" data-v-f65b8172>Render</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-f65b8172 data-v-f65b8172><div class="item" data-v-f65b8172><div class="indicator" data-v-f65b8172></div><a class="VPLink link link" href="/docs/integrations/supabase" data-v-f65b8172><!--[--><p class="text" data-v-f65b8172>Supabase</p><!--]--></a><!----></div><!----></div><!--]--></div></section><!--]--></div></section></div><div class="no-transition group" data-v-665c6ffe><section class="VPSidebarItem level-0 collapsible" data-v-665c6ffe data-v-f65b8172><div class="item" role="button" tabindex="0" data-v-f65b8172><div class="indicator" data-v-f65b8172></div><h2 class="text" data-v-f65b8172>Reference</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-f65b8172><span class="vpi-chevron-right caret-icon" data-v-f65b8172></span></div></div><div class="items" data-v-f65b8172><!--[--><div class="VPSidebarItem level-1 is-link" data-v-f65b8172 data-v-f65b8172><div class="item" data-v-f65b8172><div class="indicator" data-v-f65b8172></div><a class="VPLink link link" href="/docs/reference/alternatives" data-v-f65b8172><!--[--><p class="text" data-v-f65b8172>Alternatives</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-f65b8172 data-v-f65b8172><div class="item" data-v-f65b8172><div class="indicator" data-v-f65b8172></div><a class="VPLink link link" href="/docs/reference/benchmarks" data-v-f65b8172><!--[--><p class="text" data-v-f65b8172>Benchmarks</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-f65b8172 data-v-f65b8172><div class="item" data-v-f65b8172><div class="indicator" data-v-f65b8172></div><a class="VPLink link link" href="/docs/reference/literature" data-v-f65b8172><!--[--><p class="text" data-v-f65b8172>Literature</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-f65b8172 data-v-f65b8172><div class="item" data-v-f65b8172><div class="indicator" data-v-f65b8172></div><a class="VPLink link link" href="/docs/reference/telemetry" data-v-f65b8172><!--[--><p class="text" data-v-f65b8172>Telemetry</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><!--]--><!--[--><!--]--></nav></aside><div class="VPContent has-sidebar" id="VPContent" data-v-a29e6ba2 data-v-93396c71><div class="VPDoc has-sidebar has-aside" data-v-93396c71 data-v-e5fa90be><!--[--><!--[--><!--[--><div class="markdown-link-local-nav-container"><a class="markdown-link-local-nav" href="/docs/guides/deployment.md" target="_blank" rel="noopener" data-v-c9b8e4a6><span class="title" data-v-c9b8e4a6>✨ Markdown</span></a></div><div class="custom-local-nav-dropdown"><div class="VPLocalNavOutlineDropdown" style="--vp-vh:0px;" data-v-bf359f67><button data-v-bf359f67>Return to top</button><!----></div></div><!--]--><!--]--><!--]--><div class="container" data-v-e5fa90be><div class="aside" data-v-e5fa90be><div class="aside-curtain" data-v-e5fa90be></div><div class="aside-container" data-v-e5fa90be><div class="aside-content" data-v-e5fa90be><div class="VPDocAside" data-v-e5fa90be data-v-3e59a195><!--[--><!--]--><!--[--><!--[--><!--[--><!--[--><a class="markdown-link-aside pager-link" href="/docs/guides/deployment.md" target="_blank" rel="noopener" data-v-c9b8e4a6><span class="title" data-v-c9b8e4a6>✨ Markdown</span></a><!--]--><!--]--><!--]--><!--]--><nav aria-labelledby="doc-outline-aria-label" class="VPDocAsideOutline" data-v-3e59a195 data-v-2fe00466><div class="content" data-v-2fe00466><div class="outline-marker" data-v-2fe00466></div><div aria-level="2" class="outline-title" id="doc-outline-aria-label" role="heading" data-v-2fe00466>On this page</div><ul class="VPDocOutlineItem root" data-v-2fe00466 data-v-1c0671af><!--[--><!--]--></ul></div></nav><!--[--><!--]--><div class="spacer" data-v-3e59a195></div><!--[--><!--]--><!----><!--[--><!--]--><!--[--><!--]--></div></div></div></div><div class="content" data-v-e5fa90be><div class="content-container" data-v-e5fa90be><!--[--><!--]--><main class="main" data-v-e5fa90be><div style="position:relative;" class="vp-doc _docs_guides_deployment" data-v-e5fa90be><div><div style="display:none;" hidden="true" aria-hidden="true">Are you an LLM? You can read better optimized documentation at /docs/guides/deployment.md for this page in Markdown format</div><p><img src="/img/icons/deploy.png" class="product-icon" style="width:72px;"></p><h1 id="deployment" tabindex="-1">Deployment <a class="header-anchor" href="#deployment" aria-label="Permalink to &quot;Deployment&quot;">​</a></h1><p>How to deploy the <a href="/primitives/postgres-sync">Electric sync engine</a>, with links to integration docs for specific platforms like <a href="/docs/integrations/supabase">Supabase</a>, <a href="/docs/integrations/neon">Neon</a>, <a href="/docs/integrations/render">Render</a> and <a href="/docs/integrations/aws">AWS</a>.</p><div class="tip custom-block github-alert"><p class="custom-block-title">Electric Cloud – the simplest way to use Electric</p><p>The simplest way to use Electric is via the <a href="/cloud">Electric Cloud</a>, which is a simple, scalable, <span class="no-wrap">low-cost</span>, managed Electric hosting service.</p><p class="action cloud-cta"><a href="/cloud" class="VPButton small brand vspace"><span class="vpi-electric-icon"></span> View Cloud</a></p></div><h2 id="the-ingredients-of-a-successful-deployment" tabindex="-1">The ingredients of a successful deployment <a class="header-anchor" href="#the-ingredients-of-a-successful-deployment" aria-label="Permalink to &quot;The ingredients of a successful deployment&quot;">​</a></h2><p>An Electric deployment has three main components. Your Postgres database, the Electric sync service and your app.</p><p>Electric connects to your Postgres using a <code>DATABASE_URL</code>. Your app connects to Electric <a href="/docs/api/http">over HTTP</a>, usually using a <a href="/docs/api/clients/typescript">Client library</a>.</p><figure><a href="/assets/components.DNCChOI5.jpg"><img src="/assets/components.qKqz322G.png" class="hidden-sm" alt="Illustration of the main components of a successfull deployment"><img src="/assets/components.sm.BR1Ct5je.png" class="block-sm" style="max-width:360px;" alt="Illustration of the main components of a successfull deployment"></a></figure><p>As a result, there are three ingredients to a successful Electric deployment:</p><ol><li>you need to be <a href="#_1-running-postgres">running a Postgres database</a></li><li>you need to <a href="#_2-running-electric">run and connect the Electric sync service</a></li><li>you need your app/client to <a href="#_3-connecting-your-app">connect to Electric over HTTP</a></li></ol><h3 id="proxying-requests-to-electric" tabindex="-1">Proxying requests to Electric <a class="header-anchor" href="#proxying-requests-to-electric" aria-label="Permalink to &quot;Proxying requests to Electric&quot;">​</a></h3><p>You also often want to proxy requests to Electric through your API, or other proxy. For example, to implement <a href="./auth">auth</a> and/or <a href="/docs/api/http#caching">caching</a>. In these cases, you&#39;ll also need to deploy your API and/or proxy layer in front of Electric.</p><p>Note also that, when running Electric behind a CDN, you may want your proxy in front of the CDN. This is where primitives like <a href="/docs/integrations/supabase#sync-into-edge-function">edge functions</a> and <a href="/docs/integrations/cloudflare#workers">edge workers</a> can be very useful.</p><h3 id="securing-data-access" tabindex="-1">Securing data access <a class="header-anchor" href="#securing-data-access" aria-label="Permalink to &quot;Securing data access&quot;">​</a></h3><p>By default, Electric exposes public access to the contents of your database. You generally don&#39;t want to expose the contents of your database, so you need to <a href="/docs/guides/security#secure-data-access">lock down access</a> to the Electric HTTP API.</p><p>See the <a href="/docs/guides/security">Security guide</a> for information.</p><h2 id="_1-running-postgres" tabindex="-1">1. Running Postgres <a class="header-anchor" href="#_1-running-postgres" aria-label="Permalink to &quot;1. Running Postgres&quot;">​</a></h2><p>You can use <strong><em>any standard Postgres</em></strong>, version 14 and above.</p><p>This includes Postgres you host yourself, or Postgres hosted by managed database hosting providers, including:</p><ul><li><a href="/docs/integrations/supabase">Supabase</a></li><li><a href="/docs/integrations/neon">Neon</a></li><li><a href="/docs/integrations/aws">AWS (RDS and Aurora)</a></li><li><a href="/docs/integrations/gcp">GCP (Cloud SQL and Alloy)</a></li><li><a href="/docs/integrations/digital-ocean">Digital Ocean</a></li><li><a href="/docs/integrations/crunchy">Crunchy</a></li></ul><p>Postgres must have <a href="https://www.postgresql.org/docs/current/logical-replication-config.html" target="_blank" rel="noreferrer">logical replication</a> enabled. You also need to connect as a database role that has the <a href="https://www.postgresql.org/docs/current/logical-replication-security.html" target="_blank" rel="noreferrer"><code>REPLICATION</code></a> attribute.</p><h3 id="data-model-compatibility" tabindex="-1">Data model compatibility <a class="header-anchor" href="#data-model-compatibility" aria-label="Permalink to &quot;Data model compatibility&quot;">​</a></h3><p>Electric is compatible with <strong><em>any Postgres data model</em></strong>.</p><p>Electric will work as a drop on to any existing data model. There are no limitations on the database features, data types or extensions you can use.</p><h3 id="connecting-to-postgres" tabindex="-1">Connecting to Postgres <a class="header-anchor" href="#connecting-to-postgres" aria-label="Permalink to &quot;Connecting to Postgres&quot;">​</a></h3><p>You connect to Postgres using a <a href="/docs/api/config#database-url"><code>DATABASE_URL</code></a> env var. This connection string contains your user credentials and an <code>sslmode</code> parameter.</p><p>You usually want to connect directly to Postgres and not via a connection pool. This is because Electric uses logical replication and most connection poolers don&#39;t support it. (pgBouncer does support logical replication, <a href='https://www.pgbouncer.org/changelog#pgbouncer-123x' rel='noreferrer' target='_blank'>as of version 1.23</a> so this may change in future).</p><p>You can optionally provide a separate <a href="/docs/api/config#electric-query-database-url"><code>ELECTRIC_POOLED_DATABASE_URL</code></a> env var, which can use a pooler and will be used for all queries other than replication.</p><p>To force Electric to verify the database server&#39;s certificate when connecting to it using TLS, set the <a href="/docs/api/config#electric-database-ca-certificate-file"><code>ELECTRIC_DATABASE_CA_CERTIFICATE_FILE</code></a> config option.</p><div class="tip custom-block github-alert"><p class="custom-block-title">Troubleshooting common errors</p><p>If you get a TCP connection error saying <code>non-existing domain - :nxdomain</code> or <code>network is unreachable - :enetunreach</code> then you may need to connect using IPv6. You can enable this by setting <a href="/docs/api/config#database-use-ipv6"><code>ELECTRIC_DATABASE_USE_IPV6=true</code></a>.</p><p>If you get a TCP connection <code>timeout</code> error then make sure you&#39;re connecting directly to Postgres and not via a connection pool. For example, when using <a href="/docs/integrations/supabase">Supabase</a> you need to untick their &quot;Use connection pooling&quot; option on the database settings page.</p><p>If you&#39;re using IPv6 with Docker, then assuming the machine you&#39;re running Electric on has IPv6 connectivity, you may also need to enable IPv6 for the Docker daemon. You can do this by <a href="https://docs.docker.com/engine/daemon/ipv6/#create-an-ipv6-network" target="_blank" rel="noreferrer">defining an IPv6-capable network</a>) in your Compose file and then adding the <code>networks</code> key to the Electric service definition.</p></div><h3 id="database-resources" tabindex="-1">Database resources <a class="header-anchor" href="#database-resources" aria-label="Permalink to &quot;Database resources&quot;">​</a></h3><p>Electric creates a logical replication <a href="https://www.postgresql.org/docs/current/logical-replication-publication.html" target="_blank" rel="noreferrer">publication</a> and <a href="https://www.postgresql.org/docs/current/logical-replication-subscription.html#LOGICAL-REPLICATION-SUBSCRIPTION-SLOT" target="_blank" rel="noreferrer">replication slot</a> inside Postgres. These are called <code>electric_publication_default</code> and <code>electric_slot_default</code> by default. You can configure the name suffix using the <a href="/docs/api/config#replication-stream-id"><code>ELECTRIC_REPLICATION_STREAM_ID</code></a> env var.</p><p>If the database role that Electric connects to Postgres as doesn&#39;t have the required privileges to create or update the publication, Electric will check that the publication exists in the database and that it is in the right state, meaning that any table for which a shape request is created must have been added to the publication by hand, in advance. This behaviour can also be enforced with the <a href="/docs/api/config#electric-manual-table-publishing"><code>ELECTRIC_MANUAL_TABLE_PUBLISHING</code></a> config option.</p><p>When running, Electric also keeps a pool of active database connections open. The size of this pool defaults to <code>20</code> and can be configured using <a href="/docs/api/config#electric-db-pool-size"><code>ELECTRIC_DB_POOL_SIZE</code></a>.</p><div class="tip custom-block github-alert"><p class="custom-block-title">Cleaning up resources</p><p>If you decide to stop using Electric with a given Postgres database or switch to a different database but keep the old one around, make sure to clean up both the publication and the replication slot.</p><p>See this <a href="./troubleshooting#wal-growth-mdash-why-is-my-postgres-database-storage-filling-up">troubleshooting advice</a> for details.</p></div><h2 id="_2-running-electric" tabindex="-1">2. Running Electric <a class="header-anchor" href="#_2-running-electric" aria-label="Permalink to &quot;2. Running Electric&quot;">​</a></h2><p>The <a href="/primitives/postgres-sync">Electric sync engine</a> is an Elixir web service, packaged using Docker.</p><p>You can deploy it anywhere you can run a container with a filesystem and exposed HTTP port. This includes cloud and application hosting platforms like:</p><ul><li><a href="/docs/integrations/aws">AWS</a></li><li><a href="/docs/integrations/gcp">GCP</a></li><li><a href="/docs/integrations/digital-ocean">Digital Ocean</a></li><li><a href="/docs/integrations/fly">Fly.io</a></li><li><a href="/docs/integrations/render">Render</a></li></ul><h3 id="docker-container" tabindex="-1">Docker container <a class="header-anchor" href="#docker-container" aria-label="Permalink to &quot;Docker container&quot;">​</a></h3><p>Images are deployed to Docker Hub at <a href="https://hub.docker.com/r/electricsql/electric" target="_blank" rel="noreferrer">electricsql/electric</a>.</p><h3 id="optimizing-for-disk" tabindex="-1">Optimizing for disk <a class="header-anchor" href="#optimizing-for-disk" aria-label="Permalink to &quot;Optimizing for disk&quot;">​</a></h3><p>Electric caches <a href="/docs/api/http#shape-log">Shape logs</a> and metadata on the filesystem. Your Electric host must provide a persistent filesystem. Ideally this should be large, fast and locally mounted, such as a NVMe SSD. If you&#39;re configuring a machine and you want to optimise it for Electric, the factors to optimise for, in order of important, are:</p><ol><li>disk speed — low latency, high throughput reads and writes</li><li>memory</li><li>CPU</li></ol><p>For example, on AWS, <a href="https://aws.amazon.com/ec2/instance-types/#Storage_Optimized" target="_blank" rel="noreferrer">Storage Optimized</a> instances such as the <code>i3en.large</code>, or on Hetzner the <a href="https://www.hetzner.com/dedicated-rootserver/matrix-sx/" target="_blank" rel="noreferrer">SX-line</a> of dedicated servers would both be great choices.</p><h3 id="configuring-storage" tabindex="-1">Configuring storage <a class="header-anchor" href="#configuring-storage" aria-label="Permalink to &quot;Configuring storage&quot;">​</a></h3><p>The path to Electric&#39;s persistent storage can be configured via the <a href="/docs/api/config#electric-storage-dir"><code>ELECTRIC_STORAGE_DIR</code></a> environment variable, e.g. <code>ELECTRIC_STORAGE_DIR=/var/lib/electric/persistent</code>. Electric will create the directory at that path if it doesn&#39;t exist yet. However, you need to make sure that the OS user that Electric is running as has the necessary permissions in the parent directory.</p><p>The file system location configured via <code>ELECTRIC_STORAGE_DIR</code> and the data Electric stores there must survive sync service&#39;s restarts. For example, when using Kubernetes, you&#39;ll want to create a persistent volume and attach it to your Electric deployment.</p><div class="tip custom-block github-alert"><p class="custom-block-title">Clear one, clear the other</p><p>The persistent state that Electric maintains in Postgres (via the logical replication publication and replication slot) <strong>must</strong> stay in sync with the shape data cached on disk by Electric.</p><p>If you change the value of <code>ELECTRIC_STORAGE_DIR</code> or switch to a different <code>DATABASE_URL</code> at any point, you <strong>must</strong> clean up the other location by hand, whether it&#39;s removing a directory tree on disk or dropping the replication slot and publication in Postgres.</p></div><div class="tip custom-block github-alert"><p class="custom-block-title">How much storage space?</p><p>Electric trades storage for low memory use and fast sync. How much storage you need is highly application dependent. We encourage you to test with your own workload.</p><p>We plan to implement <a href="https://github.com/electric-sql/electric/issues/1582" target="_blank" rel="noreferrer">compaction</a> and other features to limit and optimise storage use, such as <a href="https://github.com/electric-sql/electric/issues/1529" target="_blank" rel="noreferrer">garbage collecting LRU shapes</a>.</p></div><h3 id="http-port" tabindex="-1">HTTP port <a class="header-anchor" href="#http-port" aria-label="Permalink to &quot;HTTP port&quot;">​</a></h3><p>Electric provides an HTTP API exposed on a configurable <a href="/docs/api/config#electric-port"><code>ELECTRIC_PORT</code></a>. You should make sure this is exposed to the Internet.</p><h3 id="health-checks" tabindex="-1">Health checks <a class="header-anchor" href="#health-checks" aria-label="Permalink to &quot;Health checks&quot;">​</a></h3><p>Electric provides a health check endpoint at <code>/v1/health</code> that can be used for liveness and readiness probes. This endpoint does not require authentication, so it works even when <a href="/docs/api/config#electric-secret"><code>ELECTRIC_SECRET</code></a> is set.</p><p>The endpoint returns a JSON response with a <code>status</code> field:</p><table tabindex="0"><thead><tr><th>HTTP Status</th><th>Response</th><th>Meaning</th></tr></thead><tbody><tr><td><code>200</code></td><td><code>{&quot;status&quot;: &quot;active&quot;}</code></td><td>Electric is fully operational and ready to serve requests</td></tr><tr><td><code>202</code></td><td><code>{&quot;status&quot;: &quot;waiting&quot;}</code></td><td>Electric is waiting to acquire the replication lock</td></tr><tr><td><code>202</code></td><td><code>{&quot;status&quot;: &quot;starting&quot;}</code></td><td>Electric is starting up and establishing connections</td></tr></tbody></table><p>For <strong>liveness probes</strong>, any response (200 or 202) indicates the service is alive.</p><p>For <strong>readiness probes</strong>, you should check for a <code>200</code> status code to ensure Electric is fully ready to handle shape requests.</p><p>Example health check using curl:</p><div class="language-shell"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki github-dark vp-code" tabindex="0"><code><span class="line"><span style="color:#B392F0;">curl</span><span style="color:#9ECBFF;"> http://localhost:3000/v1/health</span></span>
<span class="line"><span style="color:#6A737D;"># {&quot;status&quot;:&quot;active&quot;}</span></span></code></pre></div><h4 id="kubernetes-probes" tabindex="-1">Kubernetes probes <a class="header-anchor" href="#kubernetes-probes" aria-label="Permalink to &quot;Kubernetes probes&quot;">​</a></h4><p>When deploying Electric on Kubernetes, note that standard <code>httpGet</code> probes consider any 2xx response as success. This means an <code>httpGet</code> readiness probe would incorrectly mark the pod as ready when Electric returns <code>202</code> (still starting up).</p><p>For <strong>liveness probes</strong>, <code>httpGet</code> works fine since any response indicates the service is alive:</p><div class="language-yaml"><button title="Copy Code" class="copy"></button><span class="lang">yaml</span><pre class="shiki github-dark vp-code" tabindex="0"><code><span class="line"><span style="color:#85E89D;">livenessProbe</span><span style="color:#E1E4E8;">:</span></span>
<span class="line"><span style="color:#85E89D;">  httpGet</span><span style="color:#E1E4E8;">:</span></span>
<span class="line"><span style="color:#85E89D;">    path</span><span style="color:#E1E4E8;">: </span><span style="color:#9ECBFF;">/v1/health</span></span>
<span class="line"><span style="color:#85E89D;">    port</span><span style="color:#E1E4E8;">: </span><span style="color:#79B8FF;">3000</span></span>
<span class="line"><span style="color:#85E89D;">  initialDelaySeconds</span><span style="color:#E1E4E8;">: </span><span style="color:#79B8FF;">10</span></span>
<span class="line"><span style="color:#85E89D;">  periodSeconds</span><span style="color:#E1E4E8;">: </span><span style="color:#79B8FF;">10</span></span>
<span class="line"><span style="color:#85E89D;">  timeoutSeconds</span><span style="color:#E1E4E8;">: </span><span style="color:#79B8FF;">2</span></span></code></pre></div><p>For <strong>readiness probes</strong>, use an <code>exec</code> probe to check for exactly HTTP 200. The Electric container includes <code>curl</code>:</p><div class="language-yaml"><button title="Copy Code" class="copy"></button><span class="lang">yaml</span><pre class="shiki github-dark vp-code" tabindex="0"><code><span class="line"><span style="color:#85E89D;">readinessProbe</span><span style="color:#E1E4E8;">:</span></span>
<span class="line"><span style="color:#85E89D;">  exec</span><span style="color:#E1E4E8;">:</span></span>
<span class="line"><span style="color:#85E89D;">    command</span><span style="color:#E1E4E8;">:</span></span>
<span class="line"><span style="color:#E1E4E8;">      - </span><span style="color:#9ECBFF;">sh</span></span>
<span class="line"><span style="color:#E1E4E8;">      - </span><span style="color:#9ECBFF;">-c</span></span>
<span class="line"><span style="color:#E1E4E8;">      - </span><span style="color:#F97583;">|</span></span>
<span class="line"><span style="color:#9ECBFF;">        test &quot;$(curl -so /dev/null -w &#39;%{http_code}&#39; http://localhost:3000/v1/health)&quot; = &quot;200&quot;</span></span>
<span class="line"><span style="color:#85E89D;">  initialDelaySeconds</span><span style="color:#E1E4E8;">: </span><span style="color:#79B8FF;">5</span></span>
<span class="line"><span style="color:#85E89D;">  periodSeconds</span><span style="color:#E1E4E8;">: </span><span style="color:#79B8FF;">10</span></span>
<span class="line"><span style="color:#85E89D;">  timeoutSeconds</span><span style="color:#E1E4E8;">: </span><span style="color:#79B8FF;">2</span></span>
<span class="line"><span style="color:#85E89D;">  failureThreshold</span><span style="color:#E1E4E8;">: </span><span style="color:#79B8FF;">3</span></span></code></pre></div><p>This ensures the pod is only marked ready when Electric is fully operational and ready to serve shape requests.</p><h3 id="observability" tabindex="-1">Observability <a class="header-anchor" href="#observability" aria-label="Permalink to &quot;Observability&quot;">​</a></h3><p>Electric supports <a href="https://opentelemetry.io/" target="_blank" rel="noreferrer">OpenTelemetry</a> for exporting traces, with built-in support for <a href="https://www.honeycomb.io/" target="_blank" rel="noreferrer">Honeycomb.io</a>. Metrics are also available in StatsD and Prometheus formats.</p><p>See the <a href="/docs/reference/telemetry#opentelemetry">Telemetry reference</a> for configuration details.</p><h3 id="caching-proxy" tabindex="-1">Caching proxy <a class="header-anchor" href="#caching-proxy" aria-label="Permalink to &quot;Caching proxy&quot;">​</a></h3><p>Electric is designed to run behind a caching proxy, such as <a href="https://nginx.org/en" target="_blank" rel="noreferrer">Nginx</a>, <a href="https://caddyserver.com" target="_blank" rel="noreferrer">Caddy</a>, <a href="https://varnish-cache.org" target="_blank" rel="noreferrer">Varnish</a> or a CDN like <a href="https://www.cloudflare.com/en-gb/application-services/primitives/cdn" target="_blank" rel="noreferrer">Cloudflare</a> or <a href="https://www.fastly.com/primitives/cdn" target="_blank" rel="noreferrer">Fastly</a>. You don&#39;t <em>have</em> to run a proxy in front of Electric but you will benefit from radically better performance if you do.</p><p>See the <a href="/docs/api/http#caching">Caching section</a> of the HTTP API docs for more information.</p><h2 id="_3-connecting-your-app" tabindex="-1">3. Connecting your app <a class="header-anchor" href="#_3-connecting-your-app" aria-label="Permalink to &quot;3. Connecting your app&quot;">​</a></h2><p>You can then connect your app to Electric <a href="/docs/api/http">over HTTP</a>. Typically you use a <a href="/docs/api/clients/typescript">Client library</a> and configure the URL in the constructor, e.g.:</p><div class="language-ts"><button title="Copy Code" class="copy"></button><span class="lang">ts</span><pre class="shiki github-dark vp-code" tabindex="0"><code><span class="line"><span style="color:#F97583;">const</span><span style="color:#79B8FF;"> stream</span><span style="color:#F97583;"> =</span><span style="color:#F97583;"> new</span><span style="color:#B392F0;"> ShapeStream</span><span style="color:#E1E4E8;">({</span></span>
<span class="line"><span style="color:#E1E4E8;">  url: </span><span style="color:#9ECBFF;">`https://your-electric-service.example.com/v1/shape`</span><span style="color:#E1E4E8;">,</span></span>
<span class="line"><span style="color:#E1E4E8;">  params: {</span></span>
<span class="line"><span style="color:#E1E4E8;">    table: </span><span style="color:#9ECBFF;">`foo`</span><span style="color:#E1E4E8;">,</span></span>
<span class="line"><span style="color:#E1E4E8;">  },</span></span>
<span class="line"><span style="color:#E1E4E8;">})</span></span>
<span class="line"><span style="color:#F97583;">const</span><span style="color:#79B8FF;"> shape</span><span style="color:#F97583;"> =</span><span style="color:#F97583;"> new</span><span style="color:#B392F0;"> Shape</span><span style="color:#E1E4E8;">(stream)</span></span></code></pre></div><p>You can connect to Electric from any language/environment that speaks HTTP. See the <a href="/docs/api/http">HTTP API</a> and <a href="/docs/api/clients/typescript">Client docs</a> for more information.</p></div></div></main><footer class="VPDocFooter" data-v-e5fa90be data-v-429f87a2><!--[--><!--[--><!--[--><!--[--><div class="markdown-link-footer-container"><a class="markdown-link-footer" href="/docs/guides/deployment.md" target="_blank" rel="noopener" data-v-c9b8e4a6><span class="title" data-v-c9b8e4a6>✨ Markdown</span></a></div><!--]--><!--]--><!--]--><!--]--><div class="edit-info" data-v-429f87a2><div class="edit-link" data-v-429f87a2><a class="VPLink link vp-external-link-icon no-icon edit-link-button" href="https://github.com/electric-sql/electric/edit/main/website/docs/guides/deployment.md" target="_blank" rel="noreferrer" data-v-429f87a2><!--[--><span class="vpi-square-pen edit-link-icon" data-v-429f87a2></span> Edit this page<!--]--></a></div><!----></div><nav class="prev-next" aria-labelledby="doc-footer-aria-label" data-v-429f87a2><span class="visually-hidden" id="doc-footer-aria-label" data-v-429f87a2>Pager</span><div class="pager" data-v-429f87a2><a class="VPLink link pager-link prev" href="/docs/guides/postgres-permissions" data-v-429f87a2><!--[--><span class="desc" data-v-429f87a2>Previous page</span><span class="title" data-v-429f87a2>PostgreSQL Permissions</span><!--]--></a></div><div class="pager" data-v-429f87a2><a class="VPLink link pager-link next" href="/docs/guides/sharding" data-v-429f87a2><!--[--><span class="desc" data-v-429f87a2>Next page</span><span class="title" data-v-429f87a2>Sharding</span><!--]--></a></div></nav></footer><!--[--><!--]--></div></div></div><!--[--><!--]--></div></div><!----><!--[--><!--]--></div></div>
    <script>window.__VP_HASH_MAP__=JSON.parse("{\"about_community.md\":\"Dq5HA5GI\",\"about_contact.md\":\"hDEdQZrb\",\"about_jobs_founders-associate.md\":\"BOordfnN\",\"about_jobs_index.md\":\"BlHU3vhz\",\"about_jobs_pglite-engineer.md\":\"D00M88r8\",\"about_legal_dpa.md\":\"CXGxOQv7\",\"about_legal_privacy.md\":\"DJVsPHwD\",\"about_legal_subprocessors.md\":\"D-UoEvmh\",\"about_legal_terms.md\":\"WuawsyIG\",\"about_team.md\":\"CeaLPrBs\",\"blog.md\":\"DTS4jwEl\",\"blog_2022_05_03_introducing-rich-crdts.md\":\"CoXmRfX3\",\"blog_2022_05_20_relativity-causal-consistency.md\":\"BKtuc4Iv\",\"blog_2022_12_16_evolution-state-transfer.md\":\"B5_Xd_e_\",\"blog_2023_02_02_introducing-jose-kevin-garry.md\":\"DNEng3Dl\",\"blog_2023_02_09_developing-local-first-software.md\":\"ChhiNR07\",\"blog_2023_05_10_welcome-andrei-oleksii.md\":\"B7bbWDLs\",\"blog_2023_09_20_introducing-electricsql-v0.6.md\":\"DCG2XhdF\",\"blog_2023_10_10_welcome-sam.md\":\"DsBXGEsO\",\"blog_2023_10_12_linerlite-local-first-with-react.md\":\"cRX5YHYA\",\"blog_2023_10_26_local-first-software-london-meet-up.md\":\"DOR3LKwN\",\"blog_2023_11_02_electricsql-v0.7-released.md\":\"BjhpvO9D\",\"blog_2023_11_02_using-electricsql-with-the-ionic-framework-and-capacitor.md\":\"CIHVdwL4\",\"blog_2023_12_13_electricsql-v0.8-released.md\":\"BMGJB2M4\",\"blog_2023_12_15_secure-transactions-with-local-first.md\":\"DI7uGCuQ\",\"blog_2024_01_24_electricsql-v0.9-released.md\":\"B9ayNVE6\",\"blog_2024_02_05_local-first-ai-with-tauri-postgres-pgvector-llama.md\":\"Bj6oqeMh\",\"blog_2024_02_27_intel-ignite.md\":\"Be3eWNGk\",\"blog_2024_04_10_electricsql-v0.10-released.md\":\"CPU96tYW\",\"blog_2024_05_14_electricsql-postgres-client-support.md\":\"DZmgob4W\",\"blog_2024_07_17_electric-next.md\":\"BtizL8j2\",\"blog_2024_11_21_local-first-with-your-existing-api.md\":\"D1lDJX7I\",\"blog_2024_12_10_electric-beta-release.md\":\"DZy7gebQ\",\"blog_2025_03_17_electricsql-1.0-released.md\":\"BWPZMT9q\",\"blog_2025_04_07_electric-cloud-public-beta-release.md\":\"TweaC6M0\",\"blog_2025_04_09_building-ai-apps-on-sync.md\":\"ClvuoD3E\",\"blog_2025_04_22_untangling-llm-spaghetti.md\":\"DuKRg7ns\",\"blog_2025_06_05_database-in-the-sandbox.md\":\"BAIDpgM7\",\"blog_2025_07_29_super-fast-apps-on-sync-with-tanstack-db.md\":\"JLJDc4ae\",\"blog_2025_08_04_reliability-sprint.md\":\"DA4eORXQ\",\"blog_2025_08_12_bringing-agents-back-down-to-earth.md\":\"Bmd14EpO\",\"blog_2025_08_13_electricsql-v1.1-released.md\":\"CFbAPl9T\",\"blog_2025_12_09_announcing-durable-streams.md\":\"jwhV2DkQ\",\"blog_2025_12_23_durable-streams-0.1.0.md\":\"C7aWEm88\",\"blog_2026_01_12_durable-sessions-for-collaborative-ai.md\":\"BO-AtQUu\",\"blog_2026_01_20_from-science-fiction-to-reality-you-can-build-difficult-things-now.md\":\"LnuVp2w9\",\"blog_2026_01_22_announcing-hosted-durable-streams.md\":\"BWU4-hK_\",\"blog_2026_02_02_configurancy.md\":\"BAXrJQIn\",\"blog_2026_02_19_amdahls-law-for-ai-agents.md\":\"BschsMiR\",\"blog_2026_03_06_agent-skills-now-shipping.md\":\"yrmK3E4s\",\"blog_2026_03_24_durable-transport-ai-sdks.md\":\"3FNkt0fT\",\"blog_2026_03_25_announcing-pglite-v04.md\":\"SZ_RDfwx\",\"blog_2026_03_25_tanstack-db-0.6-app-ready-with-persistence-and-includes.md\":\"IpVYCg7q\",\"blog_2026_03_26_stream-db.md\":\"BUDnZjRT\",\"blog_2026_04_02_electric-cloud-pricing.md\":\"iVpPD97q\",\"changelog.md\":\"8tBYg29L\",\"cloud_cli.md\":\"DK4FTB2D\",\"cloud_index.md\":\"DaUq66du\",\"cloud_protocols.md\":\"Dik0becM\",\"cloud_usage.md\":\"CCgUQodH\",\"demos.md\":\"D3FG7HeP\",\"demos_ai-chat.md\":\"BkpJV1kh\",\"demos_bash.md\":\"DZMtno9C\",\"demos_burn.md\":\"B6sDpbpi\",\"demos_encryption.md\":\"D1jFbjqX\",\"demos_gatekeeper-auth.md\":\"CEkURS8m\",\"demos_linearlite.md\":\"B5QLpHe0\",\"demos_nextjs.md\":\"ron_Ukcq\",\"demos_notes.md\":\"D7d4Knmf\",\"demos_phoenix-liveview.md\":\"D163eCSW\",\"demos_pixel-art.md\":\"B7m38HvU\",\"demos_proxy-auth.md\":\"Dloqx_Ln\",\"demos_react.md\":\"CvnOUQQe\",\"demos_redis.md\":\"dPJq6Kp_\",\"demos_remix.md\":\"C1OhmwN6\",\"demos_tanstack.md\":\"Cj5wW-JE\",\"demos_todo-app.md\":\"Ds4reuAr\",\"demos_write-patterns.md\":\"DAa7F1TN\",\"demos_yjs.md\":\"VUJClXHz\",\"docs__tutorial.md\":\"DzTNiqZO\",\"docs_agents.md\":\"-hxM5KuS\",\"docs_api_clients_elixir.md\":\"jPymefUQ\",\"docs_api_clients_typescript.md\":\"DuIjdVyw\",\"docs_api_config.md\":\"C1Z4YeFh\",\"docs_api_http.md\":\"D1zE0Rmg\",\"docs_guides_auth.md\":\"79v9ZOqc\",\"docs_guides_client-development.md\":\"D8sD8skx\",\"docs_guides_deployment.md\":\"CFli_dKV\",\"docs_guides_installation.md\":\"DE1OkWLz\",\"docs_guides_postgres-permissions.md\":\"CdbDCMVx\",\"docs_guides_security.md\":\"D-l3zYXi\",\"docs_guides_shapes.md\":\"CPuokKrK\",\"docs_guides_sharding.md\":\"CquzB4ei\",\"docs_guides_troubleshooting.md\":\"CAekaf3H\",\"docs_guides_writes.md\":\"-QpfGb-B\",\"docs_integrations_aws.md\":\"CFjZQY_n\",\"docs_integrations_cloudflare.md\":\"MvZUcUoj\",\"docs_integrations_crunchy.md\":\"DnZ5DCzf\",\"docs_integrations_digital-ocean.md\":\"Bwe9GDS1\",\"docs_integrations_expo.md\":\"Cs6atpvP\",\"docs_integrations_fly.md\":\"BFRbm_lw\",\"docs_integrations_gcp.md\":\"DcL3_wDy\",\"docs_integrations_livestore.md\":\"BExYNslP\",\"docs_integrations_mobx.md\":\"BdsYB7WB\",\"docs_integrations_neon.md\":\"Dqb_q5_o\",\"docs_integrations_netlify.md\":\"DEOT7v0R\",\"docs_integrations_next.md\":\"BFAy43is\",\"docs_integrations_phoenix.md\":\"iwQ20sD-\",\"docs_integrations_planetscale.md\":\"DEVxApVu\",\"docs_integrations_react.md\":\"Cx2sxq67\",\"docs_integrations_redis.md\":\"DUEckOG7\",\"docs_integrations_render.md\":\"Dn_z6DJo\",\"docs_integrations_supabase.md\":\"MsiVS4fy\",\"docs_integrations_tanstack.md\":\"Bo9w-hGe\",\"docs_integrations_vercel.md\":\"CCrepP5b\",\"docs_integrations_yjs.md\":\"CwoUxCrD\",\"docs_intro.md\":\"B51O8NVh\",\"docs_llms__intro_redux.md\":\"b0wf2SP7\",\"docs_llms__quickstart_redux.md\":\"B27brHB8\",\"docs_quickstart.md\":\"DhHw3UBM\",\"docs_reference_alternatives.md\":\"QfrFTLye\",\"docs_reference_benchmarks.md\":\"BRuD3kNN\",\"docs_reference_literature.md\":\"Bq8FNy3z\",\"docs_reference_telemetry.md\":\"BppQTfl8\",\"docs_stacks.md\":\"BOeSdfsC\",\"index.md\":\"CDm6ExKY\",\"old-index.md\":\"Ch1be3Gt\",\"pricing.md\":\"B3n2O1Zs\",\"primitives_durable-streams.md\":\"1qxE7MAk\",\"primitives_index.md\":\"CTzjhOaQ\",\"primitives_pglite.md\":\"BxZpTyDM\",\"primitives_postgres-sync.md\":\"CcZIuOGe\",\"primitives_tanstack-db.md\":\"8t2-gY69\",\"src_partials_home-cta.md\":\"CC1folU4\",\"src_partials_home-features-after.md\":\"DlD7kZR2\",\"src_partials_home-features-before.md\":\"BK-1Iq2j\",\"src_partials_home-your-stack-simplified.md\":\"4e8Yiw8a\",\"sync.md\":\"zzPsNaHw\"}");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\":\"/img/brand/logo.svg\",\"nav\":[{\"text\":\"Sync\",\"link\":\"/sync\",\"activeMatch\":\"/sync\"},{\"text\":\"Primitives\",\"link\":\"/primitives\",\"activeMatch\":\"/primitives\"},{\"text\":\"Cloud\",\"link\":\"/cloud\",\"activeMatch\":\"/cloud\"},{\"text\":\"Pricing\",\"link\":\"/pricing\",\"activeMatch\":\"/pricing\"},{\"text\":\"Docs\",\"link\":\"/docs/intro\",\"activeMatch\":\"/docs/\"},{\"text\":\"Demos\",\"link\":\"/demos\",\"activeMatch\":\"/demos\"},{\"text\":\"Blog\",\"link\":\"/blog\",\"activeMatch\":\"/blog\"},{\"text\":\"About\",\"link\":\"/about/community\",\"activeMatch\":\"/about/\"},{\"component\":\"NavSignupButton\"}],\"search\":{\"provider\":\"local\"},\"sidebar\":{\"/primitives\":[{\"text\":\"Primitives\",\"items\":[{\"text\":\"Overview\",\"link\":\"/primitives/\"},{\"text\":\"Postgres Sync\",\"link\":\"/primitives/postgres-sync\"},{\"text\":\"Durable Streams\",\"link\":\"/primitives/durable-streams\"},{\"text\":\"TanStack DB\",\"link\":\"/primitives/tanstack-db\"},{\"text\":\"PGlite\",\"link\":\"/primitives/pglite\"}]}],\"/cloud\":[{\"text\":\"Electric Cloud\",\"items\":[{\"text\":\"Overview\",\"link\":\"/cloud/\"},{\"text\":\"Usage\",\"link\":\"/cloud/usage\"},{\"text\":\"Protocols\",\"link\":\"/cloud/protocols\"},{\"text\":\"Pricing\",\"link\":\"/pricing\"},{\"text\":\"CLI\",\"link\":\"/cloud/cli\"}]}],\"/docs\":[{\"text\":\"Docs\",\"collapsed\":false,\"items\":[{\"text\":\"Intro\",\"link\":\"/docs/intro\"},{\"text\":\"Quickstart\",\"link\":\"/docs/quickstart\"},{\"text\":\"Stacks\",\"link\":\"/docs/stacks\"},{\"text\":\"AGENTS.md\",\"link\":\"/docs/agents\"}]},{\"text\":\"Guides\",\"collapsed\":false,\"items\":[{\"text\":\"Auth\",\"link\":\"/docs/guides/auth\"},{\"text\":\"Shapes\",\"link\":\"/docs/guides/shapes\"},{\"text\":\"Writes\",\"link\":\"/docs/guides/writes\"},{\"text\":\"Installation\",\"link\":\"/docs/guides/installation\"},{\"text\":\"PostgreSQL Permissions\",\"link\":\"/docs/guides/postgres-permissions\"},{\"text\":\"Deployment\",\"link\":\"/docs/guides/deployment\"},{\"text\":\"Sharding\",\"link\":\"/docs/guides/sharding\"},{\"text\":\"Security\",\"link\":\"/docs/guides/security\"},{\"text\":\"Troubleshooting\",\"link\":\"/docs/guides/troubleshooting\"},{\"text\":\"Client development\",\"link\":\"/docs/guides/client-development\"}]},{\"text\":\"API\",\"collapsed\":false,\"items\":[{\"text\":\"HTTP\",\"link\":\"/docs/api/http\"},{\"text\":\"Clients\",\"items\":[{\"text\":\"TypeScript\",\"link\":\"/docs/api/clients/typescript\"},{\"text\":\"Elixir\",\"link\":\"/docs/api/clients/elixir\"}],\"collapsed\":false},{\"text\":\"Config\",\"link\":\"/docs/api/config\"}]},{\"text\":\"Integrations\",\"collapsed\":false,\"items\":[{\"text\":\"Frameworks\",\"items\":[{\"text\":\"LiveStore\",\"link\":\"/docs/integrations/livestore\"},{\"text\":\"MobX\",\"link\":\"/docs/integrations/mobx\"},{\"text\":\"Next.js\",\"link\":\"/docs/integrations/next\"},{\"text\":\"Phoenix\",\"link\":\"/docs/integrations/phoenix\"},{\"text\":\"React\",\"link\":\"/docs/integrations/react\"},{\"text\":\"Redis\",\"link\":\"/docs/integrations/redis\"},{\"text\":\"TanStack\",\"link\":\"/docs/integrations/tanstack\"},{\"text\":\"Yjs\",\"link\":\"/docs/integrations/yjs\"}]},{\"text\":\"Platforms\",\"items\":[{\"text\":\"AWS\",\"link\":\"/docs/integrations/aws\"},{\"text\":\"Cloudflare\",\"link\":\"/docs/integrations/cloudflare\"},{\"text\":\"Crunchy\",\"link\":\"/docs/integrations/crunchy\"},{\"text\":\"Digital Ocean\",\"link\":\"/docs/integrations/digital-ocean\"},{\"text\":\"Expo\",\"link\":\"/docs/integrations/expo\"},{\"text\":\"Fly.io\",\"link\":\"/docs/integrations/fly\"},{\"text\":\"GCP\",\"link\":\"/docs/integrations/gcp\"},{\"text\":\"Neon\",\"link\":\"/docs/integrations/neon\"},{\"text\":\"Netlify\",\"link\":\"/docs/integrations/netlify\"},{\"text\":\"PlanetScale\",\"link\":\"/docs/integrations/planetscale\"},{\"text\":\"Render\",\"link\":\"/docs/integrations/render\"},{\"text\":\"Supabase\",\"link\":\"/docs/integrations/supabase\"}]}]},{\"text\":\"Reference\",\"collapsed\":false,\"items\":[{\"text\":\"Alternatives\",\"link\":\"/docs/reference/alternatives\"},{\"text\":\"Benchmarks\",\"link\":\"/docs/reference/benchmarks\"},{\"text\":\"Literature\",\"link\":\"/docs/reference/literature\"},{\"text\":\"Telemetry\",\"link\":\"/docs/reference/telemetry\"}]}],\"/demos\":[{\"text\":\"Demos\",\"collapsed\":false,\"items\":[{\"text\":\"Burn\",\"link\":\"/demos/burn\"},{\"text\":\"AI Chat\",\"link\":\"/demos/ai-chat\"},{\"text\":\"Linearlite\",\"link\":\"/demos/linearlite\"},{\"text\":\"Notes\",\"link\":\"/demos/notes\"},{\"text\":\"Pixel art\",\"link\":\"/demos/pixel-art\"}]},{\"text\":\"Examples\",\"collapsed\":false,\"items\":[{\"text\":\"Bash\",\"link\":\"/demos/bash\"},{\"text\":\"Encryption\",\"link\":\"/demos/encryption\"},{\"text\":\"Gatekeeper auth\",\"link\":\"/demos/gatekeeper-auth\"},{\"text\":\"Next.js\",\"link\":\"/demos/nextjs\"},{\"text\":\"Phoenix LiveView\",\"link\":\"/demos/phoenix-liveview\"},{\"text\":\"Proxy auth\",\"link\":\"/demos/proxy-auth\"},{\"text\":\"React\",\"link\":\"/demos/react\"},{\"text\":\"Redis\",\"link\":\"/demos/redis\"},{\"text\":\"Remix\",\"link\":\"/demos/remix\"},{\"text\":\"Tanstack\",\"link\":\"/demos/tanstack\"},{\"text\":\"Todo app\",\"link\":\"/demos/todo-app\"},{\"text\":\"Write patterns\",\"link\":\"/demos/write-patterns\"},{\"text\":\"Yjs\",\"link\":\"/demos/yjs\"}]}],\"/blog\":[{\"text\":\"Blog\",\"items\":[{\"text\":\"Electric Cloud pricing is live\",\"link\":\"/blog/2026/04/02/electric-cloud-pricing\"},{\"text\":\"StreamDB — a reactive database in a Durable Stream\",\"link\":\"/blog/2026/03/26/stream-db\"},{\"text\":\"Electric apps get persistence and includes with TanStack DB 0.6\",\"link\":\"/blog/2026/03/25/tanstack-db-0.6-app-ready-with-persistence-and-includes\"},{\"text\":\"Announcing PGlite v0.4: PostGIS, connection multiplexing, and a new architecture\",\"link\":\"/blog/2026/03/25/announcing-pglite-v04\"},{\"text\":\"Durable Transports for your AI SDK\",\"link\":\"/blog/2026/03/24/durable-transport-ai-sdks\"},{\"text\":\"Agent skills now shipping in our npm packages\",\"link\":\"/blog/2026/03/06/agent-skills-now-shipping\"},{\"text\":\"Amdahl's law for AI agents\",\"link\":\"/blog/2026/02/19/amdahls-law-for-ai-agents\"},{\"text\":\"Configurancy: keeping systems intelligible when agents write all the code\",\"link\":\"/blog/2026/02/02/configurancy\"},{\"text\":\"Announcing Hosted Durable Streams\",\"link\":\"/blog/2026/01/22/announcing-hosted-durable-streams\"},{\"text\":\"From fiction to reality, you can now build difficult things\",\"link\":\"/blog/2026/01/20/from-science-fiction-to-reality-you-can-build-difficult-things-now\"},{\"text\":\"Durable Sessions — the key pattern for collaborative AI\",\"link\":\"/blog/2026/01/12/durable-sessions-for-collaborative-ai\"},{\"text\":\"Durable Streams 0.1.0 and State Protocol\",\"link\":\"/blog/2025/12/23/durable-streams-0.1.0\"},{\"text\":\"Announcing Durable Streams\",\"link\":\"/blog/2025/12/09/announcing-durable-streams\"},{\"text\":\"Electric 1.1: new storage engine with 100x faster writes\",\"link\":\"/blog/2025/08/13/electricsql-v1.1-released\"},{\"text\":\"Bringing agents back down to earth\",\"link\":\"/blog/2025/08/12/bringing-agents-back-down-to-earth\"},{\"text\":\"120 days of hardening – the post‑1.0 reliability sprint\",\"link\":\"/blog/2025/08/04/reliability-sprint\"},{\"text\":\"Super-fast apps on sync with Electric and TanStack DB\",\"link\":\"/blog/2025/07/29/super-fast-apps-on-sync-with-tanstack-db\"},{\"text\":\"Vibe coding with a database in the sandbox\",\"link\":\"/blog/2025/06/05/database-in-the-sandbox\"},{\"text\":\"Untangling the LLM spaghetti\",\"link\":\"/blog/2025/04/22/untangling-llm-spaghetti\"},{\"text\":\"Building AI apps? You need sync\",\"link\":\"/blog/2025/04/09/building-ai-apps-on-sync\"},{\"text\":\"Electric Cloud public BETA: Sync in 30 seconds\",\"link\":\"/blog/2025/04/07/electric-cloud-public-beta-release\"},{\"text\":\"Electric 1.0 released\",\"link\":\"/blog/2025/03/17/electricsql-1.0-released\"},{\"text\":\"Electric BETA release\",\"link\":\"/blog/2024/12/10/electric-beta-release\"},{\"text\":\"Local-first with your existing API\",\"link\":\"/blog/2024/11/21/local-first-with-your-existing-api\"},{\"text\":\"A new approach to building Electric\",\"link\":\"/blog/2024/07/17/electric-next\"},{\"text\":\"Electric v0.11 released with support for Postgres in the client\",\"link\":\"/blog/2024/05/14/electricsql-postgres-client-support\"},{\"text\":\"Electric v0.10 released with shape filtering\",\"link\":\"/blog/2024/04/10/electricsql-v0.10-released\"},{\"text\":\"Electrify, Ignition, Liftoff!\",\"link\":\"/blog/2024/02/27/intel-ignite\"},{\"text\":\"Local AI with Postgres, pgvector and llama2, inside a Tauri app\",\"link\":\"/blog/2024/02/05/local-first-ai-with-tauri-postgres-pgvector-llama\"},{\"text\":\"ElectricSQL v0.9 released\",\"link\":\"/blog/2024/01/24/electricsql-v0.9-released\"},{\"text\":\"Secure transactions with local-first\",\"link\":\"/blog/2023/12/15/secure-transactions-with-local-first\"},{\"text\":\"ElectricSQL v0.8 released with JSON and Supabase support\",\"link\":\"/blog/2023/12/13/electricsql-v0.8-released\"},{\"text\":\"Use ElectricSQL with the Ionic Framework and Capacitor\",\"link\":\"/blog/2023/11/02/using-electricsql-with-the-ionic-framework-and-capacitor\"},{\"text\":\"ElectricSQL v0.7 released\",\"link\":\"/blog/2023/11/02/electricsql-v0.7-released\"},{\"text\":\"ElectricSQL hosted the first \\\"Local-first Software London\\\" meet-up\",\"link\":\"/blog/2023/10/26/local-first-software-London-meet-up\"},{\"text\":\"Linearlite - A local-first app built with ElectricSQL and React\",\"link\":\"/blog/2023/10/12/linerlite-local-first-with-react\"},{\"text\":\"Welcome Sam Willis!\",\"link\":\"/blog/2023/10/10/welcome-sam\"},{\"text\":\"Local-first sync for Postgres from the inventors of CRDTs\",\"link\":\"/blog/2023/09/20/introducing-electricsql-v0.6\"},{\"text\":\"Welcome Andrei and Oleksii!\",\"link\":\"/blog/2023/05/10/welcome-andrei-oleksii\"},{\"text\":\"Developing local-first software\",\"link\":\"/blog/2023/02/09/developing-local-first-software\"},{\"text\":\"Welcome José, Kevin and Garry!\",\"link\":\"/blog/2023/02/02/introducing-jose-kevin-garry\"},{\"text\":\"The evolution of state transfer\",\"link\":\"/blog/2022/12/16/evolution-state-transfer\"},{\"text\":\"Relativity and causal consistency\",\"link\":\"/blog/2022/05/20/relativity-causal-consistency\"},{\"text\":\"Introducing Rich-CRDTs\",\"link\":\"/blog/2022/05/03/introducing-rich-crdts\"}]}],\"/about\":[{\"text\":\"About\",\"items\":[{\"text\":\"Community\",\"link\":\"/about/community\"},{\"text\":\"Team\",\"link\":\"/about/team\"},{\"text\":\"Jobs\",\"link\":\"/about/jobs\",\"items\":[{\"text\":\"Founders Associate\",\"link\":\"/about/jobs/founders-associate\"}],\"collapsed\":false},{\"text\":\"Legal\",\"items\":[{\"text\":\"Terms\",\"link\":\"/about/legal/terms\"},{\"text\":\"Privacy\",\"link\":\"/about/legal/privacy\"}],\"collapsed\":false},{\"text\":\"Contact\",\"link\":\"/about/contact\"}]}]},\"siteTitle\":false,\"socialLinks\":[{\"icon\":\"durable-streams\",\"link\":\"https://durablestreams.com\"},{\"icon\":\"tanstack\",\"link\":\"https://tanstack.com/db\"},{\"icon\":\"pglite\",\"link\":\"https://pglite.dev\"},{\"icon\":\"x\",\"link\":\"https://x.com/ElectricSQL\"},{\"icon\":\"discord\",\"link\":\"https://discord.electric-sql.com\"},{\"icon\":\"github\",\"link\":\"https://github.com/electric-sql/electric\"}]},\"locales\":{},\"scrollOffset\":134,\"cleanUrls\":true}");</script>
    
  </body>
</html>