[{"data":1,"prerenderedAt":760},["ShallowReactive",2],{"navigation_docs":3,"-fleet-cluster":320,"-fleet-cluster-surround":755},[4,35,69,109,133,193,228,262,305],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":6},"Getting started",false,"\u002Fgetting-started","1.getting-started",[10,15,20,25,30],{"title":11,"path":12,"stem":13,"icon":14},"Introduction","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F1.introduction","i-ph-house",{"title":16,"path":17,"stem":18,"icon":19},"Quickstart","\u002Fgetting-started\u002Fquickstart","1.getting-started\u002F2.quickstart","i-ph-rocket-launch",{"title":21,"path":22,"stem":23,"icon":24},"Concepts","\u002Fgetting-started\u002Fconcepts","1.getting-started\u002F3.concepts","i-ph-book-open",{"title":26,"path":27,"stem":28,"icon":29},"Install","\u002Fgetting-started\u002Finstall","1.getting-started\u002F4.install","i-ph-download-simple",{"title":31,"path":32,"stem":33,"icon":34},"What works today","\u002Fgetting-started\u002Fstatus","1.getting-started\u002F5.status","i-ph-list-checks",{"title":21,"icon":6,"path":36,"stem":37,"children":38,"page":6},"\u002Fconcepts","2.concepts",[39,44,49,54,59,64],{"title":40,"path":41,"stem":42,"icon":43},"Architecture","\u002Fconcepts\u002Farchitecture","2.concepts\u002F1.architecture","i-ph-planet",{"title":45,"path":46,"stem":47,"icon":48},"Jobs and durability","\u002Fconcepts\u002Fjobs","2.concepts\u002F2.jobs","i-ph-infinity",{"title":50,"path":51,"stem":52,"icon":53},"Routing","\u002Fconcepts\u002Frouting","2.concepts\u002F3.routing","i-ph-path",{"title":55,"path":56,"stem":57,"icon":58},"Security model","\u002Fconcepts\u002Fsecurity","2.concepts\u002F4.security","i-ph-shield-check",{"title":60,"path":61,"stem":62,"icon":63},"Tenants","\u002Fconcepts\u002Ftenants","2.concepts\u002F5.tenants","i-ph-buildings",{"title":65,"path":66,"stem":67,"icon":68},"Temporal","\u002Fconcepts\u002Ftemporal","2.concepts\u002F6.temporal","i-ph-clock",{"title":70,"icon":6,"path":71,"stem":72,"children":73,"page":6},"Run a fleet","\u002Ffleet","3.fleet",[74,79,84,89,94,99,104],{"title":75,"path":76,"stem":77,"icon":78},"Dev mode","\u002Ffleet\u002Fdev-mode","3.fleet\u002F1.dev-mode","i-ph-laptop",{"title":80,"path":81,"stem":82,"icon":83},"Run a cluster","\u002Ffleet\u002Fcluster","3.fleet\u002F2.cluster","i-ph-hard-drives",{"title":85,"path":86,"stem":87,"icon":88},"Join nodes","\u002Ffleet\u002Fjoin-nodes","3.fleet\u002F3.join-nodes","i-ph-plugs-connected",{"title":90,"path":91,"stem":92,"icon":93},"Manage nodes","\u002Ffleet\u002Fmanage-nodes","3.fleet\u002F4.manage-nodes","i-ph-list-bullets",{"title":95,"path":96,"stem":97,"icon":98},"Secrets","\u002Ffleet\u002Fsecrets","3.fleet\u002F5.secrets","i-ph-key",{"title":100,"path":101,"stem":102,"icon":103},"High availability","\u002Ffleet\u002Fhigh-availability","3.fleet\u002F6.high-availability","i-ph-copy",{"title":105,"path":106,"stem":107,"icon":108},"Upgrades, backups and restores","\u002Ffleet\u002Fupgrades","3.fleet\u002F7.upgrades","i-ph-arrows-clockwise",{"title":110,"icon":6,"path":111,"stem":112,"children":113,"page":6},"Use plugins","\u002Fplugins","4.plugins",[114,119,124,128],{"title":115,"path":116,"stem":117,"icon":118},"What a plugin is","\u002Fplugins\u002Foverview","4.plugins\u002F1.overview","i-ph-puzzle-piece",{"title":120,"path":121,"stem":122,"icon":123},"Install and update","\u002Fplugins\u002Finstall","4.plugins\u002F2.install","i-ph-package",{"title":125,"path":126,"stem":127,"icon":123},"Existing MCP packages","\u002Fplugins\u002Fpackages","4.plugins\u002F3.packages",{"title":129,"path":130,"stem":131,"icon":132},"The catalog","\u002Fplugins\u002Fcatalog","4.plugins\u002F4.catalog","i-ph-books",{"title":134,"icon":6,"path":135,"stem":136,"children":137,"page":6},"Build plugins","\u002Fbuild-plugins","5.build-plugins",[138,143,148,153,158,163,168,173,178,183,188],{"title":139,"path":140,"stem":141,"icon":142},"Your first plugin","\u002Fbuild-plugins\u002Ffirst-plugin","5.build-plugins\u002F1.first-plugin","i-ph-hammer",{"title":144,"path":145,"stem":146,"icon":147},"Harnesses","\u002Fbuild-plugins\u002Fharnesses","5.build-plugins\u002F10.harnesses","i-ph-cpu",{"title":149,"path":150,"stem":151,"icon":152},"Example: support triage","\u002Fbuild-plugins\u002Fexample-support-triage","5.build-plugins\u002F11.example-support-triage","i-ph-lifebuoy",{"title":154,"path":155,"stem":156,"icon":157},"Tools","\u002Fbuild-plugins\u002Ftools","5.build-plugins\u002F2.tools","i-ph-wrench",{"title":159,"path":160,"stem":161,"icon":162},"Agents","\u002Fbuild-plugins\u002Fagents","5.build-plugins\u002F3.agents","i-ph-robot",{"title":164,"path":165,"stem":166,"icon":167},"Skills","\u002Fbuild-plugins\u002Fskills","5.build-plugins\u002F4.skills","i-ph-graduation-cap",{"title":169,"path":170,"stem":171,"icon":172},"Develop and test","\u002Fbuild-plugins\u002Fdevelop-and-test","5.build-plugins\u002F5.develop-and-test","i-ph-flask",{"title":174,"path":175,"stem":176,"icon":177},"Publish and version","\u002Fbuild-plugins\u002Fpublish","5.build-plugins\u002F6.publish","i-ph-tag",{"title":179,"path":180,"stem":181,"icon":182},"Hooks","\u002Fbuild-plugins\u002Fhooks","5.build-plugins\u002F7.hooks","i-ph-anchor",{"title":184,"path":185,"stem":186,"icon":187},"Flows","\u002Fbuild-plugins\u002Fflows","5.build-plugins\u002F8.flows","i-ph-flow-arrow",{"title":189,"path":190,"stem":191,"icon":192},"Evals and quality gates","\u002Fbuild-plugins\u002Fevals","5.build-plugins\u002F9.evals","i-ph-seal-check",{"title":194,"icon":6,"path":195,"stem":196,"children":197,"page":6},"Run agents","\u002Fagents","6.agents",[198,203,208,213,218,223],{"title":199,"path":200,"stem":201,"icon":202},"Run jobs","\u002Fagents\u002Frun-jobs","6.agents\u002F1.run-jobs","i-ph-play",{"title":204,"path":205,"stem":206,"icon":207},"Models and keys","\u002Fagents\u002Fmodels-and-keys","6.agents\u002F2.models-and-keys","i-ph-sparkle",{"title":209,"path":210,"stem":211,"icon":212},"Delegation","\u002Fagents\u002Fdelegation","6.agents\u002F3.delegation","i-ph-git-fork",{"title":214,"path":215,"stem":216,"icon":217},"Contracts and limits","\u002Fagents\u002Fcontracts-and-limits","6.agents\u002F4.contracts-and-limits","i-ph-ruler",{"title":219,"path":220,"stem":221,"icon":222},"Runtime API","\u002Fagents\u002Fruntime-api","6.agents\u002F5.runtime-api","i-ph-plug",{"title":224,"path":225,"stem":226,"icon":227},"Approvals","\u002Fagents\u002Fapprovals","6.agents\u002F6.approvals","i-ph-hand-palm",{"title":229,"icon":6,"path":230,"stem":231,"children":232,"page":6},"Monitor","\u002Fmonitor","7.monitor",[233,238,243,248,253,258],{"title":234,"path":235,"stem":236,"icon":237},"Web UI","\u002Fmonitor\u002Fweb-ui","7.monitor\u002F0.web-ui","i-ph-monitor",{"title":239,"path":240,"stem":241,"icon":242},"Cost and usage","\u002Fmonitor\u002Fcost-and-usage","7.monitor\u002F1.cost-and-usage","i-ph-coins",{"title":244,"path":245,"stem":246,"icon":247},"Node health","\u002Fmonitor\u002Fnodes","7.monitor\u002F2.nodes","i-ph-heartbeat",{"title":249,"path":250,"stem":251,"icon":252},"Job history","\u002Fmonitor\u002Fhistory","7.monitor\u002F3.history","i-ph-clock-counter-clockwise",{"title":254,"path":255,"stem":256,"icon":257},"Tracing and metrics","\u002Fmonitor\u002Fobservability","7.monitor\u002F4.observability","i-ph-chart-line",{"title":259,"path":260,"stem":261,"icon":152},"Troubleshooting","\u002Fmonitor\u002Ftroubleshooting","7.monitor\u002F5.troubleshooting",{"title":263,"icon":6,"path":264,"stem":265,"children":266,"page":6},"Reference","\u002Freference","8.reference",[267,281,286,290,295,300],{"title":268,"icon":269,"path":270,"stem":271,"children":272,"page":6},"CLI","i-ph-terminal-window","\u002Freference\u002Fcli","8.reference\u002F1.cli",[273,277],{"title":274,"path":275,"stem":276},"orchestrator-zero","\u002Freference\u002Fcli\u002Forchestrator-zero","8.reference\u002F1.cli\u002F1.orchestrator-zero",{"title":278,"path":279,"stem":280},"orchestrator-zero-node","\u002Freference\u002Fcli\u002Forchestrator-zero-node","8.reference\u002F1.cli\u002F2.orchestrator-zero-node",{"title":282,"path":283,"stem":284,"icon":285},"oz0-plugin.yaml","\u002Freference\u002Fplugin-manifest","8.reference\u002F2.plugin-manifest","i-ph-file-code",{"title":287,"path":288,"stem":289,"icon":162},"Agent definition","\u002Freference\u002Fagent-definition","8.reference\u002F3.agent-definition",{"title":291,"path":292,"stem":293,"icon":294},"Ports","\u002Freference\u002Fports","8.reference\u002F4.ports","i-ph-network",{"title":296,"path":297,"stem":298,"icon":299},"Environment variables","\u002Freference\u002Fenvironment","8.reference\u002F5.environment","i-ph-brackets-curly",{"title":301,"path":302,"stem":303,"icon":304},"Files and directories","\u002Freference\u002Ffiles","8.reference\u002F6.files","i-ph-tree-structure",{"title":306,"icon":6,"path":307,"stem":308,"children":309,"page":6},"About","\u002Fabout","9.about",[310,315],{"title":311,"path":312,"stem":313,"icon":314},"Licensing","\u002Fabout\u002Flicensing","9.about\u002F1.licensing","i-ph-scales",{"title":316,"path":317,"stem":318,"icon":319},"About these docs","\u002Fabout\u002Fcontributing-docs","9.about\u002F2.contributing-docs","i-ph-pencil-simple",{"id":321,"title":80,"body":322,"description":748,"extension":749,"links":750,"meta":751,"navigation":752,"path":81,"seo":753,"stem":82,"__hash__":754},"docs\u002F3.fleet\u002F2.cluster.md",{"type":323,"value":324,"toc":738},"minimark",[325,333,338,368,627,631,634,649,655,658,696,709,713,716,720,734],[326,327,328,329,332],"p",{},"A cluster is one or more ",[330,331,274],"code",{}," servers sharing one PostgreSQL server. Each server runs every role, management, edge and Temporal, in one process. Servers find each other through the database; there is no seed list to maintain.",[334,335,337],"h2",{"id":336},"what-you-need","What you need",[339,340,341,349,359,365],"ul",{},[342,343,344,348],"li",{},[345,346,347],"strong",{},"PostgreSQL 13 to 16,"," reachable from every server. The user in the URL should be allowed to create databases; otherwise create the three databases yourself (see below).",[342,350,351,354,355,358],{},[330,352,353],{},"max_connections"," of at least ",[345,356,357],{},"100 per server."," Temporal opens a connection pool per service and store.",[342,360,361,362,364],{},"The ",[330,363,274],{}," binary on every server, and a copy of the master key file once it exists.",[342,366,367],{},"Open ports between servers: 7234 to 7236 and 7239 (Temporal gRPC), 6933 to 6935 and 6939 (Temporal membership). Nodes need 7233 and 7443; operators need 8443.",[369,370,372,376,450,468,524,528,531,535,538,579,589,593,621],"steps",{"level":371},"2",[334,373,375],{"id":374},"create-the-cluster-once","Create the cluster once",[377,378,384],"pre",{"className":379,"code":380,"filename":381,"language":382,"meta":383,"style":383},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","export OZ0_DB='postgres:\u002F\u002Foz0:\u003Cpassword>@db.internal:5432\u002Foz0?sslmode=require'\norchestrator-zero server init --cluster-name prod-eu --history-shards 1024 \\\n  --master-key-out \u002Fetc\u002Forchestrator-zero\u002Fmaster.key\n","Terminal","bash","",[330,385,386,413,441],{"__ignoreMap":383},[387,388,391,395,399,403,406,410],"span",{"class":389,"line":390},"line",1,[387,392,394],{"class":393},"spNyl","export",[387,396,398],{"class":397},"sTEyZ"," OZ0_DB",[387,400,402],{"class":401},"sMK4o","=",[387,404,405],{"class":401},"'",[387,407,409],{"class":408},"sfazB","postgres:\u002F\u002Foz0:\u003Cpassword>@db.internal:5432\u002Foz0?sslmode=require",[387,411,412],{"class":401},"'\n",[387,414,416,419,422,425,428,431,434,438],{"class":389,"line":415},2,[387,417,274],{"class":418},"sBMFI",[387,420,421],{"class":408}," server",[387,423,424],{"class":408}," init",[387,426,427],{"class":408}," --cluster-name",[387,429,430],{"class":408}," prod-eu",[387,432,433],{"class":408}," --history-shards",[387,435,437],{"class":436},"sbssI"," 1024",[387,439,440],{"class":397}," \\\n",[387,442,444,447],{"class":389,"line":443},3,[387,445,446],{"class":408},"  --master-key-out",[387,448,449],{"class":408}," \u002Fetc\u002Forchestrator-zero\u002Fmaster.key\n",[326,451,452,455,456,459,460,463,464,467],{},[330,453,454],{},"server init"," creates three databases, named after the one in the URL (",[330,457,458],{},"oz0",", ",[330,461,462],{},"oz0_temporal"," and ",[330,465,466],{},"oz0_temporal_visibility","), applies Temporal's schema migrations and ours, and creates:",[339,469,470,476,482,492,505],{},[342,471,472,475],{},[345,473,474],{},"The master key file."," Back it up and keep it secret. Every server needs a copy; without it the cluster's CAs and secrets cannot be unsealed and the cluster is lost.",[342,477,478,481],{},[345,479,480],{},"Two certificate authorities,"," sealed with the master key and stored in the database: the cluster CA (nodes, operators and the edge's ports) and the internode CA (only Temporal's traffic between servers).",[342,483,484,487,488,491],{},[345,485,486],{},"The first tenant,"," ",[330,489,490],{},"default",", with a Temporal namespace of the same name.",[342,493,494,487,497,500,501,504],{},[345,495,496],{},"The first operator,",[330,498,499],{},"admin",", whose certificate and CLI context go to ",[330,502,503],{},"~\u002F.config\u002Forchestrator-zero\u002F\u003Ccluster>\u002F",".",[342,506,507,510,511,513,514,516,517,520,521,504],{},[345,508,509],{},"The web UI's first account,"," also ",[330,512,499],{},", with a generated password that ",[330,515,454],{}," prints once. Sign in at ",[330,518,519],{},"https:\u002F\u002F\u003Cserver>:8443","; see ",[522,523,234],"a",{"href":235},[334,525,527],{"id":526},"choose-the-history-shards-carefully","Choose the history shards carefully",[326,529,530],{},"The number of Temporal history shards can never change. 1024 suits a cluster that may grow to thousands of state transitions per second; small clusters can use 64 or 128.",[334,532,534],{"id":533},"start-the-servers","Start the servers",[326,536,537],{},"On each server, with the same database URL and a copy of the master key:",[377,539,541],{"className":379,"code":540,"filename":381,"language":382,"meta":383,"style":383},"export OZ0_DB='postgres:\u002F\u002F...'\norchestrator-zero server start --master-key-file \u002Fetc\u002Forchestrator-zero\u002Fmaster.key --advertise 10.0.0.11\n",[330,542,543,558],{"__ignoreMap":383},[387,544,545,547,549,551,553,556],{"class":389,"line":390},[387,546,394],{"class":393},[387,548,398],{"class":397},[387,550,402],{"class":401},[387,552,405],{"class":401},[387,554,555],{"class":408},"postgres:\u002F\u002F...",[387,557,412],{"class":401},[387,559,560,562,564,567,570,573,576],{"class":389,"line":415},[387,561,274],{"class":418},[387,563,421],{"class":408},[387,565,566],{"class":408}," start",[387,568,569],{"class":408}," --master-key-file",[387,571,572],{"class":408}," \u002Fetc\u002Forchestrator-zero\u002Fmaster.key",[387,574,575],{"class":408}," --advertise",[387,577,578],{"class":436}," 10.0.0.11\n",[326,580,581,584,585,588],{},[330,582,583],{},"--advertise"," is the address other servers and nodes reach this server on. Add ",[330,586,587],{},"--san edge.example.com"," for every extra name nodes use to reach the edge, such as a load balancer.",[334,590,592],{"id":591},"point-the-cli-at-the-cluster","Point the CLI at the cluster",[377,594,596],{"className":379,"code":595,"filename":381,"language":382,"meta":383,"style":383},"export OZ0_CONTEXT=~\u002F.config\u002Forchestrator-zero\u002Fprod-eu\u002Fcontext.json\norchestrator-zero cluster info\n",[330,597,598,611],{"__ignoreMap":383},[387,599,600,602,605,608],{"class":389,"line":390},[387,601,394],{"class":393},[387,603,604],{"class":397}," OZ0_CONTEXT",[387,606,607],{"class":401},"=~",[387,609,610],{"class":397},"\u002F.config\u002Forchestrator-zero\u002Fprod-eu\u002Fcontext.json\n",[387,612,613,615,618],{"class":389,"line":415},[387,614,274],{"class":418},[387,616,617],{"class":408}," cluster",[387,619,620],{"class":408}," info\n",[326,622,623,626],{},[330,624,625],{},"cluster info"," shows the cluster's name, its CA hash and the servers that are up.",[334,628,630],{"id":629},"operator-certificates","Operator certificates",[326,632,633],{},"An operator's certificate is valid for 90 days. Commands warn on stderr when it has less than 15 days left. Renew it while it works:",[377,635,637],{"className":379,"code":636,"filename":381,"language":382,"meta":383,"style":383},"orchestrator-zero operator renew\n",[330,638,639],{"__ignoreMap":383},[387,640,641,643,646],{"class":389,"line":390},[387,642,274],{"class":418},[387,644,645],{"class":408}," operator",[387,647,648],{"class":408}," renew\n",[326,650,651,652,504],{},"The CLI makes a new key, the cluster signs a certificate for it, and both replace the ones in the context's directory. The audit log records it as ",[330,653,654],{},"operator.renew",[326,656,657],{},"An operator whose certificate expired or was lost gets new credentials on a server's machine, from the database and the master key. The command also adds an operator the cluster does not have yet:",[377,659,661],{"className":379,"code":660,"filename":381,"language":382,"meta":383,"style":383},"orchestrator-zero server operator issue admin --master-key-file \u002Fetc\u002Forchestrator-zero\u002Fmaster.key \\\n  --operator-dir ~\u002F.config\u002Forchestrator-zero\u002Fprod-eu --advertise oz0.example.com\n",[330,662,663,683],{"__ignoreMap":383},[387,664,665,667,669,671,674,677,679,681],{"class":389,"line":390},[387,666,274],{"class":418},[387,668,421],{"class":408},[387,670,645],{"class":408},[387,672,673],{"class":408}," issue",[387,675,676],{"class":408}," admin",[387,678,569],{"class":408},[387,680,572],{"class":408},[387,682,440],{"class":397},[387,684,685,688,691,693],{"class":389,"line":415},[387,686,687],{"class":408},"  --operator-dir",[387,689,690],{"class":408}," ~\u002F.config\u002Forchestrator-zero\u002Fprod-eu",[387,692,575],{"class":408},[387,694,695],{"class":408}," oz0.example.com\n",[326,697,698,699,702,703,705,706,504],{},"A context already in ",[330,700,701],{},"--operator-dir"," keeps its addresses; a new one points at ",[330,704,583],{},". Whoever can run it is trusted like a server, since it reads the master key. For a dev server, use ",[330,707,708],{},"--dev --data-dir \u003Cdir>",[334,710,712],{"id":711},"keys-stay-in-memory","Keys stay in memory",[326,714,715],{},"Each server issues itself certificates from the cluster's CAs at start and renews them every day, in memory. No server key is written to disk; holding the master key is what makes a machine a server.",[334,717,719],{"id":718},"next","Next",[339,721,722,726,730],{},[342,723,724],{},[522,725,85],{"href":86},[342,727,728],{},[522,729,100],{"href":101},[342,731,732],{},[522,733,105],{"href":106},[735,736,737],"style",{},"html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":383,"searchDepth":415,"depth":415,"links":739},[740,741,742,743,744,745,746,747],{"id":336,"depth":415,"text":337},{"id":374,"depth":415,"text":375},{"id":526,"depth":415,"text":527},{"id":533,"depth":415,"text":534},{"id":591,"depth":415,"text":592},{"id":629,"depth":415,"text":630},{"id":711,"depth":415,"text":712},{"id":718,"depth":415,"text":719},"Servers on PostgreSQL: create the cluster once, then start as many servers as you need.","md",null,{},{"icon":83},{"title":80,"description":748},"qWa-TmshQWTqFf06MjKtKFR1WGABqJ-fAKoDRfUXVnY",[756,758],{"title":75,"path":76,"stem":77,"description":757,"icon":78,"children":-1},"One server on SQLite, with the same APIs and security as a cluster.",{"title":85,"path":86,"stem":87,"description":759,"icon":88,"children":-1},"Turn any machine into a node, with a join token or by approval.",1791135406265]