[{"data":1,"prerenderedAt":787},["ShallowReactive",2],{"navigation_docs":3,"section-navigation-docs":130,"-docs-guides-nuxt":164,"-docs-guides-nuxt-surround":695,"doc-previews":700},[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":166,"body":167,"description":688,"extension":689,"links":690,"meta":691,"navigation":692,"path":20,"seo":693,"stem":21,"__hash__":694},"docs\u002Fdocs\u002F02.guides\u002F2.nuxt.md","Deploy a Nuxt app",{"type":168,"value":169,"toc":680},"minimark",[170,174,203,218,223,242,255,266,272,338,354,358,361,372,376,383,389,395,413,417,435,620,627,631,653,657,676],[171,172,173],"p",{},"Nuxt is the easiest of the JavaScript frameworks to deploy here, because its default build output is already a plain Node server. There is no platform preset to choose and no adapter to install.",[175,176,181],"pre",{"className":177,"code":178,"language":179,"meta":180,"style":180},"language-bash shiki shiki-themes gruvbox-dark-medium gruvbox-dark-medium gruvbox-dark-medium","npx nuxi@latest init my-app\n","bash","",[182,183,184],"code",{"__ignoreMap":180},[185,186,189,193,197,200],"span",{"class":187,"line":188},"line",1,[185,190,192],{"class":191},"sX5TD","npx",[185,194,196],{"class":195},"sQLXx"," nuxi@latest",[185,198,199],{"class":195}," init",[185,201,202],{"class":195}," my-app\n",[171,204,205,206,210,211,217],{},"Push that to GitHub, connect it as described in the ",[207,208,209],"a",{"href":6},"quickstart",", and it runs. If you would rather not scaffold your own, ",[207,212,216],{"href":213,"rel":214},"https:\u002F\u002Fgithub.com\u002Fzeitlos\u002Fnuxt-example",[215],"nofollow","zeitlos\u002Fnuxt-example"," is exactly the above, deployed.",[219,220,222],"h2",{"id":221},"the-start-command-and-where-it-comes-from","The start command, and where it comes from",[171,224,225,226,229,230,233,234,237,238,241],{},"The ",[207,227,228],{"href":60},"build"," runs ",[182,231,232],{},"npm run build",", which produces ",[182,235,236],{},".output\u002F",". For the start command, detection looks for a ",[182,239,240],{},"start"," script first. A stock Nuxt project has none, so it falls through to the Nitro default:",[175,243,245],{"className":177,"code":244,"language":179,"meta":180,"style":180},"node .output\u002Fserver\u002Findex.mjs\n",[182,246,247],{"__ignoreMap":180},[185,248,249,252],{"class":187,"line":188},[185,250,251],{"class":191},"node",[185,253,254],{"class":195}," .output\u002Fserver\u002Findex.mjs\n",[171,256,257,258,261,262,265],{},"That is the same command ",[182,259,260],{},"nuxt preview"," wraps, and it reads the ",[182,263,264],{},"PORT"," Lucity injects. Nothing to configure.",[171,267,268,269,271],{},"Add a ",[182,270,240],{}," script and it wins. That is the hook to use if you want to run migrations before the server, or pass Node flags:",[175,273,277],{"className":274,"code":275,"language":276,"meta":180,"style":180},"language-json shiki shiki-themes gruvbox-dark-medium gruvbox-dark-medium gruvbox-dark-medium","{\n  \"scripts\": {\n    \"start\": \"node --max-old-space-size=1024 .output\u002Fserver\u002Findex.mjs\"\n  }\n}\n","json",[182,278,279,285,304,326,332],{"__ignoreMap":180},[185,280,281],{"class":187,"line":188},[185,282,284],{"class":283},"si-ur","{\n",[185,286,288,291,295,298,301],{"class":187,"line":287},2,[185,289,290],{"class":283},"  \"",[185,292,294],{"class":293},"slqHI","scripts",[185,296,297],{"class":283},"\"",[185,299,300],{"class":283},":",[185,302,303],{"class":283}," {\n",[185,305,307,310,312,314,316,319,323],{"class":187,"line":306},3,[185,308,309],{"class":283},"    \"",[185,311,240],{"class":293},[185,313,297],{"class":283},[185,315,300],{"class":283},[185,317,318],{"class":283}," \"",[185,320,322],{"class":321},"sIi04","node --max-old-space-size=1024 .output\u002Fserver\u002Findex.mjs",[185,324,325],{"class":283},"\"\n",[185,327,329],{"class":187,"line":328},4,[185,330,331],{"class":283},"  }\n",[185,333,335],{"class":187,"line":334},5,[185,336,337],{"class":283},"}\n",[339,340,341,342,345,346,349,350,353],"note",{},"Commit your ",[182,343,344],{},"package-lock.json",". A Nuxt project without one failed in our own build with\n",[182,347,348],{},"npm error Cannot read properties of null (reading 'edgesOut')",", an npm resolution failure that\nnever shows up locally because your ",[182,351,352],{},"node_modules"," is already there. The lockfile also makes the\nbuild reproducible, which is the real reason to commit it.",[219,355,357],{"id":356},"leave-the-nitro-preset-alone","Leave the Nitro preset alone",[171,359,360],{},"Nitro can target Vercel, Netlify, Cloudflare Workers and a dozen other hosts, and every one of those presets produces output that only runs on that host. The default preset produces a Node server, which is what a container wants.",[171,362,363,364,367,368,371],{},"So: do not set ",[182,365,366],{},"nitro.preset"," in ",[182,369,370],{},"nuxt.config.ts",", and remove it if you inherited a config that has one. That single line is the difference between a deployment that works anywhere and one that is pinned to a vendor. Lucity has nothing to add here, and that is the point.",[219,373,375],{"id":374},"runtime-config-and-variables","Runtime config and variables",[171,377,378,379,382],{},"Nuxt splits configuration in a way that maps neatly onto how ",[207,380,381],{"href":64},"variables"," behave.",[171,384,385,388],{},[182,386,387],{},"runtimeConfig"," values are read at runtime, so they behave like any other variable: change one, the service rolls out in seconds with the same image and the new value is live.",[171,390,391,394],{},[182,392,393],{},"runtimeConfig.public"," values are exposed to the browser and inlined during the build. Changing one needs a new build, not just a rollout. If a public value differs between environments, that means one build per environment, which is worth knowing before you rely on it.",[171,396,397,398,401,402,405,406,401,409,412],{},"The environment variable names follow Nuxt's convention: ",[182,399,400],{},"NUXT_API_SECRET"," fills ",[182,403,404],{},"runtimeConfig.apiSecret",", and ",[182,407,408],{},"NUXT_PUBLIC_SITE_URL",[182,410,411],{},"runtimeConfig.public.siteUrl",".",[219,414,416],{"id":415},"server-routes-and-a-database","Server routes and a database",[171,418,419,420,423,424,427,428,431,432,300],{},"Nuxt server routes run in the same container, so a ",[207,421,422],{"href":72},"PostgreSQL database"," is just a connection away. Link ",[182,425,426],{},"DATABASE_URL"," to the database's ",[182,429,430],{},"fqdn-uri",", then use it from ",[182,433,434],{},"server\u002Fapi\u002F",[175,436,440],{"className":437,"code":438,"language":439,"meta":180,"style":180},"language-ts shiki shiki-themes gruvbox-dark-medium gruvbox-dark-medium gruvbox-dark-medium","\u002F\u002F server\u002Fapi\u002Fposts.get.ts\nimport { Pool } from 'pg';\n\nconst pool = new Pool({ connectionString: process.env.DATABASE_URL });\n\nexport default defineEventHandler(async () => {\n  const { rows } = await pool.query('SELECT id, title FROM posts ORDER BY id DESC LIMIT 20');\n  return rows;\n});\n","ts",[182,441,442,448,478,484,533,537,562,600,610],{"__ignoreMap":180},[185,443,444],{"class":187,"line":188},[185,445,447],{"class":446},"sIIdi","\u002F\u002F server\u002Fapi\u002Fposts.get.ts\n",[185,449,450,454,457,460,463,466,469,472,475],{"class":187,"line":287},[185,451,453],{"class":452},"sJHtc","import",[185,455,456],{"class":283}," {",[185,458,459],{"class":321}," Pool",[185,461,462],{"class":283}," }",[185,464,465],{"class":452}," from",[185,467,468],{"class":283}," '",[185,470,471],{"class":195},"pg",[185,473,474],{"class":283},"'",[185,476,477],{"class":283},";\n",[185,479,480],{"class":187,"line":306},[185,481,483],{"emptyLinePlaceholder":482},true,"\n",[185,485,486,490,493,497,500,502,506,509,512,514,517,519,522,524,526,528,531],{"class":187,"line":328},[185,487,489],{"class":488},"sjx4h","const",[185,491,492],{"class":321}," pool",[185,494,496],{"class":495},"s3drp"," =",[185,498,499],{"class":488}," new",[185,501,459],{"class":191},[185,503,505],{"class":504},"spvMa","(",[185,507,508],{"class":283},"{",[185,510,511],{"class":504}," connectionString",[185,513,300],{"class":283},[185,515,516],{"class":321}," process",[185,518,412],{"class":283},[185,520,521],{"class":321},"env",[185,523,412],{"class":283},[185,525,426],{"class":321},[185,527,462],{"class":283},[185,529,530],{"class":504},")",[185,532,477],{"class":283},[185,534,535],{"class":187,"line":334},[185,536,483],{"emptyLinePlaceholder":482},[185,538,540,543,546,549,551,554,557,560],{"class":187,"line":539},6,[185,541,542],{"class":452},"export",[185,544,545],{"class":452}," default",[185,547,548],{"class":191}," defineEventHandler",[185,550,505],{"class":504},[185,552,553],{"class":488},"async",[185,555,556],{"class":283}," ()",[185,558,559],{"class":488}," =>",[185,561,303],{"class":283},[185,563,565,568,570,573,575,577,580,582,584,587,589,591,594,596,598],{"class":187,"line":564},7,[185,566,567],{"class":488},"  const",[185,569,456],{"class":283},[185,571,572],{"class":321}," rows",[185,574,462],{"class":283},[185,576,496],{"class":495},[185,578,579],{"class":452}," await",[185,581,492],{"class":321},[185,583,412],{"class":283},[185,585,586],{"class":191},"query",[185,588,505],{"class":504},[185,590,474],{"class":283},[185,592,593],{"class":195},"SELECT id, title FROM posts ORDER BY id DESC LIMIT 20",[185,595,474],{"class":283},[185,597,530],{"class":504},[185,599,477],{"class":283},[185,601,603,606,608],{"class":187,"line":602},8,[185,604,605],{"class":452},"  return",[185,607,572],{"class":321},[185,609,477],{"class":283},[185,611,613,616,618],{"class":187,"line":612},9,[185,614,615],{"class":283},"}",[185,617,530],{"class":504},[185,619,477],{"class":283},[171,621,622,623,626],{},"Uploads belong in a ",[207,624,625],{"href":76},"bucket"," rather than on the container's disk, which resets on every rollout.",[219,628,630],{"id":629},"if-you-are-building-a-static-site","If you are building a static site",[171,632,633,636,637,639,640,642,643,645,646,648,649,652],{},[182,634,635],{},"nuxt generate"," produces a static site instead of a server, and Lucity will happily serve it, but detection keys on the ",[182,638,228],{}," script. Point your ",[182,641,228],{}," script at ",[182,644,635],{}," and set a ",[182,647,240],{}," script that serves ",[182,650,651],{},".output\u002Fpublic",", or keep the server build. Mixing the two, generating in the build and then starting a server, gives you the costs of both.",[219,654,656],{"id":655},"next-steps","Next steps",[658,659,660,666,671],"ul",{},[661,662,663,665],"li",{},[207,664,63],{"href":64}," for the runtime and build-time split",[661,667,668,670],{},[207,669,71],{"href":72}," for the database behind your server routes",[661,672,673,675],{},[207,674,55],{"href":56}," for what happens on each push",[677,678,679],"style",{},"html pre.shiki code .sX5TD, html code.shiki .sX5TD{--shiki-light:#FABD2F;--shiki-default:#FABD2F;--shiki-dark:#FABD2F}html pre.shiki code .sQLXx, html code.shiki .sQLXx{--shiki-light:#B8BB26;--shiki-default:#B8BB26;--shiki-dark:#B8BB26}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 .si-ur, html code.shiki .si-ur{--shiki-light:#A89984;--shiki-default:#A89984;--shiki-dark:#A89984}html pre.shiki code .slqHI, html code.shiki .slqHI{--shiki-light:#689D6A;--shiki-default:#689D6A;--shiki-dark:#689D6A}html pre.shiki code .sIi04, html code.shiki .sIi04{--shiki-light:#83A598;--shiki-default:#83A598;--shiki-dark:#83A598}html pre.shiki code .sIIdi, html code.shiki .sIIdi{--shiki-light:#928374;--shiki-light-font-style:italic;--shiki-default:#928374;--shiki-default-font-style:italic;--shiki-dark:#928374;--shiki-dark-font-style:italic}html pre.shiki code .sJHtc, html code.shiki .sJHtc{--shiki-light:#FB4934;--shiki-default:#FB4934;--shiki-dark:#FB4934}html pre.shiki code .sjx4h, html code.shiki .sjx4h{--shiki-light:#FE8019;--shiki-default:#FE8019;--shiki-dark:#FE8019}html pre.shiki code .s3drp, html code.shiki .s3drp{--shiki-light:#8EC07C;--shiki-default:#8EC07C;--shiki-dark:#8EC07C}html pre.shiki code .spvMa, html code.shiki .spvMa{--shiki-light:#EBDBB2;--shiki-default:#EBDBB2;--shiki-dark:#EBDBB2}",{"title":180,"searchDepth":287,"depth":287,"links":681},[682,683,684,685,686,687],{"id":221,"depth":287,"text":222},{"id":356,"depth":287,"text":357},{"id":374,"depth":287,"text":375},{"id":415,"depth":287,"text":416},{"id":629,"depth":287,"text":630},{"id":655,"depth":287,"text":656},"Deploy a Nuxt app on Lucity. Nitro output, runtime config, and a database, with no preset to pick.","md",null,{},{"title":19},{"title":166,"description":688},"XHZcs0VADAp-LbX2fTNtniQMdjbj8Ukurb0u_KeSvxA",[696,698],{"title":15,"path":16,"stem":17,"description":697,"children":-1},"Deploy a Next.js app on Lucity, with a database, environment variables that behave, and no Dockerfile.",{"title":23,"path":24,"stem":25,"description":699,"children":-1},"Deploy a SvelteKit app on Lucity. One adapter change stands between a fresh project and a running service.",[701,704,706,708,709,711,714,717,720,723,726,729,732,734,736,738,740,742,744,746,748,750,752,754,756,758,760,762,764,766,768,770,772,775,779,783],{"path":6,"title":702,"description":703},"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":705,"title":9,"description":690},"\u002Fdocs\u002Fguides\u002F.navigation",{"path":16,"title":707,"description":697},"Deploy a Next.js app",{"path":20,"title":166,"description":688},{"path":24,"title":710,"description":699},"Deploy a SvelteKit app",{"path":28,"title":712,"description":713},"Deploy an Astro site","Deploy an Astro site on Lucity, static by default and server rendered when you add an adapter.",{"path":32,"title":715,"description":716},"Deploy an Express API","Deploy an Express API on Lucity. Three requirements, none of them platform-specific.",{"path":36,"title":718,"description":719},"Deploy a FastAPI service","Deploy a FastAPI service on Lucity. Detection is picky about layout, and the fix is one setting.",{"path":40,"title":721,"description":722},"Deploy a Django project","Deploy a Django project on Lucity, with migrations that run themselves and static files that do not.",{"path":44,"title":724,"description":725},"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":727,"description":728},"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":730,"description":731},"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":733},"Services are the deployable units of a project: what they are, how they are configured, and how they scale.",{"path":56,"title":55,"description":735},"How a deployment goes live on Lucity, and the ways to trigger one.",{"path":60,"title":59,"description":737},"How Lucity turns your source code into a container image.",{"path":64,"title":63,"description":739},"Configuration for your services: service variables, shared variables, and dynamic variables.",{"path":68,"title":67,"description":741},"Put a service on the internet. Use a platform hostname for quick tests, or a domain you own.",{"path":72,"title":71,"description":743},"Managed PostgreSQL databases, replicated and backed up, connected to your services without copying credentials.",{"path":76,"title":75,"description":745},"S3-compatible buckets for uploads, exports and anything else your service needs to keep.",{"path":80,"title":79,"description":747},"Persistent disks for services that need to keep state on the filesystem.",{"path":84,"title":83,"description":749},"A Redis®-compatible key-value store for caching, sessions and queues.",{"path":88,"title":87,"description":751},"Workspaces represent your organization in Lucity, with their own members, isolation and billing.",{"path":92,"title":91,"description":753},"Projects group services, databases and the environments they run in.",{"path":96,"title":95,"description":755},"Development, staging, production: isolated copies of the same application.",{"path":100,"title":99,"description":757},"Download a project as a Helm chart and run it on a Kubernetes cluster of your own.",{"path":104,"title":103,"description":759},"The GraphQL API behind the dashboard, with an interactive playground.",{"path":108,"title":107,"description":761},"Deploy and manage your services from a terminal or a CI pipeline.",{"path":112,"title":111,"description":763},"Deploy and manage your services from Claude Code, Codex, Cursor or any other MCP client.",{"path":116,"title":115,"description":765},"CPU and memory for every service, and disk usage for every volume.",{"path":120,"title":119,"description":767},"What your services print while they run, and the output of every deployment step.",{"path":124,"title":123,"description":769},"Plans, resource usage, the free trial, and what happens when a payment fails.",{"path":128,"title":127,"description":771},"Run the whole platform on a Kubernetes cluster you own, using the same two Helm charts we run ourselves.",{"path":773,"title":774,"description":690},"\u002Flegal\u002F.navigation","Legal",{"path":776,"title":777,"description":778},"\u002Flegal\u002Fdata-processing-agreement","Data Processing Agreement","How Lucity processes personal data on your behalf.",{"path":780,"title":781,"description":782},"\u002Flegal\u002Fprivacy-policy","Privacy Policy","How Lucity handles your data.",{"path":784,"title":785,"description":786},"\u002Flegal\u002Fterms-of-use","Terms of Use","Terms governing your use of Lucity.",1791216729096]