[{"data":1,"prerenderedAt":2158},["ShallowReactive",2],{"navigation_docs":3,"section-navigation-docs":130,"-docs-cli":164,"-docs-cli-surround":2065,"doc-previews":2070},[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":107,"body":166,"description":2059,"extension":2060,"links":2061,"meta":2062,"navigation":659,"path":108,"seo":2063,"stem":109,"__hash__":2064},"docs\u002Fdocs\u002F17.cli.md",{"type":167,"value":168,"toc":2035},"minimark",[169,183,188,358,361,373,381,385,388,405,412,416,428,439,443,462,465,533,544,559,565,569,580,585,605,804,811,814,818,845,873,876,880,883,889,1046,1053,1112,1117,1120,1126,1156,1159,1166,1191,1195,1198,1204,1210,1214,1217,1223,1233,1238,1241,1247,1273,1283,1288,1291,1297,1319,1382,1388,1436,1441,1451,1457,1462,1465,1471,1491,1512,1515,1540,1545,1548,1554,1596,1627,1661,1667,1670,1675,1678,1684,1755,1795,1861,1864,1869,1872,1878,1904,1907,1970,1974,1977,1983,1990,1994,1997,2003,2007,2031],[170,171,172,173,177,178,182],"p",{},"The ",[174,175,176],"code",{},"lucity"," command line tool deploys services, checks on rollouts, and manages variables and databases, from your terminal or a CI pipeline. It also runs the MCP server that gives AI agents access to your projects, which ",[179,180,181],"a",{"href":112},"Claude plugin & MCP"," covers.",[184,185,187],"h2",{"id":186},"install","Install",[189,190,191,234],"tabs",{},[192,193,195,205],"tabs-item",{"label":194},"macOS",[170,196,197,198,204],{},"Install it with ",[179,199,203],{"href":200,"rel":201},"https:\u002F\u002Fbrew.sh",[202],"nofollow","Homebrew",":",[206,207,212],"pre",{"className":208,"code":209,"language":210,"meta":211,"style":211},"language-bash shiki shiki-themes gruvbox-dark-medium gruvbox-dark-medium gruvbox-dark-medium","brew install --cask zeitlos\u002Ftap\u002Flucity\n","bash","",[174,213,214],{"__ignoreMap":211},[215,216,219,223,227,231],"span",{"class":217,"line":218},"line",1,[215,220,222],{"class":221},"sX5TD","brew",[215,224,226],{"class":225},"sQLXx"," install",[215,228,230],{"class":229},"s1Tsi"," --cask",[215,232,233],{"class":225}," zeitlos\u002Ftap\u002Flucity\n",[192,235,237,243,347],{"label":236},"Linux",[170,238,239,240,204],{},"Download the latest release and put the binary on your ",[174,241,242],{},"PATH",[206,244,246],{"className":208,"code":245,"language":210,"meta":211,"style":211},"VERSION=$(curl -fsSL https:\u002F\u002Fapi.github.com\u002Frepos\u002Fzeitlos\u002Flucity\u002Freleases\u002Flatest | sed -n 's\u002F.*\"tag_name\": *\"v\\([^\"]*\\)\".*\u002F\\1\u002Fp')\ncurl -fsSL \"https:\u002F\u002Fgithub.com\u002Fzeitlos\u002Flucity\u002Freleases\u002Fdownload\u002Fv$VERSION\u002Flucity_${VERSION}_linux_amd64.tar.gz\" | tar xz\nsudo install lucity \u002Fusr\u002Flocal\u002Fbin\u002Flucity\n",[174,247,248,292,333],{"__ignoreMap":211},[215,249,250,254,258,262,265,268,271,274,277,280,283,286,289],{"class":217,"line":218},[215,251,253],{"class":252},"sIi04","VERSION",[215,255,257],{"class":256},"s3drp","=",[215,259,261],{"class":260},"si-ur","$(",[215,263,264],{"class":221},"curl",[215,266,267],{"class":229}," -fsSL",[215,269,270],{"class":225}," https:\u002F\u002Fapi.github.com\u002Frepos\u002Fzeitlos\u002Flucity\u002Freleases\u002Flatest",[215,272,273],{"class":256}," |",[215,275,276],{"class":221}," sed",[215,278,279],{"class":229}," -n",[215,281,282],{"class":260}," '",[215,284,285],{"class":225},"s\u002F.*\"tag_name\": *\"v\\([^\"]*\\)\".*\u002F\\1\u002Fp",[215,287,288],{"class":260},"'",[215,290,291],{"class":260},")\n",[215,293,295,297,299,302,305,308,311,314,316,319,322,325,327,330],{"class":217,"line":294},2,[215,296,264],{"class":221},[215,298,267],{"class":229},[215,300,301],{"class":260}," \"",[215,303,304],{"class":225},"https:\u002F\u002Fgithub.com\u002Fzeitlos\u002Flucity\u002Freleases\u002Fdownload\u002Fv",[215,306,307],{"class":252},"$VERSION",[215,309,310],{"class":225},"\u002Flucity_",[215,312,313],{"class":260},"${",[215,315,253],{"class":252},[215,317,318],{"class":260},"}",[215,320,321],{"class":225},"_linux_amd64.tar.gz",[215,323,324],{"class":260},"\"",[215,326,273],{"class":256},[215,328,329],{"class":221}," tar",[215,331,332],{"class":225}," xz\n",[215,334,336,339,341,344],{"class":217,"line":335},3,[215,337,338],{"class":221},"sudo",[215,340,226],{"class":225},[215,342,343],{"class":225}," lucity",[215,345,346],{"class":225}," \u002Fusr\u002Flocal\u002Fbin\u002Flucity\n",[170,348,349,350,353,354,357],{},"On an ARM machine, use ",[174,351,352],{},"arm64"," in place of ",[174,355,356],{},"amd64",".",[170,359,360],{},"On Windows, use the Linux build inside WSL. To check that it works:",[206,362,364],{"className":208,"code":363,"language":210,"meta":211,"style":211},"lucity version\n",[174,365,366],{"__ignoreMap":211},[215,367,368,370],{"class":217,"line":218},[215,369,176],{"class":221},[215,371,372],{"class":225}," version\n",[206,374,379],{"className":375,"code":377,"language":378,"meta":211},[376],"language-text","lucity 26.9.1\n","text",[174,380,377],{"__ignoreMap":211},[184,382,384],{"id":383},"update","Update",[170,386,387],{},"On macOS:",[206,389,391],{"className":208,"code":390,"language":210,"meta":211,"style":211},"brew upgrade --cask lucity\n",[174,392,393],{"__ignoreMap":211},[215,394,395,397,400,402],{"class":217,"line":218},[215,396,222],{"class":221},[215,398,399],{"class":225}," upgrade",[215,401,230],{"class":229},[215,403,404],{"class":225}," lucity\n",[170,406,407,408,411],{},"On Linux, run the ",[179,409,186],{"href":410},"#install"," commands again, which always fetch the latest release.",[184,413,415],{"id":414},"sign-in","Sign in",[206,417,419],{"className":208,"code":418,"language":210,"meta":211,"style":211},"lucity login\n",[174,420,421],{"__ignoreMap":211},[215,422,423,425],{"class":217,"line":218},[215,424,176],{"class":221},[215,426,427],{"class":225}," login\n",[170,429,430,431,434,435,438],{},"Your browser opens, and you sign in with GitHub just like in the dashboard. Signing in also picks an active workspace. ",[174,432,433],{},"lucity account"," lists the workspaces you belong to, and ",[174,436,437],{},"lucity workspace \u003Cname>"," switches to another one.",[184,440,442],{"id":441},"ids","Ids",[444,445,446,447,450,451,454,455,457,458,461],"note",{},"The examples on this page use the Vouch app from the ",[179,448,449],{"href":6},"quickstart",", which is a project called ",[174,452,453],{},"vouch"," with a ",[174,456,453],{}," service and a ",[174,459,460],{},"feedback"," database in its development environment.",[170,463,464],{},"Commands address environments, services and databases by an id that starts with the workspace:",[466,467,468,484],"table",{},[469,470,471],"thead",{},[472,473,474,478,481],"tr",{},[475,476,477],"th",{},"Resource",[475,479,480],{},"Id",[475,482,483],{},"Example",[485,486,487,503,518],"tbody",{},[472,488,489,493,498],{},[490,491,492],"td",{},"Environment",[490,494,495],{},[174,496,497],{},"workspace\u002Fproject\u002Fenvironment",[490,499,500],{},[174,501,502],{},"zeitlos-software\u002Fvouch\u002Fdevelopment",[472,504,505,508,513],{},[490,506,507],{},"Service",[490,509,510],{},[174,511,512],{},"workspace\u002Fproject\u002Fenvironment\u002Fservice",[490,514,515],{},[174,516,517],{},"zeitlos-software\u002Fvouch\u002Fdevelopment\u002Fvouch",[472,519,520,523,528],{},[490,521,522],{},"Database",[490,524,525],{},[174,526,527],{},"workspace\u002Fproject\u002Fenvironment\u002Fdatabase",[490,529,530],{},[174,531,532],{},"zeitlos-software\u002Fvouch\u002Fdevelopment\u002Ffeedback",[170,534,535,536,539,540,543],{},"The project part is the project's identifier, not its display name. You can leave out the workspace, and the CLI fills in the active one, so with ",[174,537,538],{},"zeitlos-software"," active, ",[174,541,542],{},"vouch\u002Fdevelopment\u002Fvouch"," is the same service:",[206,545,547],{"className":208,"code":546,"language":210,"meta":211,"style":211},"lucity status vouch\u002Fdevelopment\u002Fvouch\n",[174,548,549],{"__ignoreMap":211},[215,550,551,553,556],{"class":217,"line":218},[215,552,176],{"class":221},[215,554,555],{"class":225}," status",[215,557,558],{"class":225}," vouch\u002Fdevelopment\u002Fvouch\n",[206,560,563],{"className":561,"code":562,"language":378,"meta":211},[376],"Service zeitlos-software\u002Fvouch\u002Fdevelopment\u002Fvouch: HEALTHY\nDeployment zeitlos-software\u002Fvouch\u002Fdevelopment\u002Fvouch\u002F56bc5cdfc5: ACTIVE\nReplicas:   1\u002F1 ready\nSource:     7b32d9e6\nRollout:    READY\n",[174,564,562],{"__ignoreMap":211},[184,566,568],{"id":567},"deploy-from-ci","Deploy from CI",[170,570,571,572,575,576,579],{},"A pipeline deploys with the same ",[174,573,574],{},"lucity deploy"," command you use in a terminal. With ",[174,577,578],{},"--wait",", the job waits until the release is live and fails when the deploy does, so the steps after it only run once the new version is up.",[581,582,584],"h3",{"id":583},"github-actions","GitHub Actions",[170,586,587,588,592,593,596,597,600,601,604],{},"GitHub Actions can deploy without any secret. Turn on ",[589,590,591],"strong",{},"CI Deploys"," for the service under ",[589,594,595],{},"Settings"," → ",[589,598,599],{},"Source",", and give the job the ",[174,602,603],{},"id-token: write"," permission:",[206,606,610],{"className":607,"code":608,"language":609,"meta":211,"style":211},"language-yaml shiki shiki-themes gruvbox-dark-medium gruvbox-dark-medium gruvbox-dark-medium","name: Deploy\non:\n  push:\n    branches: [main]\n\njobs:\n  deploy:\n    runs-on: ubuntu-latest\n    permissions:\n      id-token: write\n    steps:\n      - name: Install the Lucity CLI\n        env:\n          GH_TOKEN: ${{ github.token }}\n        run: |\n          gh release download --repo zeitlos\u002Flucity \\\n            --pattern 'lucity_*_linux_amd64.tar.gz' --output - | tar xz\n          sudo install lucity \u002Fusr\u002Flocal\u002Fbin\u002Flucity\n\n      - name: Deploy\n        run: lucity deploy vouch\u002Fdevelopment\u002Fvouch --ref \"$GITHUB_SHA\" --wait\n","yaml",[174,611,612,622,630,637,654,661,669,677,688,696,707,715,729,737,748,760,766,772,778,783,794],{"__ignoreMap":211},[215,613,614,617,619],{"class":217,"line":218},[215,615,616],{"class":256},"name",[215,618,204],{"class":260},[215,620,621],{"class":225}," Deploy\n",[215,623,624,627],{"class":217,"line":294},[215,625,626],{"class":229},"on",[215,628,629],{"class":260},":\n",[215,631,632,635],{"class":217,"line":335},[215,633,634],{"class":256},"  push",[215,636,629],{"class":260},[215,638,640,643,645,648,651],{"class":217,"line":639},4,[215,641,642],{"class":256},"    branches",[215,644,204],{"class":260},[215,646,647],{"class":260}," [",[215,649,650],{"class":225},"main",[215,652,653],{"class":260},"]\n",[215,655,657],{"class":217,"line":656},5,[215,658,660],{"emptyLinePlaceholder":659},true,"\n",[215,662,664,667],{"class":217,"line":663},6,[215,665,666],{"class":256},"jobs",[215,668,629],{"class":260},[215,670,672,675],{"class":217,"line":671},7,[215,673,674],{"class":256},"  deploy",[215,676,629],{"class":260},[215,678,680,683,685],{"class":217,"line":679},8,[215,681,682],{"class":256},"    runs-on",[215,684,204],{"class":260},[215,686,687],{"class":225}," ubuntu-latest\n",[215,689,691,694],{"class":217,"line":690},9,[215,692,693],{"class":256},"    permissions",[215,695,629],{"class":260},[215,697,699,702,704],{"class":217,"line":698},10,[215,700,701],{"class":256},"      id-token",[215,703,204],{"class":260},[215,705,706],{"class":225}," write\n",[215,708,710,713],{"class":217,"line":709},11,[215,711,712],{"class":256},"    steps",[215,714,629],{"class":260},[215,716,718,721,724,726],{"class":217,"line":717},12,[215,719,720],{"class":260},"      -",[215,722,723],{"class":256}," name",[215,725,204],{"class":260},[215,727,728],{"class":225}," Install the Lucity CLI\n",[215,730,732,735],{"class":217,"line":731},13,[215,733,734],{"class":256},"        env",[215,736,629],{"class":260},[215,738,740,743,745],{"class":217,"line":739},14,[215,741,742],{"class":256},"          GH_TOKEN",[215,744,204],{"class":260},[215,746,747],{"class":225}," ${{ github.token }}\n",[215,749,751,754,756],{"class":217,"line":750},15,[215,752,753],{"class":256},"        run",[215,755,204],{"class":260},[215,757,759],{"class":758},"sJHtc"," |\n",[215,761,763],{"class":217,"line":762},16,[215,764,765],{"class":225},"          gh release download --repo zeitlos\u002Flucity \\\n",[215,767,769],{"class":217,"line":768},17,[215,770,771],{"class":225},"            --pattern 'lucity_*_linux_amd64.tar.gz' --output - | tar xz\n",[215,773,775],{"class":217,"line":774},18,[215,776,777],{"class":225},"          sudo install lucity \u002Fusr\u002Flocal\u002Fbin\u002Flucity\n",[215,779,781],{"class":217,"line":780},19,[215,782,660],{"emptyLinePlaceholder":659},[215,784,786,788,790,792],{"class":217,"line":785},20,[215,787,720],{"class":260},[215,789,723],{"class":256},[215,791,204],{"class":260},[215,793,621],{"class":225},[215,795,797,799,801],{"class":217,"line":796},21,[215,798,753],{"class":256},[215,800,204],{"class":260},[215,802,803],{"class":225}," lucity deploy vouch\u002Fdevelopment\u002Fvouch --ref \"$GITHUB_SHA\" --wait\n",[170,805,806,807,357],{},"The job can then deploy the services that build from its repository and have CI Deploys turned on, and read and set their variables. For anything else, such as database commands, use an ",[179,808,810],{"href":809},"#other-ci-systems","API token",[444,812,813],{},"Any workflow in the repository can deploy these services, from any branch. Treat write access to the repository as deploy access.",[581,815,817],{"id":816},"other-ci-systems","Other CI systems",[170,819,820,821,596,824,827,828,831,832,835,836,840,841,844],{},"Use a workspace API token. An admin creates one under ",[589,822,823],{},"Workspace settings",[589,825,826],{},"API tokens",", with the role ",[589,829,830],{},"Member"," or ",[589,833,834],{},"Admin"," (see ",[179,837,839],{"href":838},"\u002Fdocs\u002Fworkspaces#api-tokens","workspaces","). The token is only shown once, so store it in your CI system's secrets as ",[174,842,843],{},"LUCITY_API_TOKEN",", and the CLI picks it up from there:",[206,846,848],{"className":208,"code":847,"language":210,"meta":211,"style":211},"lucity deploy vouch\u002Fdevelopment\u002Fvouch --ref \"$CI_COMMIT_SHA\" --wait\n",[174,849,850],{"__ignoreMap":211},[215,851,852,854,857,860,863,865,868,870],{"class":217,"line":218},[215,853,176],{"class":221},[215,855,856],{"class":225}," deploy",[215,858,859],{"class":225}," vouch\u002Fdevelopment\u002Fvouch",[215,861,862],{"class":229}," --ref",[215,864,301],{"class":260},[215,866,867],{"class":252},"$CI_COMMIT_SHA",[215,869,324],{"class":260},[215,871,872],{"class":229}," --wait\n",[170,874,875],{},"The token also determines the workspace, so there's nothing else to configure.",[184,877,879],{"id":878},"reference","Reference",[170,881,882],{},"Every command, flag and environment variable of the CLI.",[206,884,887],{"className":885,"code":886,"language":378,"meta":211},[376],"lucity \u003Ccommand> [arguments]\n",[174,888,886],{"__ignoreMap":211},[466,890,891,901],{},[469,892,893],{},[472,894,895,898],{},[475,896,897],{},"Command",[475,899,900],{},"Description",[485,902,903,916,929,942,955,968,981,994,1007,1020,1033],{},[472,904,905,913],{},[490,906,907],{},[179,908,910],{"href":909},"#login",[174,911,912],{},"login [--api \u003Curl>]",[490,914,915],{},"Sign in through your browser",[472,917,918,926],{},[490,919,920],{},[179,921,923],{"href":922},"#logout",[174,924,925],{},"logout",[490,927,928],{},"Discard the stored session",[472,930,931,939],{},[490,932,933],{},[179,934,936],{"href":935},"#account",[174,937,938],{},"account",[490,940,941],{},"Show who you are signed in as, and your workspaces",[472,943,944,952],{},[490,945,946],{},[179,947,949],{"href":948},"#workspace",[174,950,951],{},"workspace [\u003Cworkspace>]",[490,953,954],{},"Show or switch the active workspace",[472,956,957,965],{},[490,958,959],{},[179,960,962],{"href":961},"#deploy",[174,963,964],{},"deploy \u003Cservice>",[490,966,967],{},"Build and roll out a service",[472,969,970,978],{},[490,971,972],{},[179,973,975],{"href":974},"#status",[174,976,977],{},"status \u003Cservice>",[490,979,980],{},"Show the latest rollout status of a service",[472,982,983,991],{},[490,984,985],{},[179,986,988],{"href":987},"#vars",[174,989,990],{},"vars \u003Ccommand>",[490,992,993],{},"Manage service variables (list, available, set)",[472,995,996,1004],{},[490,997,998],{},[179,999,1001],{"href":1000},"#db",[174,1002,1003],{},"db \u003Ccommand>",[490,1005,1006],{},"Manage databases (create, list, credentials, expose, unexpose, delete)",[472,1008,1009,1017],{},[490,1010,1011],{},[179,1012,1014],{"href":1013},"#token",[174,1015,1016],{},"token [--account]",[490,1018,1019],{},"Print a bearer token for scripting",[472,1021,1022,1030],{},[490,1023,1024],{},[179,1025,1027],{"href":1026},"#mcp",[174,1028,1029],{},"mcp",[490,1031,1032],{},"Serve the Lucity MCP server on stdio",[472,1034,1035,1043],{},[490,1036,1037],{},[179,1038,1040],{"href":1039},"#version",[174,1041,1042],{},"version",[490,1044,1045],{},"Print the CLI version",[170,1047,1048,1049,1052],{},"Run ",[174,1050,1051],{},"lucity help \u003Ccommand>"," for the details of a command.",[466,1054,1055,1064],{},[469,1056,1057],{},[472,1058,1059,1062],{},[475,1060,1061],{},"Variable",[475,1063,900],{},[485,1065,1066,1076,1086,1095],{},[472,1067,1068,1073],{},[490,1069,1070],{},[174,1071,1072],{},"LUCITY_API_URL",[490,1074,1075],{},"Platform URL, in place of the one you signed in to",[472,1077,1078,1083],{},[490,1079,1080],{},[174,1081,1082],{},"LUCITY_WORKSPACE",[490,1084,1085],{},"Workspace to use, in place of the active one",[472,1087,1088,1092],{},[490,1089,1090],{},[174,1091,843],{},[490,1093,1094],{},"Workspace API token, used in place of the stored session",[472,1096,1097,1102],{},[490,1098,1099],{},[174,1100,1101],{},"LUCITY_CONFIG_DIR",[490,1103,1104,1105,831,1108,1111],{},"Directory holding the session (default: ",[174,1106,1107],{},"$XDG_CONFIG_HOME\u002Flucity",[174,1109,1110],{},"~\u002F.config\u002Flucity",")",[581,1113,1115],{"id":1114},"login",[174,1116,1114],{},[170,1118,1119],{},"Sign in through your browser.",[206,1121,1124],{"className":1122,"code":1123,"language":378,"meta":211},[376],"lucity login [--api \u003Curl>]\n",[174,1125,1123],{"__ignoreMap":211},[466,1127,1128,1137],{},[469,1129,1130],{},[472,1131,1132,1135],{},[475,1133,1134],{},"Flag",[475,1136,900],{},[485,1138,1139],{},[472,1140,1141,1146],{},[490,1142,1143],{},[174,1144,1145],{},"--api \u003Curl>",[490,1147,1148,1149,1151,1152,357],{},"Platform to sign in to. Defaults to ",[174,1150,1072],{},", then the platform you last signed in to, then ",[179,1153,1154],{"href":1154,"rel":1155},"https:\u002F\u002Flucity.cloud",[202],[170,1157,1158],{},"Opens your browser to sign in with GitHub and stores the session in the config directory. Only a refresh token is written to disk, and access tokens are fetched as commands need them.",[170,1160,1161,1162,1165],{},"The browser hands the session back to a listener on 127.0.0.1, on port 8765, 8766 or 8767, so sign in on the machine your browser runs on. To sign in on a remote machine, forward the port with ",[174,1163,1164],{},"ssh -L 8765:127.0.0.1:8765 \u003Chost>",", or use an API token instead.",[206,1167,1170],{"className":208,"code":1168,"filename":1169,"language":210,"meta":211,"style":211},"lucity login\nlucity login --api https:\u002F\u002Fpaas.example.com\n","Examples",[174,1171,1172,1178],{"__ignoreMap":211},[215,1173,1174,1176],{"class":217,"line":218},[215,1175,176],{"class":221},[215,1177,427],{"class":225},[215,1179,1180,1182,1185,1188],{"class":217,"line":294},[215,1181,176],{"class":221},[215,1183,1184],{"class":225}," login",[215,1186,1187],{"class":229}," --api",[215,1189,1190],{"class":225}," https:\u002F\u002Fpaas.example.com\n",[581,1192,1193],{"id":925},[174,1194,925],{},[170,1196,1197],{},"Discard the stored session.",[206,1199,1202],{"className":1200,"code":1201,"language":378,"meta":211},[376],"lucity logout\n",[174,1203,1201],{"__ignoreMap":211},[170,1205,1206,1207,357],{},"Deletes the refresh token from the config directory. The platform URL and the active workspace stay, ready for the next ",[174,1208,1209],{},"lucity login",[581,1211,1212],{"id":938},[174,1213,938],{},[170,1215,1216],{},"Show who you are signed in as.",[206,1218,1221],{"className":1219,"code":1220,"language":378,"meta":211},[376],"lucity account\n",[174,1222,1220],{"__ignoreMap":211},[170,1224,1225,1226,1229,1230,1232],{},"Prints your name and email, the platform, and each workspace you belong to with your role in it, marking the active one with ",[174,1227,1228],{},"*",". With ",[174,1231,843],{}," set, it describes the token instead.",[581,1234,1236],{"id":1235},"workspace",[174,1237,1235],{},[170,1239,1240],{},"Show or switch the active workspace.",[206,1242,1245],{"className":1243,"code":1244,"language":378,"meta":211},[376],"lucity workspace\nlucity workspace \u003Cworkspace>\n",[174,1246,1244],{"__ignoreMap":211},[466,1248,1249,1258],{},[469,1250,1251],{},[472,1252,1253,1256],{},[475,1254,1255],{},"Argument",[475,1257,900],{},[485,1259,1260],{},[472,1261,1262,1267],{},[490,1263,1264],{},[174,1265,1266],{},"\u003Cworkspace>",[490,1268,1269,1270,1272],{},"Workspace to switch to. ",[174,1271,433],{}," lists the ones you belong to.",[170,1274,1275,1276,1279,1280,1282],{},"Ids that leave out the workspace, such as ",[174,1277,1278],{},"shop\u002Fproduction\u002Fweb",", resolve against the active workspace. ",[174,1281,1082],{}," overrides it without changing the stored one.",[581,1284,1286],{"id":1285},"deploy",[174,1287,1285],{},[170,1289,1290],{},"Build and roll out a service.",[206,1292,1295],{"className":1293,"code":1294,"language":378,"meta":211},[376],"lucity deploy \u003Cservice> [flags]\n",[174,1296,1294],{"__ignoreMap":211},[466,1298,1299,1307],{},[469,1300,1301],{},[472,1302,1303,1305],{},[475,1304,1255],{},[475,1306,900],{},[485,1308,1309],{},[472,1310,1311,1316],{},[490,1312,1313],{},[174,1314,1315],{},"\u003Cservice>",[490,1317,1318],{},"Full service id (workspace\u002Fproject\u002Fenvironment\u002Fservice), or the project\u002Fenvironment\u002Fservice form relative to the active workspace.",[466,1320,1321,1329],{},[469,1322,1323],{},[472,1324,1325,1327],{},[475,1326,1134],{},[475,1328,900],{},[485,1330,1331,1341,1350,1362,1372],{},[472,1332,1333,1338],{},[490,1334,1335],{},[174,1336,1337],{},"--ref \u003Cref>",[490,1339,1340],{},"Branch, tag, or commit to build (default: the service's branch)",[472,1342,1343,1347],{},[490,1344,1345],{},[174,1346,578],{},[490,1348,1349],{},"Block until the release is live or failed, and exit non-zero on failure",[472,1351,1352,1357],{},[490,1353,1354],{},[174,1355,1356],{},"--timeout \u003Cdur>",[490,1358,1359,1360,1111],{},"Give up waiting after this long (default 20m, only with ",[174,1361,578],{},[472,1363,1364,1369],{},[490,1365,1366],{},[174,1367,1368],{},"--interval \u003Cdur>",[490,1370,1371],{},"Poll interval while waiting (default 4s)",[472,1373,1374,1379],{},[490,1375,1376],{},[174,1377,1378],{},"--json",[490,1380,1381],{},"Emit the final release as JSON on stdout",[170,1383,1384,1385,1387],{},"Progress goes to stderr. Without ",[174,1386,578],{}," the command returns as soon as the release is queued, and prints the release id on stdout.",[206,1389,1391],{"className":208,"code":1390,"filename":1169,"language":210,"meta":211,"style":211},"lucity deploy site\u002Fproduction\u002Fweb --ref \"$GITHUB_SHA\" --wait\nlucity deploy acme\u002Fsite\u002Fproduction\u002Fweb --ref v1.4.2 --wait --timeout 30m\n",[174,1392,1393,1413],{"__ignoreMap":211},[215,1394,1395,1397,1399,1402,1404,1406,1409,1411],{"class":217,"line":218},[215,1396,176],{"class":221},[215,1398,856],{"class":225},[215,1400,1401],{"class":225}," site\u002Fproduction\u002Fweb",[215,1403,862],{"class":229},[215,1405,301],{"class":260},[215,1407,1408],{"class":252},"$GITHUB_SHA",[215,1410,324],{"class":260},[215,1412,872],{"class":229},[215,1414,1415,1417,1419,1422,1424,1427,1430,1433],{"class":217,"line":294},[215,1416,176],{"class":221},[215,1418,856],{"class":225},[215,1420,1421],{"class":225}," acme\u002Fsite\u002Fproduction\u002Fweb",[215,1423,862],{"class":229},[215,1425,1426],{"class":225}," v1.4.2",[215,1428,1429],{"class":229}," --wait",[215,1431,1432],{"class":229}," --timeout",[215,1434,1435],{"class":225}," 30m\n",[170,1437,1438],{},[589,1439,1440],{},"Authentication",[170,1442,1443,1444,1447,1448,1450],{},"In GitHub Actions, deploys are keyless, so there is no secret to store. Grant the job ",[174,1445,1446],{},"permissions: id-token: write"," and turn on CI Deploys in the service's settings, and the CLI trades the job's OIDC token for a short-lived session that can only deploy services built from that repository. The session knows its workspace, so ",[174,1449,1082],{}," is optional.",[170,1452,1453,1454,1456],{},"For other CI systems, set ",[174,1455,843],{}," to a workspace API token, created in the Lucity dashboard. The workspace comes from the token.",[581,1458,1460],{"id":1459},"status",[174,1461,1459],{},[170,1463,1464],{},"Show the latest rollout status of a service.",[206,1466,1469],{"className":1467,"code":1468,"language":378,"meta":211},[376],"lucity status \u003Cservice> [--json]\n",[174,1470,1468],{"__ignoreMap":211},[466,1472,1473,1481],{},[469,1474,1475],{},[472,1476,1477,1479],{},[475,1478,1255],{},[475,1480,900],{},[485,1482,1483],{},[472,1484,1485,1489],{},[490,1486,1487],{},[174,1488,1315],{},[490,1490,1318],{},[466,1492,1493,1501],{},[469,1494,1495],{},[472,1496,1497,1499],{},[475,1498,1134],{},[475,1500,900],{},[485,1502,1503],{},[472,1504,1505,1509],{},[490,1506,1507],{},[174,1508,1378],{},[490,1510,1511],{},"Emit the service and its active deployment as JSON on stdout",[170,1513,1514],{},"Exit status is non-zero when the active rollout is FAILED or DEGRADED, so CI can gate on it.",[206,1516,1518],{"className":208,"code":1517,"filename":1169,"language":210,"meta":211,"style":211},"lucity status site\u002Fproduction\u002Fweb\nlucity status acme\u002Fsite\u002Fproduction\u002Fweb --json\n",[174,1519,1520,1529],{"__ignoreMap":211},[215,1521,1522,1524,1526],{"class":217,"line":218},[215,1523,176],{"class":221},[215,1525,555],{"class":225},[215,1527,1528],{"class":225}," site\u002Fproduction\u002Fweb\n",[215,1530,1531,1533,1535,1537],{"class":217,"line":294},[215,1532,176],{"class":221},[215,1534,555],{"class":225},[215,1536,1421],{"class":225},[215,1538,1539],{"class":229}," --json\n",[581,1541,1543],{"id":1542},"vars",[174,1544,1542],{},[170,1546,1547],{},"Manage service variables.",[206,1549,1552],{"className":1550,"code":1551,"language":378,"meta":211},[376],"lucity vars list \u003Cservice> [--json]\nlucity vars available \u003Cenv> [--json]\nlucity vars set \u003Cservice> KEY=VALUE... [--ref KEY=\u003CvariableID>]... [--json]\n",[174,1553,1551],{"__ignoreMap":211},[466,1555,1556,1564],{},[469,1557,1558],{},[472,1559,1560,1562],{},[475,1561,897],{},[475,1563,900],{},[485,1565,1566,1576,1586],{},[472,1567,1568,1573],{},[490,1569,1570],{},[174,1571,1572],{},"list",[490,1574,1575],{},"Show the variables set on a service",[472,1577,1578,1583],{},[490,1579,1580],{},[174,1581,1582],{},"available",[490,1584,1585],{},"Show the variables a service in the environment can link to, from its databases, key-value stores, buckets and shared variables",[472,1587,1588,1593],{},[490,1589,1590],{},[174,1591,1592],{},"set",[490,1594,1595],{},"Add or change variables on a service",[466,1597,1598,1606],{},[469,1599,1600],{},[472,1601,1602,1604],{},[475,1603,1255],{},[475,1605,900],{},[485,1607,1608,1617],{},[472,1609,1610,1614],{},[490,1611,1612],{},[174,1613,1315],{},[490,1615,1616],{},"Service id (workspace\u002Fproject\u002Fenvironment\u002Fservice) or its relative form.",[472,1618,1619,1624],{},[490,1620,1621],{},[174,1622,1623],{},"\u003Cenv>",[490,1625,1626],{},"Environment id (workspace\u002Fproject\u002Fenvironment) or its relative form.",[466,1628,1629,1637],{},[469,1630,1631],{},[472,1632,1633,1635],{},[475,1634,1134],{},[475,1636,900],{},[485,1638,1639,1652],{},[472,1640,1641,1646],{},[490,1642,1643],{},[174,1644,1645],{},"--ref KEY=\u003CvariableID>",[490,1647,1648,1649,1111],{},"Bind KEY to an available variable (list them with ",[174,1650,1651],{},"lucity vars available",[472,1653,1654,1658],{},[490,1655,1656],{},[174,1657,1378],{},[490,1659,1660],{},"Emit the result as JSON on stdout",[170,1662,1663,1666],{},[174,1664,1665],{},"lucity vars set"," merges your changes into the existing variables, so variables you do not name are kept. The service then rolls out again on its current image, without a new build.",[170,1668,1669],{},"Works with a signed-in session or a workspace API token. A keyless GitHub Actions session can list and set variables too, but only for services with CI Deploys turned on that build from its own repository.",[581,1671,1673],{"id":1672},"db",[174,1674,1672],{},[170,1676,1677],{},"Manage databases.",[206,1679,1682],{"className":1680,"code":1681,"language":378,"meta":211},[376],"lucity db create \u003Cenv> \u003Cname> [--size \u003Csize>] [--cpu \u003Ccpu>] [--memory \u003Cmem>] [--json]\nlucity db list \u003Cenv> [--json]\nlucity db credentials \u003Cdb> [--json]\nlucity db expose \u003Cdb> [--json]\nlucity db unexpose \u003Cdb> [--json]\nlucity db delete \u003Cdb> [--yes] [--json]\n",[174,1683,1681],{"__ignoreMap":211},[466,1685,1686,1694],{},[469,1687,1688],{},[472,1689,1690,1692],{},[475,1691,897],{},[475,1693,900],{},[485,1695,1696,1706,1715,1725,1735,1745],{},[472,1697,1698,1703],{},[490,1699,1700],{},[174,1701,1702],{},"create",[490,1704,1705],{},"Create a PostgreSQL database in an environment",[472,1707,1708,1712],{},[490,1709,1710],{},[174,1711,1572],{},[490,1713,1714],{},"List the databases in an environment",[472,1716,1717,1722],{},[490,1718,1719],{},[174,1720,1721],{},"credentials",[490,1723,1724],{},"Print the connection details, password included",[472,1726,1727,1732],{},[490,1728,1729],{},[174,1730,1731],{},"expose",[490,1733,1734],{},"Give the database a public hostname, reachable over TLS from this machine's address only",[472,1736,1737,1742],{},[490,1738,1739],{},[174,1740,1741],{},"unexpose",[490,1743,1744],{},"Remove the public hostname and its allowed addresses again",[472,1746,1747,1752],{},[490,1748,1749],{},[174,1750,1751],{},"delete",[490,1753,1754],{},"Delete the database and all of its data",[466,1756,1757,1765],{},[469,1758,1759],{},[472,1760,1761,1763],{},[475,1762,1255],{},[475,1764,900],{},[485,1766,1767,1775,1785],{},[472,1768,1769,1773],{},[490,1770,1771],{},[174,1772,1623],{},[490,1774,1626],{},[472,1776,1777,1782],{},[490,1778,1779],{},[174,1780,1781],{},"\u003Cname>",[490,1783,1784],{},"Database name (2-16 chars).",[472,1786,1787,1792],{},[490,1788,1789],{},[174,1790,1791],{},"\u003Cdb>",[490,1793,1794],{},"Database id (workspace\u002Fproject\u002Fenvironment\u002Fname) or its relative form.",[466,1796,1797,1805],{},[469,1798,1799],{},[472,1800,1801,1803],{},[475,1802,1134],{},[475,1804,900],{},[485,1806,1807,1817,1830,1843,1853],{},[472,1808,1809,1814],{},[490,1810,1811],{},[174,1812,1813],{},"--size \u003Csize>",[490,1815,1816],{},"Storage size for a new database (e.g. 32Gi)",[472,1818,1819,1824],{},[490,1820,1821],{},[174,1822,1823],{},"--cpu \u003Ccpu>",[490,1825,1826,1827,1111],{},"CPU limit for a new database, e.g. 500m (with ",[174,1828,1829],{},"--memory",[472,1831,1832,1837],{},[490,1833,1834],{},[174,1835,1836],{},"--memory \u003Cmem>",[490,1838,1839,1840,1111],{},"Memory limit for a new database, e.g. 512Mi (with ",[174,1841,1842],{},"--cpu",[472,1844,1845,1850],{},[490,1846,1847],{},[174,1848,1849],{},"--yes",[490,1851,1852],{},"Skip the confirmation prompt on delete",[472,1854,1855,1859],{},[490,1856,1857],{},[174,1858,1378],{},[490,1860,1660],{},[170,1862,1863],{},"Needs a signed-in session or a workspace API token. A keyless GitHub Actions session cannot manage databases.",[581,1865,1867],{"id":1866},"token",[174,1868,1866],{},[170,1870,1871],{},"Print a bearer token for scripting.",[206,1873,1876],{"className":1874,"code":1875,"language":378,"meta":211},[376],"lucity token [--account]\n",[174,1877,1875],{"__ignoreMap":211},[466,1879,1880,1888],{},[469,1881,1882],{},[472,1883,1884,1886],{},[475,1885,1134],{},[475,1887,900],{},[485,1889,1890],{},[472,1891,1892,1897],{},[490,1893,1894],{},[174,1895,1896],{},"--account",[490,1898,1899,1900,1903],{},"Print the account token instead. API calls that read from GitHub on your behalf send it in the ",[174,1901,1902],{},"X-Lucity-Account-Token"," header.",[170,1905,1906],{},"Prints a short-lived access token for the active workspace, to call the API with directly.",[206,1908,1910],{"className":208,"code":1909,"filename":1169,"language":210,"meta":211,"style":211},"curl https:\u002F\u002Flucity.cloud\u002Fgraphql \\\n  -H \"Authorization: Bearer $(lucity token)\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\"query\": \"{ projects { id } }\"}'\n",[174,1911,1912,1922,1944,1957],{"__ignoreMap":211},[215,1913,1914,1916,1919],{"class":217,"line":218},[215,1915,264],{"class":221},[215,1917,1918],{"class":225}," https:\u002F\u002Flucity.cloud\u002Fgraphql",[215,1920,1921],{"class":229}," \\\n",[215,1923,1924,1927,1929,1932,1934,1936,1939,1942],{"class":217,"line":294},[215,1925,1926],{"class":229},"  -H",[215,1928,301],{"class":260},[215,1930,1931],{"class":225},"Authorization: Bearer ",[215,1933,261],{"class":260},[215,1935,176],{"class":221},[215,1937,1938],{"class":225}," token",[215,1940,1941],{"class":260},")\"",[215,1943,1921],{"class":229},[215,1945,1946,1948,1950,1953,1955],{"class":217,"line":335},[215,1947,1926],{"class":229},[215,1949,301],{"class":260},[215,1951,1952],{"class":225},"Content-Type: application\u002Fjson",[215,1954,324],{"class":260},[215,1956,1921],{"class":229},[215,1958,1959,1962,1964,1967],{"class":217,"line":639},[215,1960,1961],{"class":229},"  -d",[215,1963,282],{"class":260},[215,1965,1966],{"class":225},"{\"query\": \"{ projects { id } }\"}",[215,1968,1969],{"class":260},"'\n",[581,1971,1972],{"id":1029},[174,1973,1029],{},[170,1975,1976],{},"Serve the Lucity MCP server on stdio.",[206,1978,1981],{"className":1979,"code":1980,"language":378,"meta":211},[376],"lucity mcp\n",[174,1982,1980],{"__ignoreMap":211},[170,1984,1985,1986,1989],{},"Speaks the Model Context Protocol on stdin and stdout, so an AI agent can create projects, deploy, provision databases and read logs with your session. MCP clients start the server themselves, so configure ",[174,1987,1988],{},"lucity mcp"," as its command rather than running it by hand.",[581,1991,1992],{"id":1042},[174,1993,1042],{},[170,1995,1996],{},"Print the CLI version.",[206,1998,2001],{"className":1999,"code":2000,"language":378,"meta":211},[376],"lucity version\nlucity --version\n",[174,2002,2000],{"__ignoreMap":211},[184,2004,2006],{"id":2005},"next-steps","Next steps",[2008,2009,2010,2016,2021,2026],"ul",{},[2011,2012,2013,2015],"li",{},[179,2014,55],{"href":56}," for what happens between a commit and a running service",[2011,2017,2018,2020],{},[179,2019,63],{"href":64}," for service, shared and dynamic variables",[2011,2022,2023,2025],{},[179,2024,181],{"href":112}," for letting an agent deploy for you",[2011,2027,2028,2030],{},[179,2029,103],{"href":104}," for everything the CLI doesn't cover",[2032,2033,2034],"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 pre.shiki code .s1Tsi, html code.shiki .s1Tsi{--shiki-light:#D3869B;--shiki-default:#D3869B;--shiki-dark:#D3869B}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 .sIi04, html code.shiki .sIi04{--shiki-light:#83A598;--shiki-default:#83A598;--shiki-dark:#83A598}html pre.shiki code .s3drp, html code.shiki .s3drp{--shiki-light:#8EC07C;--shiki-default:#8EC07C;--shiki-dark:#8EC07C}html pre.shiki code .si-ur, html code.shiki .si-ur{--shiki-light:#A89984;--shiki-default:#A89984;--shiki-dark:#A89984}html pre.shiki code .sJHtc, html code.shiki .sJHtc{--shiki-light:#FB4934;--shiki-default:#FB4934;--shiki-dark:#FB4934}",{"title":211,"searchDepth":294,"depth":294,"links":2036},[2037,2038,2039,2040,2041,2045,2058],{"id":186,"depth":294,"text":187},{"id":383,"depth":294,"text":384},{"id":414,"depth":294,"text":415},{"id":441,"depth":294,"text":442},{"id":567,"depth":294,"text":568,"children":2042},[2043,2044],{"id":583,"depth":335,"text":584},{"id":816,"depth":335,"text":817},{"id":878,"depth":294,"text":879,"children":2046},[2047,2048,2049,2050,2051,2052,2053,2054,2055,2056,2057],{"id":1114,"depth":335,"text":1114},{"id":925,"depth":335,"text":925},{"id":938,"depth":335,"text":938},{"id":1235,"depth":335,"text":1235},{"id":1285,"depth":335,"text":1285},{"id":1459,"depth":335,"text":1459},{"id":1542,"depth":335,"text":1542},{"id":1672,"depth":335,"text":1672},{"id":1866,"depth":335,"text":1866},{"id":1029,"depth":335,"text":1029},{"id":1042,"depth":335,"text":1042},{"id":2005,"depth":294,"text":2006},"Deploy and manage your services from a terminal or a CI pipeline.","md",null,{},{"title":107,"description":2059},"ykbbyVAiKHX6yJkSvPyt094vcD2KXpVTBJ2GkMuHmhU",[2066,2068],{"title":103,"path":104,"stem":105,"description":2067,"children":-1},"The GraphQL API behind the dashboard, with an interactive playground.",{"title":111,"path":112,"stem":113,"description":2069,"children":-1},"Deploy and manage your services from Claude Code, Codex, Cursor or any other MCP client.",[2071,2074,2076,2079,2082,2085,2088,2091,2094,2097,2100,2103,2106,2108,2110,2112,2114,2116,2118,2120,2122,2124,2126,2128,2130,2132,2133,2134,2135,2137,2139,2141,2143,2146,2150,2154],{"path":6,"title":2072,"description":2073},"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":2075,"title":9,"description":2061},"\u002Fdocs\u002Fguides\u002F.navigation",{"path":16,"title":2077,"description":2078},"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":2080,"description":2081},"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":2083,"description":2084},"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":2086,"description":2087},"Deploy an Astro site","Deploy an Astro site on Lucity, static by default and server rendered when you add an adapter.",{"path":32,"title":2089,"description":2090},"Deploy an Express API","Deploy an Express API on Lucity. Three requirements, none of them platform-specific.",{"path":36,"title":2092,"description":2093},"Deploy a FastAPI service","Deploy a FastAPI service on Lucity. Detection is picky about layout, and the fix is one setting.",{"path":40,"title":2095,"description":2096},"Deploy a Django project","Deploy a Django project on Lucity, with migrations that run themselves and static files that do not.",{"path":44,"title":2098,"description":2099},"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":2101,"description":2102},"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":2104,"description":2105},"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":2107},"Services are the deployable units of a project: what they are, how they are configured, and how they scale.",{"path":56,"title":55,"description":2109},"How a deployment goes live on Lucity, and the ways to trigger one.",{"path":60,"title":59,"description":2111},"How Lucity turns your source code into a container image.",{"path":64,"title":63,"description":2113},"Configuration for your services: service variables, shared variables, and dynamic variables.",{"path":68,"title":67,"description":2115},"Put a service on the internet. Use a platform hostname for quick tests, or a domain you own.",{"path":72,"title":71,"description":2117},"Managed PostgreSQL databases, replicated and backed up, connected to your services without copying credentials.",{"path":76,"title":75,"description":2119},"S3-compatible buckets for uploads, exports and anything else your service needs to keep.",{"path":80,"title":79,"description":2121},"Persistent disks for services that need to keep state on the filesystem.",{"path":84,"title":83,"description":2123},"A Redis®-compatible key-value store for caching, sessions and queues.",{"path":88,"title":87,"description":2125},"Workspaces represent your organization in Lucity, with their own members, isolation and billing.",{"path":92,"title":91,"description":2127},"Projects group services, databases and the environments they run in.",{"path":96,"title":95,"description":2129},"Development, staging, production: isolated copies of the same application.",{"path":100,"title":99,"description":2131},"Download a project as a Helm chart and run it on a Kubernetes cluster of your own.",{"path":104,"title":103,"description":2067},{"path":108,"title":107,"description":2059},{"path":112,"title":111,"description":2069},{"path":116,"title":115,"description":2136},"CPU and memory for every service, and disk usage for every volume.",{"path":120,"title":119,"description":2138},"What your services print while they run, and the output of every deployment step.",{"path":124,"title":123,"description":2140},"Plans, resource usage, the free trial, and what happens when a payment fails.",{"path":128,"title":127,"description":2142},"Run the whole platform on a Kubernetes cluster you own, using the same two Helm charts we run ourselves.",{"path":2144,"title":2145,"description":2061},"\u002Flegal\u002F.navigation","Legal",{"path":2147,"title":2148,"description":2149},"\u002Flegal\u002Fdata-processing-agreement","Data Processing Agreement","How Lucity processes personal data on your behalf.",{"path":2151,"title":2152,"description":2153},"\u002Flegal\u002Fprivacy-policy","Privacy Policy","How Lucity handles your data.",{"path":2155,"title":2156,"description":2157},"\u002Flegal\u002Fterms-of-use","Terms of Use","Terms governing your use of Lucity.",1791216726227]