[{"data":1,"prerenderedAt":486},["ShallowReactive",2],{"navigation_docs":3,"section-navigation-docs":130,"-docs-projects":164,"-docs-projects-surround":393,"doc-previews":398},[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":91,"body":166,"description":386,"extension":387,"links":388,"meta":389,"navigation":390,"path":92,"seo":391,"stem":93,"__hash__":392},"docs\u002Fdocs\u002F13.projects.md",{"type":167,"value":168,"toc":376},"minimark",[169,178,185,188,193,201,208,214,224,230,236,239,243,264,270,275,282,285,288,292,315,321,326,330,339,342,346,358,362],[170,171,172,173,177],"p",{},"A project is a group of resources under one name, together with the ",[174,175,176],"a",{"href":96},"environments"," they run in. Services, databases, key-value stores, buckets and volumes all live inside one.",[170,179,180,181,184],{},"A project usually represents one application or system. A ",[174,182,183],{"href":88},"workspace"," holds all your projects.",[170,186,187],{},"Every project starts with a development environment and can have as many more as you need.",[189,190,192],"h2",{"id":191},"creating-a-project","Creating a project",[170,194,195,196,200],{},"Click ",[197,198,199],"strong",{},"New"," on the projects page and the create palette opens with three ways to start.",[170,202,203],{},[204,205],"img",{"alt":206,"src":207},"The create palette on the projects page, offering a GitHub repository, a container image or an empty project","\u002Fimg\u002Fdocs\u002Fprojects\u002Fcreate-palette.png",[170,209,210],{},[211,212,213],"em",{},"Every project starts here, from source, from an image or from nothing at all.",[170,215,216,219,220,223],{},[197,217,218],{},"From a GitHub repository"," is the usual one. Pick the account and the repository, and Lucity inspects it, works out what it is, and proposes a project and a service to go with it. The first build starts immediately. This is the path the ",[174,221,222],{"href":6},"quickstart"," walks through.",[170,225,226,229],{},[197,227,228],{},"From a container image"," creates the project around a service built elsewhere, whether that is software you are hosting or an image you publish yourself.",[170,231,232,235],{},[197,233,234],{},"Empty"," creates the project and its development environment with nothing in them, ready for you to add services and resources yourself.",[170,237,238],{},"A project has a display name of up to 128 characters and an identifier of 2 to 16 lowercase letters, digits and hyphens, derived from the name unless you set it yourself. The identifier is what appears in URLs, hostnames and logs. Neither can be changed afterwards.",[189,240,242],{"id":241},"the-canvas","The canvas",[170,244,245,246,249,250,249,253,249,256,259,260,263],{},"Opening a project drops you on the canvas for the current environment. Every resource in that environment is a node: ",[174,247,248],{"href":52},"services",", ",[174,251,252],{"href":72},"databases",[174,254,255],{"href":84},"key-value stores",[174,257,258],{"href":76},"buckets"," and ",[174,261,262],{"href":80},"volumes",", each showing its name and current state.",[170,265,266],{},[204,267],{"alt":268,"src":269},"A project's canvas with a service, a database and a bucket, below the workspace, project and environment switchers in the header","\u002Fimg\u002Fdocs\u002Fprojects\u002Fcanvas.png",[170,271,272],{},[211,273,274],{},"One environment on the canvas. Create sits in the top right, the reset button in the top left.",[170,276,277,278,281],{},"Clicking a node opens its panel: deployments and logs for a service, tables and backups for a database, files for a bucket. ",[197,279,280],{},"Create"," in the top right adds a new resource to the environment.",[170,283,284],{},"You can drag nodes around to lay the canvas out the way you think about the system. The arrangement is saved in your browser, so your teammates keep their own, and the reset button in the top left puts every node back where it started.",[170,286,287],{},"The canvas shows one environment at a time. Switching environment in the header swaps the whole canvas, so production shows its own separate copy of everything.",[189,289,291],{"id":290},"settings","Settings",[170,293,294,296,297,300,301,303,304,306,307,309,310,314],{},[197,295,291],{}," on a project covers what applies across it rather than to one resource. ",[197,298,299],{},"General"," holds the project name and identifier, ",[197,302,95],{}," lists them and creates and deletes them (see ",[174,305,176],{"href":96},"), and ",[197,308,63],{}," holds the ",[174,311,313],{"href":312},"\u002Fdocs\u002Fvariables#shared-variables","shared variables"," for the environment you are looking at.",[170,316,317],{},[204,318],{"alt":319,"src":320},"Project settings on the General section, with the project name and identifier above the Danger Zone","\u002Fimg\u002Fdocs\u002Fprojects\u002Fproject-settings.png",[170,322,323],{},[211,324,325],{},"The name and identifier are fixed, and deleting the project sits right below them.",[189,327,329],{"id":328},"deleting-a-project","Deleting a project",[170,331,332,333,335,336,338],{},"Deleting is under ",[197,334,291],{},", at the bottom of ",[197,337,299],{},". Projects delete from the inside out: a project can only be removed once all of its environments are empty, so every service, database, key-value store, bucket and volume has to go first. Until then the delete is refused and names what is still in the way.",[170,340,341],{},"Once the environments are empty, deleting the project removes them and the project along with it.",[189,343,345],{"id":344},"under-the-hood","Under the hood",[170,347,348,349,353,354,357],{},"A project is a naming and labeling convention rather than a resource of its own. Each of its environments is a Kubernetes namespace carrying the project in its name and in its ",[350,351,352],"code",{},"lucity.dev\u002F*"," labels, which is why the identifier is fixed at creation and why an ",[174,355,356],{"href":100},"ejected"," project is simply those namespaces and the Helm releases inside them.",[189,359,361],{"id":360},"next-steps","Next steps",[363,364,365,371],"ul",{},[366,367,368,370],"li",{},[174,369,95],{"href":96}," for how a project is divided",[366,372,373,375],{},[174,374,51],{"href":52}," for what runs inside one",{"title":377,"searchDepth":378,"depth":378,"links":379},"",2,[380,381,382,383,384,385],{"id":191,"depth":378,"text":192},{"id":241,"depth":378,"text":242},{"id":290,"depth":378,"text":291},{"id":328,"depth":378,"text":329},{"id":344,"depth":378,"text":345},{"id":360,"depth":378,"text":361},"Projects group services, databases and the environments they run in.","md",null,{},true,{"title":91,"description":386},"eht-OAjLHygVoZA_DZlqF0QGT2z6pz7cG8mxFRVCDsE",[394,396],{"title":87,"path":88,"stem":89,"description":395,"children":-1},"Workspaces represent your organization in Lucity, with their own members, isolation and billing.",{"title":95,"path":96,"stem":97,"description":397,"children":-1},"Development, staging, production: isolated copies of the same application.",[399,402,404,407,410,413,416,419,422,425,428,431,434,436,438,440,442,444,446,448,450,452,453,454,455,457,459,461,463,465,467,469,471,474,478,482],{"path":6,"title":400,"description":401},"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":403,"title":9,"description":388},"\u002Fdocs\u002Fguides\u002F.navigation",{"path":16,"title":405,"description":406},"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":408,"description":409},"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":411,"description":412},"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":414,"description":415},"Deploy an Astro site","Deploy an Astro site on Lucity, static by default and server rendered when you add an adapter.",{"path":32,"title":417,"description":418},"Deploy an Express API","Deploy an Express API on Lucity. Three requirements, none of them platform-specific.",{"path":36,"title":420,"description":421},"Deploy a FastAPI service","Deploy a FastAPI service on Lucity. Detection is picky about layout, and the fix is one setting.",{"path":40,"title":423,"description":424},"Deploy a Django project","Deploy a Django project on Lucity, with migrations that run themselves and static files that do not.",{"path":44,"title":426,"description":427},"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":429,"description":430},"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":432,"description":433},"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":435},"Services are the deployable units of a project: what they are, how they are configured, and how they scale.",{"path":56,"title":55,"description":437},"How a deployment goes live on Lucity, and the ways to trigger one.",{"path":60,"title":59,"description":439},"How Lucity turns your source code into a container image.",{"path":64,"title":63,"description":441},"Configuration for your services: service variables, shared variables, and dynamic variables.",{"path":68,"title":67,"description":443},"Put a service on the internet. Use a platform hostname for quick tests, or a domain you own.",{"path":72,"title":71,"description":445},"Managed PostgreSQL databases, replicated and backed up, connected to your services without copying credentials.",{"path":76,"title":75,"description":447},"S3-compatible buckets for uploads, exports and anything else your service needs to keep.",{"path":80,"title":79,"description":449},"Persistent disks for services that need to keep state on the filesystem.",{"path":84,"title":83,"description":451},"A Redis®-compatible key-value store for caching, sessions and queues.",{"path":88,"title":87,"description":395},{"path":92,"title":91,"description":386},{"path":96,"title":95,"description":397},{"path":100,"title":99,"description":456},"Download a project as a Helm chart and run it on a Kubernetes cluster of your own.",{"path":104,"title":103,"description":458},"The GraphQL API behind the dashboard, with an interactive playground.",{"path":108,"title":107,"description":460},"Deploy and manage your services from a terminal or a CI pipeline.",{"path":112,"title":111,"description":462},"Deploy and manage your services from Claude Code, Codex, Cursor or any other MCP client.",{"path":116,"title":115,"description":464},"CPU and memory for every service, and disk usage for every volume.",{"path":120,"title":119,"description":466},"What your services print while they run, and the output of every deployment step.",{"path":124,"title":123,"description":468},"Plans, resource usage, the free trial, and what happens when a payment fails.",{"path":128,"title":127,"description":470},"Run the whole platform on a Kubernetes cluster you own, using the same two Helm charts we run ourselves.",{"path":472,"title":473,"description":388},"\u002Flegal\u002F.navigation","Legal",{"path":475,"title":476,"description":477},"\u002Flegal\u002Fdata-processing-agreement","Data Processing Agreement","How Lucity processes personal data on your behalf.",{"path":479,"title":480,"description":481},"\u002Flegal\u002Fprivacy-policy","Privacy Policy","How Lucity handles your data.",{"path":483,"title":484,"description":485},"\u002Flegal\u002Fterms-of-use","Terms of Use","Terms governing your use of Lucity.",1791216728525]