[{"data":1,"prerenderedAt":928},["ShallowReactive",2],{"navigation_docs":3,"section-navigation-docs":130,"-docs-claude-plugin":164,"-docs-claude-plugin-surround":835,"doc-previews":840},[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":111,"body":166,"description":828,"extension":829,"links":830,"meta":831,"navigation":832,"path":112,"seo":833,"stem":113,"__hash__":834},"docs\u002Fdocs\u002F18.claude-plugin.md",{"type":167,"value":168,"toc":820},"minimark",[169,193,198,211,282,289,303,307,315,318,347,368,372,379,399,406,409,413,416,422,429,440,444,451,786,795,799,816],[170,171,172,173,180,181,185,186,189,190,192],"p",{},"The Lucity plugin for ",[174,175,179],"a",{"href":176,"rel":177},"https:\u002F\u002Fcode.claude.com\u002Fdocs\u002Fen\u002Foverview",[178],"nofollow","Claude Code"," lets you deploy a project by asking for it, then keep working on it in the same conversation: reading logs, changing variables, rolling back. It contains a ",[182,183,184],"strong",{},"deploy skill"," that walks Claude through taking a local project to a running deployment, and the ",[182,187,188],{},"Lucity MCP server"," that gives Claude the tools to do it, from creating projects to reading logs. The server is part of the ",[174,191,107],{"href":108}," and runs on your machine.",[194,195,197],"h2",{"id":196},"install","Install",[170,199,200,201,205,206,210],{},"The plugin runs its MCP server through the Lucity CLI, so ",[174,202,204],{"href":203},"\u002Fdocs\u002Fcli#install","install the CLI"," and sign in with ",[207,208,209],"code",{},"lucity login"," first. Then add the Lucity repository as a plugin marketplace and install the plugin from it:",[212,213,214,262],"tabs",{},[215,216,218],"tabs-item",{"label":217},"Terminal",[219,220,225],"pre",{"className":221,"code":222,"language":223,"meta":224,"style":224},"language-bash shiki shiki-themes gruvbox-dark-medium gruvbox-dark-medium gruvbox-dark-medium","claude plugin marketplace add zeitlos\u002Flucity\nclaude plugin install lucity@lucity\n","bash","",[207,226,227,249],{"__ignoreMap":224},[228,229,232,236,240,243,246],"span",{"class":230,"line":231},"line",1,[228,233,235],{"class":234},"sX5TD","claude",[228,237,239],{"class":238},"sQLXx"," plugin",[228,241,242],{"class":238}," marketplace",[228,244,245],{"class":238}," add",[228,247,248],{"class":238}," zeitlos\u002Flucity\n",[228,250,252,254,256,259],{"class":230,"line":251},2,[228,253,235],{"class":234},[228,255,239],{"class":238},[228,257,258],{"class":238}," install",[228,260,261],{"class":238}," lucity@lucity\n",[215,263,264,272],{"label":179},[219,265,270],{"className":266,"code":268,"language":269,"meta":224},[267],"language-text","\u002Fplugin marketplace add zeitlos\u002Flucity\n\u002Fplugin install lucity@lucity\n","text",[207,271,268],{"__ignoreMap":224},[170,273,274,277,278,281],{},[207,275,276],{},"\u002Fplugin install"," opens the plugin's details first, so choose ",[182,279,280],{},"Install for you (user scope)"," there and confirm.",[170,283,284,285,288],{},"Either way, the plugin is installed for your user, so it is available in every project, and in the desktop app and VS Code on the same machine as well. Claude Code starts the MCP server when a session begins, so run ",[207,286,287],{},"\u002Freload-plugins"," in a session that was already open, or start a new one.",[170,290,291,292,295,296,299,300,302],{},"To check that it works, ask Claude which Lucity workspace you are in. If it has no Lucity tools, Claude Code most likely couldn't find the ",[207,293,294],{},"lucity"," command when the session started, so check that ",[207,297,298],{},"lucity version"," works in a new terminal and start a new session. If Claude says you are not signed in or your session has expired, run ",[207,301,209],{}," in a terminal and ask it to try again.",[194,304,306],{"id":305},"update","Update",[170,308,309,310,314],{},"The MCP server is part of the CLI, so it updates when you ",[174,311,313],{"href":312},"\u002Fdocs\u002Fcli#update","update the CLI",". Claude Code starts the server once per session, so the new version takes over in your next session.",[170,316,317],{},"The plugin itself doesn't update on its own, because Claude Code leaves automatic updates off for third-party marketplaces. Update it by hand:",[219,319,321],{"className":221,"code":320,"language":223,"meta":224,"style":224},"claude plugin marketplace update lucity\nclaude plugin update lucity@lucity\n",[207,322,323,337],{"__ignoreMap":224},[228,324,325,327,329,331,334],{"class":230,"line":231},[228,326,235],{"class":234},[228,328,239],{"class":238},[228,330,242],{"class":238},[228,332,333],{"class":238}," update",[228,335,336],{"class":238}," lucity\n",[228,338,339,341,343,345],{"class":230,"line":251},[228,340,235],{"class":234},[228,342,239],{"class":238},[228,344,333],{"class":238},[228,346,261],{"class":238},[170,348,349,350,353,354,357,358,360,361,364,365,367],{},"To have it update automatically instead, open ",[207,351,352],{},"\u002Fplugin"," in a terminal session, go to ",[182,355,356],{},"Marketplaces",", select ",[207,359,294],{}," and choose ",[182,362,363],{},"Enable auto-update",". Either way, the new version loads in your next session, or straight away with ",[207,366,287],{},".",[194,369,371],{"id":370},"the-deploy-skill","The deploy skill",[170,373,374,375,378],{},"Open Claude Code in your project and ask it to deploy, in your own words (\"deploy this to Lucity\", \"put this online\") or with ",[207,376,377],{},"\u002Flucity:deploy",". The skill then takes Claude through the whole deployment:",[380,381,382,386,393,396],"ul",{},[383,384,385],"li",{},"It works out what the code consists of: a single app, a monorepo, a frontend and an API, or a web process and a worker.",[383,387,388,389,367],{},"It creates the project and its services, provisions the PostgreSQL databases, key-value stores and buckets the code uses, and connects them with ",[174,390,392],{"href":391},"\u002Fdocs\u002Fvariables#dynamic-variables","dynamic variables",[383,394,395],{},"It deploys, and when a build or rollout fails, it reads the logs, fixes the configuration and tries again, up to three times.",[383,397,398],{},"It finishes with the URL and a summary of everything it set up, and why.",[170,400,401,402,405],{},"It asks you before it creates paid resources, and for anything it can't find out on its own, such as API keys for other services, data to import, or which repositories belong together. It doesn't edit your code to get a deploy through. When a fix needs a code change, for example because the app ignores the ",[207,403,404],{},"PORT"," variable, it proposes the change and leaves it to you.",[170,407,408],{},"After the first deploy, keep going in the same conversation. Ask why a service keeps crashing, to give it more memory, to add a domain, or to roll back to the previous deployment.",[194,410,412],{"id":411},"what-claude-can-see","What Claude can see",[170,414,415],{},"Claude can't read your secrets. The MCP server never returns the values of variables, or the credentials of databases, key-value stores and buckets. Claude can still check whether a variable holds the value it expects, and have the server generate secrets for your app that it never sees.",[170,417,418,419,421],{},"Keys for other services have to come from you, so add them in the dashboard, in the service's ",[182,420,63],{}," tab, instead of pasting them into the chat.",[170,423,424,425,428],{},"The server also masks runtime logs as well as it can before Claude sees them. Every variable value and credential it knows about is replaced with ",[207,426,427],{},"[redacted:\u003Cname>]",". Secrets that aren't stored in Lucity and values shorter than 8 characters get through, and build logs aren't masked.",[170,430,431,432,435,436,439],{},"This only covers what the MCP server returns. If Claude reads a ",[207,433,434],{},".env"," file or runs a command that prints secrets, such as ",[207,437,438],{},"lucity vars list",", it sees them like anything else it reads.",[194,441,443],{"id":442},"codex-cursor-and-other-agents","Codex, Cursor and other agents",[170,445,446,447,450],{},"The MCP server isn't tied to Claude Code. Any agent that can start a local MCP server can use it, with ",[207,448,449],{},"lucity mcp"," as the command. You get the same tools and the same protection of secrets, just without the deploy skill.",[212,452,453,486,607,634,670],{},[215,454,456,483],{"label":455},"Codex",[219,457,459],{"className":221,"code":458,"language":223,"meta":224,"style":224},"codex mcp add lucity -- lucity mcp\n",[207,460,461],{"__ignoreMap":224},[228,462,463,466,469,471,474,478,480],{"class":230,"line":231},[228,464,465],{"class":234},"codex",[228,467,468],{"class":238}," mcp",[228,470,245],{"class":238},[228,472,473],{"class":238}," lucity",[228,475,477],{"class":476},"s1Tsi"," --",[228,479,473],{"class":238},[228,481,482],{"class":238}," mcp\n",[170,484,485],{},"The Codex CLI, IDE extension and desktop app share this setting.",[215,487,489,496],{"label":488},"Cursor",[170,490,491,492,495],{},"Add the server to ",[207,493,494],{},"~\u002F.cursor\u002Fmcp.json",":",[219,497,501],{"className":498,"code":499,"language":500,"meta":224,"style":224},"language-json shiki shiki-themes gruvbox-dark-medium gruvbox-dark-medium gruvbox-dark-medium","{\n  \"mcpServers\": {\n    \"lucity\": {\n      \"command\": \"lucity\",\n      \"args\": [\"mcp\"]\n    }\n  }\n}\n","json",[207,502,503,509,526,540,564,589,595,601],{"__ignoreMap":224},[228,504,505],{"class":230,"line":231},[228,506,508],{"class":507},"si-ur","{\n",[228,510,511,514,518,521,523],{"class":230,"line":251},[228,512,513],{"class":507},"  \"",[228,515,517],{"class":516},"slqHI","mcpServers",[228,519,520],{"class":507},"\"",[228,522,495],{"class":507},[228,524,525],{"class":507}," {\n",[228,527,529,532,534,536,538],{"class":230,"line":528},3,[228,530,531],{"class":507},"    \"",[228,533,294],{"class":516},[228,535,520],{"class":507},[228,537,495],{"class":507},[228,539,525],{"class":507},[228,541,543,546,549,551,553,556,559,561],{"class":230,"line":542},4,[228,544,545],{"class":507},"      \"",[228,547,548],{"class":516},"command",[228,550,520],{"class":507},[228,552,495],{"class":507},[228,554,555],{"class":507}," \"",[228,557,294],{"class":558},"sIi04",[228,560,520],{"class":507},[228,562,563],{"class":507},",\n",[228,565,567,569,572,574,576,579,581,584,586],{"class":230,"line":566},5,[228,568,545],{"class":507},[228,570,571],{"class":516},"args",[228,573,520],{"class":507},[228,575,495],{"class":507},[228,577,578],{"class":507}," [",[228,580,520],{"class":507},[228,582,583],{"class":558},"mcp",[228,585,520],{"class":507},[228,587,588],{"class":507},"]\n",[228,590,592],{"class":230,"line":591},6,[228,593,594],{"class":507},"    }\n",[228,596,598],{"class":230,"line":597},7,[228,599,600],{"class":507},"  }\n",[228,602,604],{"class":230,"line":603},8,[228,605,606],{"class":507},"}\n",[215,608,610,613],{"label":609},"VS Code",[170,611,612],{},"For GitHub Copilot in VS Code:",[219,614,616],{"className":221,"code":615,"language":223,"meta":224,"style":224},"code --add-mcp '{\"name\":\"lucity\",\"command\":\"lucity\",\"args\":[\"mcp\"]}'\n",[207,617,618],{"__ignoreMap":224},[228,619,620,622,625,628,631],{"class":230,"line":231},[228,621,207],{"class":234},[228,623,624],{"class":476}," --add-mcp",[228,626,627],{"class":507}," '",[228,629,630],{"class":238},"{\"name\":\"lucity\",\"command\":\"lucity\",\"args\":[\"mcp\"]}",[228,632,633],{"class":507},"'\n",[215,635,637,663],{"label":636},"Gemini CLI",[219,638,640],{"className":221,"code":639,"language":223,"meta":224,"style":224},"gemini mcp add -s user lucity lucity mcp\n",[207,641,642],{"__ignoreMap":224},[228,643,644,647,649,651,654,657,659,661],{"class":230,"line":231},[228,645,646],{"class":234},"gemini",[228,648,468],{"class":238},[228,650,245],{"class":238},[228,652,653],{"class":476}," -s",[228,655,656],{"class":238}," user",[228,658,473],{"class":238},[228,660,473],{"class":238},[228,662,482],{"class":238},[170,664,665,666,669],{},"Without ",[207,667,668],{},"-s user",", the server is only added to the current project.",[215,671,673,695,779],{"label":672},"Claude Desktop",[170,674,675,676,679,680,679,683,686,687,690,691,694],{},"For chats in the Claude desktop app, open ",[182,677,678],{},"Settings"," → ",[182,681,682],{},"Developer",[182,684,685],{},"Edit Config"," and add the server. The app may not find commands on your shell's ",[207,688,689],{},"PATH",", so use the full path that ",[207,692,693],{},"which lucity"," prints:",[219,696,698],{"className":498,"code":697,"language":500,"meta":224,"style":224},"{\n  \"mcpServers\": {\n    \"lucity\": {\n      \"command\": \"\u002Fopt\u002Fhomebrew\u002Fbin\u002Flucity\",\n      \"args\": [\"mcp\"]\n    }\n  }\n}\n",[207,699,700,704,716,728,747,767,771,775],{"__ignoreMap":224},[228,701,702],{"class":230,"line":231},[228,703,508],{"class":507},[228,705,706,708,710,712,714],{"class":230,"line":251},[228,707,513],{"class":507},[228,709,517],{"class":516},[228,711,520],{"class":507},[228,713,495],{"class":507},[228,715,525],{"class":507},[228,717,718,720,722,724,726],{"class":230,"line":528},[228,719,531],{"class":507},[228,721,294],{"class":516},[228,723,520],{"class":507},[228,725,495],{"class":507},[228,727,525],{"class":507},[228,729,730,732,734,736,738,740,743,745],{"class":230,"line":542},[228,731,545],{"class":507},[228,733,548],{"class":516},[228,735,520],{"class":507},[228,737,495],{"class":507},[228,739,555],{"class":507},[228,741,742],{"class":558},"\u002Fopt\u002Fhomebrew\u002Fbin\u002Flucity",[228,744,520],{"class":507},[228,746,563],{"class":507},[228,748,749,751,753,755,757,759,761,763,765],{"class":230,"line":566},[228,750,545],{"class":507},[228,752,571],{"class":516},[228,754,520],{"class":507},[228,756,495],{"class":507},[228,758,578],{"class":507},[228,760,520],{"class":507},[228,762,583],{"class":558},[228,764,520],{"class":507},[228,766,588],{"class":507},[228,768,769],{"class":230,"line":591},[228,770,594],{"class":507},[228,772,773],{"class":230,"line":597},[228,774,600],{"class":507},[228,776,777],{"class":230,"line":603},[228,778,606],{"class":507},[170,780,781,782,785],{},"Then quit and reopen the app. Its ",[182,783,784],{},"Code"," tab is Claude Code, which uses the plugin instead.",[170,787,788,789,791,792,794],{},"Other agents, like Zed or opencode, take the same command in their own settings. If one can't find ",[207,790,294],{},", give it the full path that ",[207,793,693],{}," prints.",[194,796,798],{"id":797},"next-steps","Next steps",[380,800,801,806,811],{},[383,802,803,805],{},[174,804,107],{"href":108}," for the commands the MCP server comes with",[383,807,808,810],{},[174,809,63],{"href":64}," for the dynamic variables that connect your resources",[383,812,813,815],{},[174,814,55],{"href":56}," for what happens after Claude deploys",[817,818,819],"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 .s1Tsi, html code.shiki .s1Tsi{--shiki-light:#D3869B;--shiki-default:#D3869B;--shiki-dark:#D3869B}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}",{"title":224,"searchDepth":251,"depth":251,"links":821},[822,823,824,825,826,827],{"id":196,"depth":251,"text":197},{"id":305,"depth":251,"text":306},{"id":370,"depth":251,"text":371},{"id":411,"depth":251,"text":412},{"id":442,"depth":251,"text":443},{"id":797,"depth":251,"text":798},"Deploy and manage your services from Claude Code, Codex, Cursor or any other MCP client.","md",null,{},true,{"title":111,"description":828},"UwiU9poP_shLlTT3ySKcd4-sMycnhREIaikXKkPqxXM",[836,838],{"title":107,"path":108,"stem":109,"description":837,"children":-1},"Deploy and manage your services from a terminal or a CI pipeline.",{"title":115,"path":116,"stem":117,"description":839,"children":-1},"CPU and memory for every service, and disk usage for every volume.",[841,844,846,849,852,855,858,861,864,867,870,873,876,878,880,882,884,886,888,890,892,894,896,898,900,902,904,905,906,907,909,911,913,916,920,924],{"path":6,"title":842,"description":843},"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":845,"title":9,"description":830},"\u002Fdocs\u002Fguides\u002F.navigation",{"path":16,"title":847,"description":848},"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":850,"description":851},"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":853,"description":854},"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":856,"description":857},"Deploy an Astro site","Deploy an Astro site on Lucity, static by default and server rendered when you add an adapter.",{"path":32,"title":859,"description":860},"Deploy an Express API","Deploy an Express API on Lucity. Three requirements, none of them platform-specific.",{"path":36,"title":862,"description":863},"Deploy a FastAPI service","Deploy a FastAPI service on Lucity. Detection is picky about layout, and the fix is one setting.",{"path":40,"title":865,"description":866},"Deploy a Django project","Deploy a Django project on Lucity, with migrations that run themselves and static files that do not.",{"path":44,"title":868,"description":869},"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":871,"description":872},"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":874,"description":875},"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":877},"Services are the deployable units of a project: what they are, how they are configured, and how they scale.",{"path":56,"title":55,"description":879},"How a deployment goes live on Lucity, and the ways to trigger one.",{"path":60,"title":59,"description":881},"How Lucity turns your source code into a container image.",{"path":64,"title":63,"description":883},"Configuration for your services: service variables, shared variables, and dynamic variables.",{"path":68,"title":67,"description":885},"Put a service on the internet. Use a platform hostname for quick tests, or a domain you own.",{"path":72,"title":71,"description":887},"Managed PostgreSQL databases, replicated and backed up, connected to your services without copying credentials.",{"path":76,"title":75,"description":889},"S3-compatible buckets for uploads, exports and anything else your service needs to keep.",{"path":80,"title":79,"description":891},"Persistent disks for services that need to keep state on the filesystem.",{"path":84,"title":83,"description":893},"A Redis®-compatible key-value store for caching, sessions and queues.",{"path":88,"title":87,"description":895},"Workspaces represent your organization in Lucity, with their own members, isolation and billing.",{"path":92,"title":91,"description":897},"Projects group services, databases and the environments they run in.",{"path":96,"title":95,"description":899},"Development, staging, production: isolated copies of the same application.",{"path":100,"title":99,"description":901},"Download a project as a Helm chart and run it on a Kubernetes cluster of your own.",{"path":104,"title":103,"description":903},"The GraphQL API behind the dashboard, with an interactive playground.",{"path":108,"title":107,"description":837},{"path":112,"title":111,"description":828},{"path":116,"title":115,"description":839},{"path":120,"title":119,"description":908},"What your services print while they run, and the output of every deployment step.",{"path":124,"title":123,"description":910},"Plans, resource usage, the free trial, and what happens when a payment fails.",{"path":128,"title":127,"description":912},"Run the whole platform on a Kubernetes cluster you own, using the same two Helm charts we run ourselves.",{"path":914,"title":915,"description":830},"\u002Flegal\u002F.navigation","Legal",{"path":917,"title":918,"description":919},"\u002Flegal\u002Fdata-processing-agreement","Data Processing Agreement","How Lucity processes personal data on your behalf.",{"path":921,"title":922,"description":923},"\u002Flegal\u002Fprivacy-policy","Privacy Policy","How Lucity handles your data.",{"path":925,"title":926,"description":927},"\u002Flegal\u002Fterms-of-use","Terms of Use","Terms governing your use of Lucity.",1791216728723]