[{"data":1,"prerenderedAt":970},["ShallowReactive",2],{"navigation_docs_en":3,"-en-guides-horizontal-scaling":309,"-en-guides-horizontal-scaling-surround":965},[4,30,72,112,195,299],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":6},"Getting Started",false,"\u002Fen\u002Fgetting-started","en\u002F1.getting-started",[10,15,20,25],{"title":11,"path":12,"stem":13,"icon":14},"Introduction","\u002Fen\u002Fgetting-started\u002Fintroduction","en\u002F1.getting-started\u002F2.introduction","i-lucide-house",{"title":16,"path":17,"stem":18,"icon":19},"Quickstart","\u002Fen\u002Fgetting-started\u002Finstallation","en\u002F1.getting-started\u002F3.installation","i-lucide-download",{"title":21,"path":22,"stem":23,"icon":24},"Use Cases","\u002Fen\u002Fgetting-started\u002Fuse-cases","en\u002F1.getting-started\u002F4.use-cases","i-lucide-layers",{"title":26,"path":27,"stem":28,"icon":29},"Concepts","\u002Fen\u002Fgetting-started\u002Fconcepts","en\u002F1.getting-started\u002F5.concepts","i-lucide-book",{"title":26,"path":31,"stem":32,"children":33,"page":6},"\u002Fen\u002Fconcepts","en\u002F2.concepts",[34,38,43,48,53,58,63,68],{"title":35,"path":36,"stem":37,"icon":14},"Organization","\u002Fen\u002Fconcepts\u002Forganization","en\u002F2.concepts\u002F1.organization",{"title":39,"path":40,"stem":41,"icon":42},"Data Model","\u002Fen\u002Fconcepts\u002Fdata-model","en\u002F2.concepts\u002F2.data-model","i-lucide-database",{"title":44,"path":45,"stem":46,"icon":47},"Access Control","\u002Fen\u002Fconcepts\u002Faccess-permissions","en\u002F2.concepts\u002F3.access-permissions","i-lucide-user-key",{"title":49,"path":50,"stem":51,"icon":52},"Audit Logs","\u002Fen\u002Fconcepts\u002Faudit-logs","en\u002F2.concepts\u002F4.audit-logs","i-lucide-scroll-text",{"title":54,"path":55,"stem":56,"icon":57},"Introspection","\u002Fen\u002Fconcepts\u002Fintrospection","en\u002F2.concepts\u002F6.introspection","i-lucide-database-search",{"title":59,"path":60,"stem":61,"icon":62},"Query Engine","\u002Fen\u002Fconcepts\u002Fquery-engine","en\u002F2.concepts\u002F7.query-engine","i-lucide-workflow",{"title":64,"path":65,"stem":66,"icon":67},"AI","\u002Fen\u002Fconcepts\u002Fai","en\u002F2.concepts\u002F8.ai","i-lucide-sparkles",{"title":69,"path":70,"stem":71,"icon":42},"Caching","\u002Fen\u002Fconcepts\u002Fcaching","en\u002F2.concepts\u002F9.caching",{"title":73,"path":74,"stem":75,"children":76,"page":6},"Guides","\u002Fen\u002Fguides","en\u002F4.guides",[77,82,87,92,97,102,107],{"title":78,"path":79,"stem":80,"icon":81},"REST API Quickstart","\u002Fen\u002Fguides\u002Frest-api","en\u002F4.guides\u002F1.rest-api","i-lucide-plug",{"title":83,"path":84,"stem":85,"icon":86},"SDK Quickstart","\u002Fen\u002Fguides\u002Fsdk","en\u002F4.guides\u002F2.sdk","i-lucide-terminal",{"title":88,"path":89,"stem":90,"icon":91},"Configure SSO","\u002Fen\u002Fguides\u002Fconfigure-sso","en\u002F4.guides\u002F3.configure-sso","i-lucide-key-round",{"title":93,"path":94,"stem":95,"icon":96},"Configure MCP","\u002Fen\u002Fguides\u002Fmcp","en\u002F4.guides\u002F4.mcp","i-lucide-brain-cog",{"title":98,"path":99,"stem":100,"icon":101},"Customize Content Space","\u002Fen\u002Fguides\u002Fcustomize-content-space","en\u002F4.guides\u002F5.customize-content-space","i-lucide-columns-3-cog",{"title":103,"path":104,"stem":105,"icon":106},"Build an Application with AI Assistance","\u002Fen\u002Fguides\u002Fbuild-an-application","en\u002F4.guides\u002F6.build-an-application","i-lucide-route",{"title":108,"path":109,"stem":110,"icon":111},"Horizontal Scaling","\u002Fen\u002Fguides\u002Fhorizontal-scaling","en\u002F4.guides\u002F7.horizontal-scaling","i-lucide-network",{"title":113,"path":114,"stem":115,"children":116,"page":6},"Developer","\u002Fen\u002Fdeveloper","en\u002F5.developer",[117,171],{"title":118,"path":119,"stem":120,"children":121,"page":6},"Data Access","\u002Fen\u002Fdeveloper\u002Fapi","en\u002F5.developer\u002F1.api",[122,127,132,137,142,147,152,157,162,166],{"title":123,"path":124,"stem":125,"icon":126},"Overview","\u002Fen\u002Fdeveloper\u002Fapi\u002Foverview","en\u002F5.developer\u002F1.api\u002F1.overview","i-lucide-globe",{"title":128,"path":129,"stem":130,"icon":131},"Errors","\u002Fen\u002Fdeveloper\u002Fapi\u002Ferrors","en\u002F5.developer\u002F1.api\u002F10.errors","i-lucide-alert-triangle",{"title":133,"path":134,"stem":135,"icon":136},"Authentication","\u002Fen\u002Fdeveloper\u002Fapi\u002Fauthentication","en\u002F5.developer\u002F1.api\u002F2.authentication","i-lucide-lock",{"title":138,"path":139,"stem":140,"icon":141},"Reading Data","\u002Fen\u002Fdeveloper\u002Fapi\u002Freading-data","en\u002F5.developer\u002F1.api\u002F3.reading-data","i-lucide-book-open",{"title":143,"path":144,"stem":145,"icon":146},"Writing Data","\u002Fen\u002Fdeveloper\u002Fapi\u002Fwriting-data","en\u002F5.developer\u002F1.api\u002F4.writing-data","i-lucide-pencil",{"title":148,"path":149,"stem":150,"icon":151},"Filtering","\u002Fen\u002Fdeveloper\u002Fapi\u002Ffiltering","en\u002F5.developer\u002F1.api\u002F5.filtering","i-lucide-filter",{"title":153,"path":154,"stem":155,"icon":156},"Field Selection","\u002Fen\u002Fdeveloper\u002Fapi\u002Ffield-selection","en\u002F5.developer\u002F1.api\u002F6.field-selection","i-lucide-list-checks",{"title":158,"path":159,"stem":160,"icon":161},"Sorting & Pagination","\u002Fen\u002Fdeveloper\u002Fapi\u002Fsorting-pagination","en\u002F5.developer\u002F1.api\u002F7.sorting-pagination","i-lucide-arrow-up-down",{"title":163,"path":164,"stem":165,"icon":111},"Relational Data","\u002Fen\u002Fdeveloper\u002Fapi\u002Frelational-data","en\u002F5.developer\u002F1.api\u002F8.relational-data",{"title":167,"path":168,"stem":169,"icon":170},"Files & Assets","\u002Fen\u002Fdeveloper\u002Fapi\u002Ffiles","en\u002F5.developer\u002F1.api\u002F9.files","i-lucide-file-up",{"title":172,"path":173,"stem":174,"children":175,"page":6},"Client SDK","\u002Fen\u002Fdeveloper\u002Fsdk","en\u002F5.developer\u002F2.sdk",[176,180,185,190],{"title":177,"path":178,"stem":179,"icon":19},"Installation","\u002Fen\u002Fdeveloper\u002Fsdk\u002Finstallation","en\u002F5.developer\u002F2.sdk\u002F1.installation",{"title":181,"path":182,"stem":183,"icon":184},"Client Setup","\u002Fen\u002Fdeveloper\u002Fsdk\u002Fclient-setup","en\u002F5.developer\u002F2.sdk\u002F2.client-setup","i-lucide-settings",{"title":186,"path":187,"stem":188,"icon":189},"Type System","\u002Fen\u002Fdeveloper\u002Fsdk\u002Ftype-system","en\u002F5.developer\u002F2.sdk\u002F3.type-system","i-lucide-braces",{"title":191,"path":192,"stem":193,"icon":194},"Advanced","\u002Fen\u002Fdeveloper\u002Fsdk\u002Fadvanced","en\u002F5.developer\u002F2.sdk\u002F5.advanced","i-lucide-puzzle",{"title":196,"path":197,"stem":198,"children":199,"page":6},"Reference","\u002Fen\u002Freference","en\u002F6.reference",[200,204,209,225,229,234,270],{"title":201,"path":202,"stem":203,"icon":184},"Configuration","\u002Fen\u002Freference\u002Fenvironment-variables","en\u002F6.reference\u002F1.environment-variables",{"title":205,"path":206,"stem":207,"icon":208},"System Requirements","\u002Fen\u002Freference\u002Fsystem-requirements","en\u002F6.reference\u002F2.system-requirements","i-lucide-server",{"title":210,"path":211,"stem":212,"children":213,"icon":81},"Connectors","\u002Fen\u002Freference\u002Fconnectors","en\u002F6.reference\u002F3.connectors\u002Findex",[214,215,220],{"title":210,"path":211,"stem":212,"icon":81},{"title":216,"path":217,"stem":218,"icon":219},"PostgreSQL and Supabase","\u002Fen\u002Freference\u002Fconnectors\u002Fpostgresql-supabase","en\u002F6.reference\u002F3.connectors\u002F1.postgresql-supabase","i-simple-icons-postgresql",{"title":221,"path":222,"stem":223,"icon":224},"MySQL and MariaDB","\u002Fen\u002Freference\u002Fconnectors\u002Fmysql-mariadb","en\u002F6.reference\u002F3.connectors\u002F2.mysql-mariadb","i-simple-icons-mysql",{"title":226,"path":227,"stem":228,"icon":189},"Data Types Representation","\u002Fen\u002Freference\u002Fdata-types","en\u002F6.reference\u002F4.data-types",{"title":230,"path":231,"stem":232,"icon":233},"Permissions Reference","\u002Fen\u002Freference\u002Fpermissions","en\u002F6.reference\u002F5.permissions","i-lucide-shield",{"title":235,"path":236,"stem":237,"children":238,"page":6},"API Reference","\u002Fen\u002Freference\u002Fapi-reference","en\u002F6.reference\u002F6.api-reference",[239,243,248],{"title":240,"path":241,"stem":242,"icon":208},"System Endpoints","\u002Fen\u002Freference\u002Fapi-reference\u002Fsystem-endpoints","en\u002F6.reference\u002F6.api-reference\u002F1.system-endpoints",{"title":244,"path":245,"stem":246,"icon":247},"OpenAPI Spec","\u002Fen\u002Freference\u002Fapi-reference\u002Fopenapi-spec","en\u002F6.reference\u002F6.api-reference\u002F2.openapi-spec","i-lucide-file-code",{"title":249,"path":250,"stem":251,"children":252,"icon":254},"Schema Migration","\u002Fen\u002Freference\u002Fapi-reference\u002Fschema-migration","en\u002F6.reference\u002F6.api-reference\u002F3.schema-migration\u002Findex",[253,255,260,265],{"title":249,"path":250,"stem":251,"icon":254},"i-lucide-database-zap",{"title":256,"path":257,"stem":258,"icon":259},"Apply Migrations","\u002Fen\u002Freference\u002Fapi-reference\u002Fschema-migration\u002Fapply-migrations","en\u002F6.reference\u002F6.api-reference\u002F3.schema-migration\u002F1.apply-migrations","i-lucide-upload",{"title":261,"path":262,"stem":263,"icon":264},"Import Changes","\u002Fen\u002Freference\u002Fapi-reference\u002Fschema-migration\u002Fimport-changes","en\u002F6.reference\u002F6.api-reference\u002F3.schema-migration\u002F2.import-changes","i-lucide-refresh-cw",{"title":266,"path":267,"stem":268,"icon":269},"Operation Reference","\u002Fen\u002Freference\u002Fapi-reference\u002Fschema-migration\u002Foperation-reference","en\u002F6.reference\u002F6.api-reference\u002F3.schema-migration\u002F3.operation-reference","i-lucide-list-tree",{"title":271,"path":272,"stem":273,"children":274,"page":6},"Design Considerations","\u002Fen\u002Freference\u002Fdesign-considerations","en\u002F6.reference\u002F7.design-considerations",[275,279,284,289,294],{"title":123,"path":276,"stem":277,"icon":278},"\u002Fen\u002Freference\u002Fdesign-considerations\u002Foverview","en\u002F6.reference\u002F7.design-considerations\u002F1.overview","i-lucide-compass",{"title":280,"path":281,"stem":282,"icon":283},"Instance Configuration","\u002Fen\u002Freference\u002Fdesign-considerations\u002Finstance-configuration-related-problems","en\u002F6.reference\u002F7.design-considerations\u002F3.instance-configuration-related-problems","i-lucide-wrench",{"title":285,"path":286,"stem":287,"icon":288},"Overly Permissive Public Access","\u002Fen\u002Freference\u002Fdesign-considerations\u002Foverly-permissive","en\u002F6.reference\u002F7.design-considerations\u002F4.overly-permissive","i-lucide-shield-off",{"title":290,"path":291,"stem":292,"icon":293},"No Aggregates","\u002Fen\u002Freference\u002Fdesign-considerations\u002Fno-aggregates","en\u002F6.reference\u002F7.design-considerations\u002F5.no-aggregates","i-lucide-sigma",{"title":295,"path":296,"stem":297,"icon":298},"Cross-Data-Source Referential Integrity","\u002Fen\u002Freference\u002Fdesign-considerations\u002Fcross-data-source-referential-integrity","en\u002F6.reference\u002F7.design-considerations\u002F6.cross-data-source-referential-integrity","i-lucide-unlink",{"title":300,"icon":301,"path":302,"stem":303,"children":304,"page":6},"Release Notes","i-lucide-rocket","\u002Fen\u002Frelease-notes","en\u002F7.release-notes",[305],{"title":306,"path":307,"stem":308,"icon":301},"Changelog","\u002Fen\u002Frelease-notes\u002Fchangelog","en\u002F7.release-notes\u002F1.changelog",{"id":310,"title":108,"body":311,"description":958,"extension":959,"links":960,"meta":961,"navigation":962,"path":109,"seo":963,"stem":110,"__hash__":964},"docs_en\u002Fen\u002F4.guides\u002F7.horizontal-scaling.md",{"type":312,"value":313,"toc":944},"minimark",[314,318,322,325,329,379,382,394,397,400,404,407,410,547,550,624,628,632,635,772,784,795,799,802,849,852,858,862,866,883,886,891,895,898,901,904,908,915,919,940],[315,316,123],"h2",{"id":317},"overview",[319,320,321],"p",{},"Monospace runs in clustered mode by default. Clustered mode runs several replicas against one\nsystem database. Each replica can serve API requests; distribute traffic across ready replicas with a load balancer.",[319,323,324],{},"The replica that handles a change to your data model applies it immediately. The other replicas\nfollow after a short delay.",[315,326,328],{"id":327},"what-clustered-mode-requires","What Clustered Mode Requires",[330,331,332,345],"table",{},[333,334,335],"thead",{},[336,337,338,342],"tr",{},[339,340,341],"th",{},"Component",[339,343,344],{},"Requirement",[346,347,348,357,365],"tbody",{},[336,349,350,354],{},[351,352,353],"td",{},"System database",[351,355,356],{},"PostgreSQL. Replicas coordinate through it.",[336,358,359,362],{},[351,360,361],{},"Event bus",[351,363,364],{},"RabbitMQ, reachable from every replica.",[336,366,367,370],{},[351,368,369],{},"File storage",[351,371,372,373,378],{},"S3-compatible storage, or a local path marked as shared. See ",[374,375,377],"a",{"href":376},"#file-storage","File Storage",".",[319,380,381],{},"A replica that fails a requirement does not start. Its logs name the unmet requirement.\nFor example, a replica with no RabbitMQ configuration logs this and exits:",[383,384,391],"pre",{"className":385,"code":387,"filename":388,"language":389,"meta":390},[386],"language-text","clustered mode requires RabbitMQ, but no `rabbitmq` config is set\n","logs","text","",[392,393,387],"code",{"__ignoreMap":390},[319,395,396],{},"Correct the configuration, then start the replica again.",[319,398,399],{},"Every replica needs the same configuration.",[401,402,377],"h3",{"id":403},"file-storage",[319,405,406],{},"Clustered mode accepts two file storage configurations: an S3-compatible bucket, or a local path\nmarked as shared. It rejects any other local path, because a file uploaded to one replica would be\nmissing on the others.",[319,408,409],{},"Point every replica at one S3-compatible bucket:",[411,412,413,482],"code-group",{},[383,414,419],{"className":415,"code":416,"filename":417,"language":418,"meta":390,"style":390},"language-bash shiki shiki-themes monospace-light monospace-light monospace-dark","MONOSPACE_SYSTEM_FILE_STORAGE__PROVIDER=s3\nMONOSPACE_SYSTEM_FILE_STORAGE__BUCKET=monospace-assets\nMONOSPACE_SYSTEM_FILE_STORAGE__REGION=eu-central-1\nMONOSPACE_SYSTEM_FILE_STORAGE__ACCESS_KEY_ID=YOUR_ACCESS_KEY_ID\nMONOSPACE_SYSTEM_FILE_STORAGE__SECRET_ACCESS_KEY=YOUR_SECRET_ACCESS_KEY\n",".env","bash",[392,420,421,438,449,460,471],{"__ignoreMap":390},[422,423,426,430,434],"span",{"class":424,"line":425},"line",1,[422,427,429],{"class":428},"sNJ9c","MONOSPACE_SYSTEM_FILE_STORAGE__PROVIDER",[422,431,433],{"class":432},"sLVBU","=",[422,435,437],{"class":436},"suKVh","s3\n",[422,439,441,444,446],{"class":424,"line":440},2,[422,442,443],{"class":428},"MONOSPACE_SYSTEM_FILE_STORAGE__BUCKET",[422,445,433],{"class":432},[422,447,448],{"class":436},"monospace-assets\n",[422,450,452,455,457],{"class":424,"line":451},3,[422,453,454],{"class":428},"MONOSPACE_SYSTEM_FILE_STORAGE__REGION",[422,456,433],{"class":432},[422,458,459],{"class":436},"eu-central-1\n",[422,461,463,466,468],{"class":424,"line":462},4,[422,464,465],{"class":428},"MONOSPACE_SYSTEM_FILE_STORAGE__ACCESS_KEY_ID",[422,467,433],{"class":432},[422,469,470],{"class":436},"YOUR_ACCESS_KEY_ID\n",[422,472,474,477,479],{"class":424,"line":473},5,[422,475,476],{"class":428},"MONOSPACE_SYSTEM_FILE_STORAGE__SECRET_ACCESS_KEY",[422,478,433],{"class":432},[422,480,481],{"class":436},"YOUR_SECRET_ACCESS_KEY\n",[383,483,488],{"className":484,"code":485,"filename":486,"language":487,"meta":390,"style":390},"language-yaml shiki shiki-themes monospace-light monospace-light monospace-dark","system_file_storage:\n  provider: s3\n  bucket: monospace-assets\n  region: eu-central-1\n  access_key_id: YOUR_ACCESS_KEY_ID\n  secret_access_key: YOUR_SECRET_ACCESS_KEY\n","config.yaml","yaml",[392,489,490,500,510,519,528,537],{"__ignoreMap":390},[422,491,492,496],{"class":424,"line":425},[422,493,495],{"class":494},"s3wuB","system_file_storage",[422,497,499],{"class":498},"sTMul",":\n",[422,501,502,505,508],{"class":424,"line":440},[422,503,504],{"class":494},"  provider",[422,506,507],{"class":498},": ",[422,509,437],{"class":436},[422,511,512,515,517],{"class":424,"line":451},[422,513,514],{"class":494},"  bucket",[422,516,507],{"class":498},[422,518,448],{"class":436},[422,520,521,524,526],{"class":424,"line":462},[422,522,523],{"class":494},"  region",[422,525,507],{"class":498},[422,527,459],{"class":436},[422,529,530,533,535],{"class":424,"line":473},[422,531,532],{"class":494},"  access_key_id",[422,534,507],{"class":498},[422,536,470],{"class":436},[422,538,540,543,545],{"class":424,"line":539},6,[422,541,542],{"class":494},"  secret_access_key",[422,544,507],{"class":498},[422,546,481],{"class":436},[319,548,549],{},"A network file system works too. Mount the same path on every replica, then mark it as shared:",[411,551,552,586],{},[383,553,555],{"className":415,"code":554,"filename":417,"language":418,"meta":390,"style":390},"MONOSPACE_SYSTEM_FILE_STORAGE__PROVIDER=local\nMONOSPACE_SYSTEM_FILE_STORAGE__ROOT_PATH=\u002Fmnt\u002Fmonospace-assets\nMONOSPACE_SYSTEM_FILE_STORAGE__SHARED=true\n",[392,556,557,566,576],{"__ignoreMap":390},[422,558,559,561,563],{"class":424,"line":425},[422,560,429],{"class":428},[422,562,433],{"class":432},[422,564,565],{"class":436},"local\n",[422,567,568,571,573],{"class":424,"line":440},[422,569,570],{"class":428},"MONOSPACE_SYSTEM_FILE_STORAGE__ROOT_PATH",[422,572,433],{"class":432},[422,574,575],{"class":436},"\u002Fmnt\u002Fmonospace-assets\n",[422,577,578,581,583],{"class":424,"line":451},[422,579,580],{"class":428},"MONOSPACE_SYSTEM_FILE_STORAGE__SHARED",[422,582,433],{"class":432},[422,584,585],{"class":436},"true\n",[383,587,589],{"className":484,"code":588,"filename":486,"language":487,"meta":390,"style":390},"system_file_storage:\n  provider: local\n  root_path: \u002Fmnt\u002Fmonospace-assets\n  shared: true\n",[392,590,591,597,605,614],{"__ignoreMap":390},[422,592,593,595],{"class":424,"line":425},[422,594,495],{"class":494},[422,596,499],{"class":498},[422,598,599,601,603],{"class":424,"line":440},[422,600,504],{"class":494},[422,602,507],{"class":498},[422,604,565],{"class":436},[422,606,607,610,612],{"class":424,"line":451},[422,608,609],{"class":494},"  root_path",[422,611,507],{"class":498},[422,613,575],{"class":436},[422,615,616,619,621],{"class":424,"line":462},[422,617,618],{"class":494},"  shared",[422,620,507],{"class":498},[422,622,585],{"class":623},"ssBNi",[625,626,627],"caution",{},"Mark a path as shared only when every replica mounts it. The flag turns off the startup check and\nnothing else; files on a private path remain unavailable to other replicas.",[315,629,631],{"id":630},"configure-clustered-mode","Configure Clustered Mode",[319,633,634],{},"Clustered mode is on by default. Every cluster setting is optional and falls back to its default:",[330,636,637,650],{},[333,638,639],{},[336,640,641,644,647],{},[339,642,643],{},"Setting",[339,645,646],{},"Default",[339,648,649],{},"Effect",[346,651,652,667,684,699,714,728,742,757],{},[336,653,654,659,664],{},[351,655,656],{},[392,657,658],{},"cluster.enabled",[351,660,661],{},[392,662,663],{},"true",[351,665,666],{},"Turns clustered mode and its startup validation on or off.",[336,668,669,674,677],{},[351,670,671],{},[392,672,673],{},"cluster.replica_id",[351,675,676],{},"unset",[351,678,679,680,683],{},"Names the replica in logs and health output. Falls back to ",[392,681,682],{},"HOSTNAME",", which container platforms typically set for you.",[336,685,686,691,696],{},[351,687,688],{},[392,689,690],{},"cluster.cache_reconcile_interval",[351,692,693],{},[392,694,695],{},"5m",[351,697,698],{},"How often a replica checks the system database for changes it has not applied yet. Lower it to shorten the catch-up delay.",[336,700,701,706,711],{},[351,702,703],{},[392,704,705],{},"cluster.cache_reload_timeout",[351,707,708],{},[392,709,710],{},"15s",[351,712,713],{},"How long a replica may fail to pick up changes before it reports itself unready.",[336,715,716,721,725],{},[351,717,718],{},[392,719,720],{},"cluster.startup_lock_timeout",[351,722,723],{},[392,724,695],{},[351,726,727],{},"During startup, how long a replica waits for another replica to finish migrating. Raise it for long migrations.",[336,729,730,735,739],{},[351,731,732],{},[392,733,734],{},"cluster.metadata_lock_timeout",[351,736,737],{},[392,738,710],{},[351,740,741],{},"How long a schema or settings write waits for a concurrent write to finish. Raise it when writes time out under load.",[336,743,744,749,754],{},[351,745,746],{},[392,747,748],{},"shutdown_drain_delay",[351,750,751],{},[392,752,753],{},"0s",[351,755,756],{},"How long the replica keeps accepting new requests after it reports itself unready. Raise it when requests still arrive after that point.",[336,758,759,764,769],{},[351,760,761],{},[392,762,763],{},"shutdown_grace_period",[351,765,766],{},[392,767,768],{},"30s",[351,770,771],{},"Total time from the shutdown signal to a forced exit. What remains after the drain delay is the time in-flight requests get to finish.",[319,773,774,776,777,779,780,783],{},[392,775,748],{}," and ",[392,778,763],{}," are top-level settings, not ",[392,781,782],{},"cluster"," settings.\nThey apply to a single-node deployment too.",[319,785,786,789,790,794],{},[374,787,201],{"href":788},"\u002Freference\u002Fenvironment-variables#clustering"," lists every cluster setting, and\n",[374,791,793],{"href":792},"\u002Freference\u002Fenvironment-variables#server","Server"," lists the shutdown settings.",[315,796,798],{"id":797},"health-checks","Health Checks",[319,800,801],{},"Every replica exposes two routes. Neither route requires authentication, and both also work\nwithout clustered mode.",[330,803,804,817],{},[333,805,806],{},[336,807,808,811,814],{},[339,809,810],{},"Route",[339,812,813],{},"Method",[339,815,816],{},"Purpose",[346,818,819,835],{},[336,820,821,826,832],{},[351,822,823],{},[392,824,825],{},"\u002Fapi\u002Fsystem\u002Flive",[351,827,828],{},[829,830],"http-method",{"method":831},"GET",[351,833,834],{},"Returns 200 while the process runs. Use it for a liveness probe.",[336,836,837,842,846],{},[351,838,839],{},[392,840,841],{},"\u002Fapi\u002Fsystem\u002Fready",[351,843,844],{},[829,845],{"method":831},[351,847,848],{},"Returns 200 when the replica accepts traffic, and 503 when it does not. Use it for a readiness probe.",[319,850,851],{},"A replica reports itself unready until startup finishes, while it drains for shutdown, or when a required check fails.\nRedis becoming unavailable after startup reports degraded readiness while the replica continues accepting traffic.\nThe response body lists each check and its status.",[319,853,854,855,378],{},"For more information about the system API, refer to\n",[374,856,240],{"href":857},"\u002Freference\u002Fapi-reference\u002Fsystem-endpoints",[315,859,861],{"id":860},"operations","Operations",[401,863,865],{"id":864},"graceful-shutdown","Graceful Shutdown",[319,867,868,869,872,873,876,877,879,880,882],{},"On ",[392,870,871],{},"SIGTERM"," or ",[392,874,875],{},"SIGINT",", a replica reports itself unready. It keeps accepting new requests for\n",[392,878,748],{},", then finishes its in-flight requests within ",[392,881,763],{}," of\nthe signal.",[319,884,885],{},"The drain delay must be shorter than the grace period. A replica with an equal or longer delay does not\nstart.",[319,887,888,889,378],{},"Set the termination grace period of your platform higher than ",[392,890,763],{},[401,892,894],{"id":893},"upgrades-and-rollbacks","Upgrades and Rollbacks",[319,896,897],{},"Back up the system database before every upgrade. Replace one replica at a time, and wait for its\nreadiness before the next one. A rolling upgrade is safe when the new migrations do not break\nthe replicas still on the old version.",[625,899,900],{},"A release with a destructive migration needs a full cluster restart. Stop every replica, then start\nthe new version. In a rolling upgrade, the old replicas would keep querying a shape that no longer\nexists.",[625,902,903],{},"A rollback needs a database restore. A replica refuses to start when the system database records a\nmigration newer than the latest one the replica knows. Restore the backup you took before the upgrade, then\nstart the previous release.",[401,905,907],{"id":906},"capacity-planning","Capacity Planning",[319,909,910,911,914],{},"Set ",[392,912,913],{},"max_connections"," on each database server high enough for the whole cluster.\nEach replica opens its own connection pool for the system database and for each data source.\nLeave headroom as you add replicas.",[315,916,918],{"id":917},"see-also","See Also",[920,921,922,929,934],"ul",{},[923,924,925,928],"li",{},[374,926,16],{"href":927},"\u002Fgetting-started\u002Finstallation"," — the Docker Compose baseline",[923,930,931,933],{},[374,932,201],{"href":788}," — every cluster setting and its default",[923,935,936,939],{},[374,937,35],{"href":938},"\u002Fconcepts\u002Forganization"," — organizations, workspaces, and data sources",[941,942,943],"style",{},"html pre.shiki code .sNJ9c, html code.shiki .sNJ9c{--shiki-light:#24292E;--shiki-default:#24292E;--shiki-dark:#E2E8F0}html pre.shiki code .sLVBU, html code.shiki .sLVBU{--shiki-light:#0891B2;--shiki-default:#0891B2;--shiki-dark:#22D3EE}html pre.shiki code .suKVh, html code.shiki .suKVh{--shiki-light:#032F62;--shiki-default:#032F62;--shiki-dark:#F8FAFC}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);}html pre.shiki code .s3wuB, html code.shiki .s3wuB{--shiki-light:#22863A;--shiki-default:#22863A;--shiki-dark:#22863A}html pre.shiki code .sTMul, html code.shiki .sTMul{--shiki-light:#1F2937;--shiki-default:#1F2937;--shiki-dark:#94A3B8}html pre.shiki code .ssBNi, html code.shiki .ssBNi{--shiki-light:#1659E9;--shiki-default:#1659E9;--shiki-dark:#94B3F5}",{"title":390,"searchDepth":440,"depth":440,"links":945},[946,947,950,951,952,957],{"id":317,"depth":440,"text":123},{"id":327,"depth":440,"text":328,"children":948},[949],{"id":403,"depth":451,"text":377},{"id":630,"depth":440,"text":631},{"id":797,"depth":440,"text":798},{"id":860,"depth":440,"text":861,"children":953},[954,955,956],{"id":864,"depth":451,"text":865},{"id":893,"depth":451,"text":894},{"id":906,"depth":451,"text":907},{"id":917,"depth":440,"text":918},"Run several Monospace replicas against one shared system database.","md",null,{},{"icon":111},{"title":108,"description":958},"0yiN6CUPXb9Qp8ce3pqIkDbj5T-FQeSH-1l7tlGWlnk",[966,968],{"title":103,"path":104,"stem":105,"description":967,"icon":106,"children":-1},"An end-to-end walkthrough that starts Monospace, wires up your IDE and AI coding agent, bootstraps a schema, and ships a working application in about an hour.",{"title":123,"path":124,"stem":125,"description":969,"icon":126,"children":-1},"Understand the Monospace API structure, endpoints, and response format.",1790103695405]