[{"data":1,"prerenderedAt":579},["ShallowReactive",2],{"navigation_docs":3,"section-navigation-docs":130,"-docs-environments":164,"-docs-environments-surround":486,"doc-previews":491},[4,8,50,54,58,62,66,70,74,78,82,86,90,94,98,102,106,110,114,118,122,126],{"title":5,"path":6,"stem":7},"Quickstart","\u002Fdocs\u002Fquickstart","docs\u002F01.quickstart",{"title":9,"path":10,"stem":11,"children":12},"Guides","\u002Fdocs\u002Fguides","docs\u002F02.guides\u002Findex",[13,14,18,22,26,30,34,38,42,46],{"title":9,"path":10,"stem":11},{"title":15,"path":16,"stem":17},"Next.js","\u002Fdocs\u002Fguides\u002Fnextjs","docs\u002F02.guides\u002F1.nextjs",{"title":19,"path":20,"stem":21},"Nuxt","\u002Fdocs\u002Fguides\u002Fnuxt","docs\u002F02.guides\u002F2.nuxt",{"title":23,"path":24,"stem":25},"SvelteKit","\u002Fdocs\u002Fguides\u002Fsveltekit","docs\u002F02.guides\u002F3.sveltekit",{"title":27,"path":28,"stem":29},"Astro","\u002Fdocs\u002Fguides\u002Fastro","docs\u002F02.guides\u002F4.astro",{"title":31,"path":32,"stem":33},"Express","\u002Fdocs\u002Fguides\u002Fexpress","docs\u002F02.guides\u002F5.express",{"title":35,"path":36,"stem":37},"FastAPI","\u002Fdocs\u002Fguides\u002Ffastapi","docs\u002F02.guides\u002F6.fastapi",{"title":39,"path":40,"stem":41},"Django","\u002Fdocs\u002Fguides\u002Fdjango","docs\u002F02.guides\u002F7.django",{"title":43,"path":44,"stem":45},"Laravel","\u002Fdocs\u002Fguides\u002Flaravel","docs\u002F02.guides\u002F8.laravel",{"title":47,"path":48,"stem":49},"Go","\u002Fdocs\u002Fguides\u002Fgo","docs\u002F02.guides\u002F9.go",{"title":51,"path":52,"stem":53},"Services","\u002Fdocs\u002Fservices","docs\u002F03.services",{"title":55,"path":56,"stem":57},"Deployments","\u002Fdocs\u002Fdeployments","docs\u002F04.deployments",{"title":59,"path":60,"stem":61},"Builds","\u002Fdocs\u002Fbuilds","docs\u002F05.builds",{"title":63,"path":64,"stem":65},"Variables","\u002Fdocs\u002Fvariables","docs\u002F06.variables",{"title":67,"path":68,"stem":69},"Domains","\u002Fdocs\u002Fdomains","docs\u002F07.domains",{"title":71,"path":72,"stem":73},"PostgreSQL","\u002Fdocs\u002Fpostgres","docs\u002F08.postgres",{"title":75,"path":76,"stem":77},"Object storage","\u002Fdocs\u002Fobject-storage","docs\u002F09.object-storage",{"title":79,"path":80,"stem":81},"Volumes","\u002Fdocs\u002Fvolumes","docs\u002F10.volumes",{"title":83,"path":84,"stem":85},"Key-value store","\u002Fdocs\u002Fredis","docs\u002F11.redis",{"title":87,"path":88,"stem":89},"Workspaces","\u002Fdocs\u002Fworkspaces","docs\u002F12.workspaces",{"title":91,"path":92,"stem":93},"Projects","\u002Fdocs\u002Fprojects","docs\u002F13.projects",{"title":95,"path":96,"stem":97},"Environments","\u002Fdocs\u002Fenvironments","docs\u002F14.environments",{"title":99,"path":100,"stem":101},"Eject","\u002Fdocs\u002Feject","docs\u002F15.eject",{"title":103,"path":104,"stem":105},"API","\u002Fdocs\u002Fapi","docs\u002F16.api",{"title":107,"path":108,"stem":109},"CLI","\u002Fdocs\u002Fcli","docs\u002F17.cli",{"title":111,"path":112,"stem":113},"Claude Plugin & MCP","\u002Fdocs\u002Fclaude-plugin","docs\u002F18.claude-plugin",{"title":115,"path":116,"stem":117},"Metrics","\u002Fdocs\u002Fmetrics","docs\u002F19.metrics",{"title":119,"path":120,"stem":121},"Logs","\u002Fdocs\u002Flogs","docs\u002F20.logs",{"title":123,"path":124,"stem":125},"Billing","\u002Fdocs\u002Fbilling","docs\u002F21.billing",{"title":127,"path":128,"stem":129},"Self-hosting","\u002Fdocs\u002Fself-hosting","docs\u002F22.self-hosting",[131,132,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],{"title":5,"path":6,"stem":7},{"title":9,"path":10,"stem":11,"children":133},[134,135,136,137,138,139,140,141,142,143],{"title":9,"path":10,"stem":11},{"title":15,"path":16,"stem":17},{"title":19,"path":20,"stem":21},{"title":23,"path":24,"stem":25},{"title":27,"path":28,"stem":29},{"title":31,"path":32,"stem":33},{"title":35,"path":36,"stem":37},{"title":39,"path":40,"stem":41},{"title":43,"path":44,"stem":45},{"title":47,"path":48,"stem":49},{"title":51,"path":52,"stem":53},{"title":55,"path":56,"stem":57},{"title":59,"path":60,"stem":61},{"title":63,"path":64,"stem":65},{"title":67,"path":68,"stem":69},{"title":71,"path":72,"stem":73},{"title":75,"path":76,"stem":77},{"title":79,"path":80,"stem":81},{"title":83,"path":84,"stem":85},{"title":87,"path":88,"stem":89},{"title":91,"path":92,"stem":93},{"title":95,"path":96,"stem":97},{"title":99,"path":100,"stem":101},{"title":103,"path":104,"stem":105},{"title":107,"path":108,"stem":109},{"title":111,"path":112,"stem":113},{"title":115,"path":116,"stem":117},{"title":119,"path":120,"stem":121},{"title":123,"path":124,"stem":125},{"title":127,"path":128,"stem":129},{"id":165,"title":95,"body":166,"description":479,"extension":480,"links":481,"meta":482,"navigation":483,"path":96,"seo":484,"stem":97,"__hash__":485},"docs\u002Fdocs\u002F14.environments.md",{"type":167,"value":168,"toc":468},"minimark",[169,186,189,194,203,210,216,220,231,238,255,259,265,274,284,287,291,294,343,359,365,370,374,382,389,393,396,434,437,445,449],[170,171,172,173,177,178,181,182,185],"p",{},"An environment is one copy of a project, with its own services, databases, key-value stores, buckets and volumes. Every project starts with ",[174,175,176],"code",{},"development",", and you add environments such as ",[174,179,180],{},"staging"," or ",[174,183,184],{},"production"," as you need them.",[170,187,188],{},"Environments are separate from each other. Each has its own configuration and its own domains, and nothing you change in one reaches another.",[190,191,193],"h2",{"id":192},"switching-environments","Switching environments",[170,195,196,197,202],{},"The environment switcher sits in the header, next to the project name. It lists every environment in the project along with its ",[198,199,201],"a",{"href":200},"#tiers","tier",", and the canvas shows whichever one you pick.",[170,204,205],{},[206,207],"img",{"alt":208,"src":209},"The environment switcher open in the header, listing the project's environments with their tier","\u002Fimg\u002Fdocs\u002Fenvironments\u002Fenvironment-switcher.png",[170,211,212],{},[213,214,215],"em",{},"Every environment in the project. The gear next to one opens its settings.",[190,217,219],{"id":218},"creating-an-environment","Creating an environment",[170,221,222,223,227,228,230],{},"Choose ",[224,225,226],"strong",{},"New Environment"," in the switcher, then give it a name and a ",[198,229,201],{"href":200},". Names are 2 to 16 lowercase letters, digits and hyphens. They appear in URLs and platform domains, so they can't be changed later.",[170,232,233,234,237],{},"A new environment starts empty. Add its services and resources the same way you did in development. Each service tracks its own branch, so production can build from ",[174,235,236],{},"main"," while development follows whatever you are working on.",[170,239,240,241,243,244,246,247,250,251,254],{},"Services in ",[174,242,176],{}," deploy on every push by default. In any other environment, auto-deploy starts switched off, so those services only change when you deploy them from the dashboard, the ",[198,245,107],{"href":108}," or CI. You can turn it on for a service under ",[224,248,249],{},"Settings"," → ",[224,252,253],{},"Source",".",[190,256,258],{"id":257},"what-stays-separate","What stays separate",[170,260,261,264],{},[224,262,263],{},"The private network."," Services reach each other and the environment's databases and key-value stores over a private network that ends at the environment. A service in development can't reach anything in production that way. It would have to go through a public domain, like any other client on the internet.",[170,266,267,270,271,273],{},[224,268,269],{},"Configuration."," ",[198,272,63],{"href":64}," belong to a service and shared variables to an environment, so every environment is configured on its own. A dynamic variable can only point at a resource in its own environment.",[170,275,276,279,280,283],{},[224,277,278],{},"Domains."," Every service gets its own platform domain in each environment, and ",[198,281,282],{"href":68},"custom domains"," are added per service, so production gets its own.",[170,285,286],{},"What environments share is access. Everyone in the workspace can see and change every environment, and there are no per-environment permissions.",[190,288,290],{"id":289},"tiers","Tiers",[170,292,293],{},"Every environment has a tier, which decides how its services and databases get CPU and memory.",[295,296,297,313],"table",{},[298,299,300],"thead",{},[301,302,303,307,310],"tr",{},[304,305,306],"th",{},"Tier",[304,308,309],{},"What it does",[304,311,312],{},"Suited for",[314,315,316,330],"tbody",{},[301,317,318,324,327],{},[319,320,321],"td",{},[224,322,323],{},"Eco",[319,325,326],{},"Services share capacity and can burst beyond what is reserved for them. You pay for what they actually use, and performance can vary under load.",[319,328,329],{},"Development, staging and side projects",[301,331,332,337,340],{},[319,333,334],{},[224,335,336],{},"Production",[319,338,339],{},"The full CPU and memory of every service is reserved for it.",[319,341,342],{},"Production workloads with predictable load",[170,344,345,346,250,348,350,351,354,355,358],{},"New environments start on Eco. To change the tier, open the project's ",[224,347,249],{},[224,349,95],{},", expand the environment, pick a tier and click ",[224,352,353],{},"Save tier",". A service or database picks up the new tier the next time it is created or its resources change. See ",[198,356,357],{"href":124},"billing"," for what each tier costs.",[170,360,361],{},[206,362],{"alt":363,"src":364},"Project settings on the Environments section, with the development environment expanded to show its tier","\u002Fimg\u002Fdocs\u002Fenvironments\u002Fenvironment-settings.png",[170,366,367],{},[213,368,369],{},"Each environment's tier, under the project settings.",[190,371,373],{"id":372},"deleting-an-environment","Deleting an environment",[170,375,376,377,250,379,381],{},"Open the project's ",[224,378,249],{},[224,380,95],{}," and click the trash icon next to the environment. It has to be empty first, so remove its services, databases, key-value stores, buckets and volumes beforehand.",[170,383,384,385,254],{},"A project always keeps at least one environment, so the last one can't be deleted on its own. To remove that too, ",[198,386,388],{"href":387},"\u002Fdocs\u002Fprojects#deleting-a-project","delete the project",[190,390,392],{"id":391},"resource-quotas","Resource quotas",[170,394,395],{},"Every environment has a budget that covers everything inside it: services, databases, key-value stores and volumes together.",[295,397,398,408],{},[298,399,400],{},[301,401,402,405],{},[304,403,404],{},"Resource",[304,406,407],{},"Budget per environment",[314,409,410,418,426],{},[301,411,412,415],{},[319,413,414],{},"CPU",[319,416,417],{},"32 vCPU",[301,419,420,423],{},[319,421,422],{},"Memory",[319,424,425],{},"64 GB",[301,427,428,431],{},[319,429,430],{},"Storage",[319,432,433],{},"4 TB",[170,435,436],{},"That is room for a lot of application, and most projects never come close. When an environment does run out, new instances stop being placed and the deployment that tried to start them fails with a quota error.",[170,438,439,440,444],{},"The budget is not self-service. To have it raised, email ",[198,441,443],{"href":442},"mailto:christian@zeitlos.software","christian@zeitlos.software"," with the workspace, the project and the environment, and roughly what you need it to be.",[190,446,448],{"id":447},"next-steps","Next steps",[450,451,452,458,463],"ul",{},[453,454,455,457],"li",{},[198,456,91],{"href":92}," for what holds the environments",[453,459,460,462],{},[198,461,63],{"href":64}," for configuring each environment",[453,464,465,467],{},[198,466,55],{"href":56}," for getting code into an environment",{"title":469,"searchDepth":470,"depth":470,"links":471},"",2,[472,473,474,475,476,477,478],{"id":192,"depth":470,"text":193},{"id":218,"depth":470,"text":219},{"id":257,"depth":470,"text":258},{"id":289,"depth":470,"text":290},{"id":372,"depth":470,"text":373},{"id":391,"depth":470,"text":392},{"id":447,"depth":470,"text":448},"Development, staging, production: isolated copies of the same application.","md",null,{},true,{"title":95,"description":479},"AcHvlA8B6dzmkjBjOWJR7XDy4h1s5aFPCLnOf6WQjkc",[487,489],{"title":91,"path":92,"stem":93,"description":488,"children":-1},"Projects group services, databases and the environments they run in.",{"title":99,"path":100,"stem":101,"description":490,"children":-1},"Download a project as a Helm chart and run it on a Kubernetes cluster of your own.",[492,495,497,500,503,506,509,512,515,518,521,524,527,529,531,533,535,537,539,541,543,545,547,548,549,550,552,554,556,558,560,562,564,567,571,575],{"path":6,"title":493,"description":494},"Deploy your first service","Deploy an app to Lucity, put it on a public domain, and connect a PostgreSQL database and an object storage bucket in about fifteen minutes.",{"path":496,"title":9,"description":481},"\u002Fdocs\u002Fguides\u002F.navigation",{"path":16,"title":498,"description":499},"Deploy a Next.js app","Deploy a Next.js app on Lucity, with a database, environment variables that behave, and no Dockerfile.",{"path":20,"title":501,"description":502},"Deploy a Nuxt app","Deploy a Nuxt app on Lucity. Nitro output, runtime config, and a database, with no preset to pick.",{"path":24,"title":504,"description":505},"Deploy a SvelteKit app","Deploy a SvelteKit app on Lucity. One adapter change stands between a fresh project and a running service.",{"path":28,"title":507,"description":508},"Deploy an Astro site","Deploy an Astro site on Lucity, static by default and server rendered when you add an adapter.",{"path":32,"title":510,"description":511},"Deploy an Express API","Deploy an Express API on Lucity. Three requirements, none of them platform-specific.",{"path":36,"title":513,"description":514},"Deploy a FastAPI service","Deploy a FastAPI service on Lucity. Detection is picky about layout, and the fix is one setting.",{"path":40,"title":516,"description":517},"Deploy a Django project","Deploy a Django project on Lucity, with migrations that run themselves and static files that do not.",{"path":44,"title":519,"description":520},"Deploy a Laravel application","Deploy a Laravel application on Lucity, with migrations, caches and a queue worker, and no server to configure.",{"path":48,"title":522,"description":523},"Deploy a Go service","Deploy a Go service on Lucity. Compiled in the build, shipped as a binary, nothing else in the image.",{"path":10,"title":525,"description":526},"Deploy your framework","Deploy guides for the frameworks people actually ship: Next.js, Nuxt, SvelteKit, Astro, Express, FastAPI, Django, Laravel, and Go.",{"path":52,"title":51,"description":528},"Services are the deployable units of a project: what they are, how they are configured, and how they scale.",{"path":56,"title":55,"description":530},"How a deployment goes live on Lucity, and the ways to trigger one.",{"path":60,"title":59,"description":532},"How Lucity turns your source code into a container image.",{"path":64,"title":63,"description":534},"Configuration for your services: service variables, shared variables, and dynamic variables.",{"path":68,"title":67,"description":536},"Put a service on the internet. Use a platform hostname for quick tests, or a domain you own.",{"path":72,"title":71,"description":538},"Managed PostgreSQL databases, replicated and backed up, connected to your services without copying credentials.",{"path":76,"title":75,"description":540},"S3-compatible buckets for uploads, exports and anything else your service needs to keep.",{"path":80,"title":79,"description":542},"Persistent disks for services that need to keep state on the filesystem.",{"path":84,"title":83,"description":544},"A Redis®-compatible key-value store for caching, sessions and queues.",{"path":88,"title":87,"description":546},"Workspaces represent your organization in Lucity, with their own members, isolation and billing.",{"path":92,"title":91,"description":488},{"path":96,"title":95,"description":479},{"path":100,"title":99,"description":490},{"path":104,"title":103,"description":551},"The GraphQL API behind the dashboard, with an interactive playground.",{"path":108,"title":107,"description":553},"Deploy and manage your services from a terminal or a CI pipeline.",{"path":112,"title":111,"description":555},"Deploy and manage your services from Claude Code, Codex, Cursor or any other MCP client.",{"path":116,"title":115,"description":557},"CPU and memory for every service, and disk usage for every volume.",{"path":120,"title":119,"description":559},"What your services print while they run, and the output of every deployment step.",{"path":124,"title":123,"description":561},"Plans, resource usage, the free trial, and what happens when a payment fails.",{"path":128,"title":127,"description":563},"Run the whole platform on a Kubernetes cluster you own, using the same two Helm charts we run ourselves.",{"path":565,"title":566,"description":481},"\u002Flegal\u002F.navigation","Legal",{"path":568,"title":569,"description":570},"\u002Flegal\u002Fdata-processing-agreement","Data Processing Agreement","How Lucity processes personal data on your behalf.",{"path":572,"title":573,"description":574},"\u002Flegal\u002Fprivacy-policy","Privacy Policy","How Lucity handles your data.",{"path":576,"title":577,"description":578},"\u002Flegal\u002Fterms-of-use","Terms of Use","Terms governing your use of Lucity.",1791216728587]