Install the Zenith CLI, prepare your app, and launch your first temporary deployment.
Use the Zenith CLI to prepare your app, test it on Zenith, and submit it for publication.You need Node.js 20.10 or later and npm. Sign in to a Zenith account before launching a deployment. You do not need a public GitHub repository to test a local project. Publishing requires one.
The login command opens your browser. Sign in and approve CLI access, then return to your terminal.To print the sign-in URL instead of opening a browser:
zenith auth login --no-browser
Browser approval is still required. The browser must reach the CLI’s loopback callback on the same machine. For a remote terminal, forward the callback to that machine. --no-browser is not a token-based or unattended login.
In an existing project, init detects the framework and adds missing Zenith files. It preserves your source, existing Dockerfile, and existing Compose files. Review the generated files against your app’s real start command, port, dependencies, and data paths.In an empty directory, init offers a framework picker. You can select a starter explicitly:
mkdir my-appcd my-appzenith init --template node
Available starters are node, express, nextjs, vite-react, python, flask, django, go, and php. The python starter uses FastAPI. Use fallback for a generic starter. Use --project <dir> to work in another directory.
zenith init --force overwrites Dockerfile, zenith-compose.yml, and zenith.yaml. Leave it off when adapting an existing app.
init can also normalize an existing zenith.yaml marked generated: true without --force.Read the container guide and Compose guide when you need to change the generated files.
init and check work offline. check validates the preview policy and local environment file. --upload-size also checks archive size. It does not build or run your app.up uploads your local project, builds it on Zenith, and prints a temporary URL when it is ready. You do not need to build or push a container image yourself. Test the app at that URL, then stop it:
zenith logs --source runtimezenith down
See temporary deployments for lifetime, upload limits, secrets, logs, and troubleshooting.
Commit and push your app to a public GitHub repository. Include a root zenith-compose.yml. For build: ., include a root Dockerfile and the required app source. Then start the publishing flow:
zenith publishzenith publish status
Publishing submits a pinned commit for review. It does not make the app available in the marketplace immediately. See Publish your app for authorization, listing files, screenshots, and updates.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Zenith","description":"Use the Zenith CLI to prepare apps, test temporary deployments, and publish on Zenith Hosting.","colors":{"primary":"#5D45B6","light":"#8668DC","dark":"#9275DD"},"logo":{"light":"https://mintcdn.com/zenith-hosting/1Iaf63Z3n_Oc8RCE/assets/wordmark.svg?fit=max\u0026auto=format\u0026n=1Iaf63Z3n_Oc8RCE\u0026q=85\u0026s=4abfa32b5a206e2019e8095d5773d4b7","dark":"https://mintcdn.com/zenith-hosting/1Iaf63Z3n_Oc8RCE/assets/wordmark.svg?fit=max\u0026auto=format\u0026n=1Iaf63Z3n_Oc8RCE\u0026q=85\u0026s=4abfa32b5a206e2019e8095d5773d4b7","href":"https://zenith.hosting"},"favicon":"https://mintcdn.com/zenith-hosting/1Iaf63Z3n_Oc8RCE/favicon.svg?fit=max\u0026auto=format\u0026n=1Iaf63Z3n_Oc8RCE\u0026q=85\u0026s=603cf4507335ed184417c99e658f88d1","appearance":{"default":"system","strict":false},"background":{"color":{"light":"#FFFFFF","dark":"#111113"}},"navbar":{"links":[{"href":"https://github.com/zenith-hosting","label":"GitHub"}],"primary":{"type":"button","label":"Get started","href":"/content/quickstart"}},"footer":{"socials":{"github":"https://github.com/zenith-hosting"}},"styling":{"codeblocks":{"theme":{"light":"github-light-default","dark":"vitesse-black"}},"latex":false},"contextual":{"options":["copy","view","chatgpt","claude","perplexity","mcp","cursor","vscode"],"display":"header"},"markdown":{"instructions":["Start with https://docs.zenith.hosting/content/quickstart.md. Use NO_COLOR=1 for plain CLI output in non-interactive agent sessions. Run without a TTY and supply explicit template and publishing inputs; NO_COLOR does not bypass prompts or authorization.","For temporary deployments, read https://docs.zenith.hosting/content/up.md. For publishing and review, read https://docs.zenith.hosting/content/publish.md. A preview uploads local files; publishing uses a pinned public GitHub commit.","Before creating, changing, or approving zenith-compose.yml, read https://docs.zenith.hosting/llms.txt, then read https://docs.zenith.hosting/content/zenith-compose.md and the complete public schema at https://docs.zenith.hosting/content/zenith-compose-reference.md. Generate only documented fields and follow their validation and completion checks.","Before creating, changing, publishing, or verifying a container image for Zenith, read https://docs.zenith.hosting/content/containerise.md.","Treat these live Markdown pages as the source of truth instead of relying on memory or a copied Zenith Compose specification.","Do not push commits, submit an app, merge pull requests, publish container images, or change registry visibility unless the user explicitly authorizes that external action. Do not bypass browser OAuth, GitHub connection, or Developer Agreement acceptance."]},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"zenith-hosting","hasAudioNarration":false,"actualSubdomain":"zenith-hosting","customDomains":["docs.zenith.hosting"],"gitSource":{"type":"github","owner":"zenith-hosting","repo":"docs","deployBranch":"main","contentDirectory":"","isPrivate":false,"mountPath":"","label":""},"chroma":{"latestBuiltDeploymentHistoryId":"6ad9af8dbad04a2f7e31de03","collectionId":"ba094d68-8f8c-4b63-8c6a-845f4a965e85","liveDeploymentHistoryId":"6ad9af8dbad04a2f7e31de03","schemaVersion":"v3"},"entitlements":{"AI_CHAT":{"status":"DISABLED"},"WEB_MCP":{"status":"DISABLED"},"NARRATION":{"status":"DISABLED"}},"buildId":"6ad9af8dbad04a2f7e31de03","clientVersion":"0.0.4074","searchFilterCounts":[{"language":"default","tag":"App integrations","count":6},{"language":"default","tag":"App configuration","count":4},{"language":"default","tag":"CLI workflow","count":2},{"language":"default","tag":"Start here","count":2},{"language":"default","tag":"Sign in with Zenith","count":1},{"language":"default","tag":"zenith-compose.yml","count":1}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"comment-mode","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"style.css","content":"@font-face{font-family:\"Satoshi\";src:url(\"/assets/fonts/satoshi-400.woff2\") format(\"woff2\");font-style:normal;font-weight:400;font-display:swap}@font-face{font-family:\"Satoshi\";src:url(\"/assets/fonts/satoshi-500.woff2\") format(\"woff2\");font-style:normal;font-weight:500;font-display:swap}@font-face{font-family:\"Satoshi\";src:url(\"/assets/fonts/satoshi-700.woff2\") format(\"woff2\");font-style:normal;font-weight:700;font-display:swap}@font-face{font-family:\"Stack Sans Headline\";src:url(\"/assets/fonts/stack-sans-headline.woff2\") format(\"woff2\");font-style:normal;font-weight:200 700;font-display:swap}@font-face{font-family:\"Spline Sans Mono\";src:url(\"/assets/fonts/spline-sans-mono-latin.woff2\") format(\"woff2\");font-style:normal;font-weight:300 700;font-display:swap;unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6,\n U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122,\n U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD}@font-face{font-family:\"Spline Sans Mono\";src:url(\"/assets/fonts/spline-sans-mono-latin-ext.woff2\") format(\"woff2\");font-style:normal;font-weight:300 700;font-display:swap;unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7,\n U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F,\n U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F,\n U+A720-A7FF}:root{--zenith-purple: oklch(0.48 0.17 288);--zenith-purple-bright: oklch(0.575 0.17 292);--zenith-purple-wash: oklch(0.94 0.024 293);--zenith-canvas: oklch(0.972 0.003 290);--zenith-surface: oklch(1 0 0);--zenith-field: oklch(0.98 0.003 290);--zenith-edge: oklch(0.918 0.004 290);--zenith-ink: oklch(0.145 0.008 290);--zenith-muted: oklch(0.505 0.008 290);--zenith-cta-bg: #5d45b6;--zenith-cta-ink: white}html.dark{--zenith-purple: oklch(0.745 0.135 292);--zenith-purple-bright: oklch(0.79 0.12 292);--zenith-purple-wash: oklch(0.275 0.055 292);--zenith-canvas: oklch(0.155 0.006 290);--zenith-surface: oklch(0.17 0.006 290);--zenith-field: oklch(0.215 0.008 290);--zenith-edge: oklch(0.285 0.01 290);--zenith-ink: oklch(0.945 0.008 290);--zenith-muted: oklch(0.715 0.012 290);--zenith-cta-bg: #694cbd;--zenith-cta-ink: white}html{color-scheme:light;background:var(--zenith-surface)}html.dark{color-scheme:dark}body{color:var(--zenith-ink);background:var(--zenith-surface);font-family:\"Satoshi\", ui-sans-serif, sans-serif;font-kerning:normal;font-optical-sizing:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}h1,h2,h3,h4,h5,h6,#page-title{color:var(--zenith-ink);font-family:\"Stack Sans Headline\", \"Satoshi\", ui-sans-serif, sans-serif;text-wrap:balance}code,pre,kbd,samp{font-family:\"Spline Sans Mono\", ui-monospace, monospace}::selection{background:color-mix(in oklab, var(--zenith-purple-bright) 22%, transparent)}#navbar-transition{border-color:var(--zenith-edge);background:color-mix(in oklab, var(--zenith-surface) 94%, transparent)}#navbar .nav-logo img{width:auto;height:2rem}html.dark a[href=\"https://zenith.hosting\"] img{filter:brightness(1.65) saturate(0.78)}#search-bar-entry{border-radius:0.75rem;background:var(--zenith-field);box-shadow:0 0 0 1px var(--zenith-edge)}#sidebar,#sidebar-content{border-right:1px solid var(--zenith-edge);background:var(--zenith-surface)}#sidebar a[aria-current=\"page\"]{color:var(--zenith-purple);background:color-mix(in oklab, var(--zenith-purple-wash) 60%, var(--zenith-surface))}#content-container{color:var(--zenith-ink)}#content-container p,#content-container li,#content-container td{line-height:1.55}#content-container a:not([class]){color:var(--zenith-purple)}#content-container :not(pre)>code{border-color:var(--zenith-edge);background:var(--zenith-field)}#topbar-cta-button a>span:first-child{border-radius:0.75rem;background:var(--zenith-cta-bg)!important}#topbar-cta-button a>div,#topbar-cta-button a>div span,#topbar-cta-button a>div svg{color:var(--zenith-cta-ink)!important}#footer{border-color:var(--zenith-edge)}html.dark #content-container{color:var(--zenith-ink)}html.dark #content-container p,html.dark #content-container li,html.dark #content-container td,html.dark #content-container th{color:color-mix(in oklab, var(--zenith-ink) 88%, var(--zenith-muted))}html.dark #content-container hr,html.dark #content-container table,html.dark #content-container th,html.dark #content-container td{border-color:var(--zenith-edge)}#footer a[href*=\"utm_campaign=poweredBy\"]{display:none!important}body>div[role=\"status\"][aria-live=\"polite\"].fixed.z-999{display:none!important}@media (prefers-reduced-motion: no-preference){html{scroll-behavior:smooth}}"}],"page":{"pagePath":"content/quickstart","slug":"/content/quickstart","pageMetadata":{"title":"Get started with the CLI","sidebarTitle":"Quickstart","description":"Install the Zenith CLI, prepare your app, and launch your first temporary deployment.","href":"/content/quickstart"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Install the Zenith CLI, prepare your app, and launch your first temporary deployment.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,p:`p`,pre:`pre`,span:`span`,..._provideComponents(),...props.components},{CodeBlock,Heading,Visibility,Warning}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Visibility)_missingMdxReference(`Visibility`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`Use the `,_jsx(_components.a,{href:`https://github.com/zenith-hosting/zenith-cli`,children:`Zenith CLI`}),` to prepare your app, test it on Zenith, and submit it for publication.`]}),`\n`,_jsxs(_components.p,{children:[`You need Node.js `,_jsx(_components.code,{children:`20.10`}),` or later and npm. Sign in to a Zenith account before launching a deployment. You do not need a public GitHub repository to test a local project. Publishing requires one.`]}),`\n`,_jsx(Heading,{level:`2`,id:`install-and-sign-in`,children:`Install and sign in`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`3`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default vitesse-black`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#000`,color:`#1f2328`,\"--shiki-dark\":`#dbd7cacc`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`3`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#80A665`},children:`npm`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#C98A7D`},children:` install`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#C99076`},children:` -g`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#C98A7D`},children:` @zenith-hosting/cli`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#80A665`},children:`zenith`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#C99076`},children:` --version`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#80A665`},children:`zenith`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#C98A7D`},children:` auth`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#C98A7D`},children:` login`})]}),`\n`]})})}),`\n`,_jsx(Visibility,{for:`humans`,children:_jsx(_components.p,{children:`The login command opens your browser. Sign in and approve CLI access, then return to your terminal.`})}),`\n`,_jsx(_components.p,{children:`To print the sign-in URL instead of opening a browser:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default vitesse-black`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#000`,color:`#1f2328`,\"--shiki-dark\":`#dbd7cacc`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#80A665`},children:`zenith`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#C98A7D`},children:` auth`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#C98A7D`},children:` login`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#C99076`},children:` --no-browser`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`Browser approval is still required. The browser must reach the CLI’s loopback callback on the same machine. For a remote terminal, forward the callback to that machine. `,_jsx(_components.code,{children:`--no-browser`}),` is not a token-based or unattended login.`]}),`\n`,_jsx(Heading,{level:`2`,id:`prepare-your-project`,children:`Prepare your project`}),`\n`,_jsx(_components.p,{children:`From your app’s root directory, run:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default vitesse-black`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#000`,color:`#1f2328`,\"--shiki-dark\":`#dbd7cacc`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#80A665`},children:`zenith`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#C98A7D`},children:` init`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`In an existing project, `,_jsx(_components.code,{children:`init`}),` detects the framework and adds missing Zenith files. It preserves your source, existing `,_jsx(_components.code,{children:`Dockerfile`}),`, and existing Compose files. Review the generated files against your app’s real start command, port, dependencies, and data paths.`]}),`\n`,_jsxs(_components.p,{children:[`In an empty directory, `,_jsx(_components.code,{children:`init`}),` offers a framework picker. You can select a starter explicitly:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`3`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default vitesse-black`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#000`,color:`#1f2328`,\"--shiki-dark\":`#dbd7cacc`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`3`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#80A665`},children:`mkdir`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#C98A7D`},children:` my-app`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B8A965`},children:`cd`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#C98A7D`},children:` my-app`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#80A665`},children:`zenith`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#C98A7D`},children:` init`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#C99076`},children:` --template`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#C98A7D`},children:` node`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`Available starters are `,_jsx(_components.code,{children:`node`}),`, `,_jsx(_components.code,{children:`express`}),`, `,_jsx(_components.code,{children:`nextjs`}),`, `,_jsx(_components.code,{children:`vite-react`}),`, `,_jsx(_components.code,{children:`python`}),`, `,_jsx(_components.code,{children:`flask`}),`, `,_jsx(_components.code,{children:`django`}),`, `,_jsx(_components.code,{children:`go`}),`, and `,_jsx(_components.code,{children:`php`}),`. The `,_jsx(_components.code,{children:`python`}),` starter uses FastAPI. Use `,_jsx(_components.code,{children:`fallback`}),` for a generic starter. Use `,_jsx(_components.code,{children:`--project \u003cdir>`}),` to work in another directory.`]}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[_jsx(_components.code,{children:`zenith init --force`}),` overwrites `,_jsx(_components.code,{children:`Dockerfile`}),`, `,_jsx(_components.code,{children:`zenith-compose.yml`}),`, and `,_jsx(_components.code,{children:`zenith.yaml`}),`. Leave it off when adapting an existing app.`]})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`init`}),` can also normalize an existing `,_jsx(_components.code,{children:`zenith.yaml`}),` marked `,_jsx(_components.code,{children:`generated: true`}),` without `,_jsx(_components.code,{children:`--force`}),`.`]}),`\n`,_jsxs(_components.p,{children:[`Read the `,_jsx(_components.a,{href:`/content/containerise`,children:`container guide`}),` and `,_jsx(_components.a,{href:`/content/zenith-compose`,children:`Compose guide`}),` when you need to change the generated files.`]}),`\n`,_jsx(Heading,{level:`2`,id:`check-and-test`,children:`Check and test`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`2`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default vitesse-black`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#000`,color:`#1f2328`,\"--shiki-dark\":`#dbd7cacc`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`2`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#80A665`},children:`zenith`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#C98A7D`},children:` check`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#C99076`},children:` --upload-size`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#80A665`},children:`zenith`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#C98A7D`},children:` up`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`init`}),` and `,_jsx(_components.code,{children:`check`}),` work offline. `,_jsx(_components.code,{children:`check`}),` validates the preview policy and local environment file. `,_jsx(_components.code,{children:`--upload-size`}),` also checks archive size. It does not build or run your app.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`up`}),` uploads your local project, builds it on Zenith, and prints a temporary URL when it is ready. You do not need to build or push a container image yourself. Test the app at that URL, then stop it:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`2`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default vitesse-black`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#000`,color:`#1f2328`,\"--shiki-dark\":`#dbd7cacc`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`2`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#80A665`},children:`zenith`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#C98A7D`},children:` logs`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#C99076`},children:` --source`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#C98A7D`},children:` runtime`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#80A665`},children:`zenith`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#C98A7D`},children:` down`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`See `,_jsx(_components.a,{href:`/content/up`,children:`temporary deployments`}),` for lifetime, upload limits, secrets, logs, and troubleshooting.`]}),`\n`,_jsx(Heading,{level:`2`,id:`publish-when-ready`,children:`Publish when ready`}),`\n`,_jsxs(_components.p,{children:[`Commit and push your app to a public GitHub repository. Include a root `,_jsx(_components.code,{children:`zenith-compose.yml`}),`. For `,_jsx(_components.code,{children:`build: .`}),`, include a root `,_jsx(_components.code,{children:`Dockerfile`}),` and the required app source. Then start the publishing flow:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`2`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default vitesse-black`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#000`,color:`#1f2328`,\"--shiki-dark\":`#dbd7cacc`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`2`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#80A665`},children:`zenith`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#C98A7D`},children:` publish`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#80A665`},children:`zenith`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#C98A7D`},children:` publish`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#C98A7D`},children:` status`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`Publishing submits a pinned commit for review. It does not make the app available in the marketplace immediately. See `,_jsx(_components.a,{href:`/content/publish`,children:`Publish your app`}),` for authorization, listing files, screenshots, and updates.`]}),`\n`,_jsxs(Visibility,{for:`agents`,children:[_jsx(Heading,{level:`2`,id:`run-a-non-interactive-agent-session`,children:`Run a non-interactive agent session`}),_jsxs(_components.p,{children:[`Set `,_jsx(_components.code,{children:`NO_COLOR=1`}),` for plain, agent-readable progress instead of animated output. Run commands without a TTY and supply any required inputs explicitly:`]}),_jsx(CodeBlock,{filename:``,numberOfLines:`6`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default vitesse-black`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#000`,color:`#1f2328`,\"--shiki-dark\":`#dbd7cacc`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`6`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#CB7676`},children:`export`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#BD976A`},children:` NO_COLOR`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#444444`},children:`=`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4C9A91`},children:`1`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#80A665`},children:`zenith`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#C98A7D`},children:` init`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#C99076`},children:` --template`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#C98A7D`},children:` node`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#CB7676`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#C98A7D`},children:`/dev/null`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#80A665`},children:`zenith`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#C98A7D`},children:` check`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#C99076`},children:` --upload-size`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#CB7676`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#C98A7D`},children:`/dev/null`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#80A665`},children:`zenith`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#C98A7D`},children:` up`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#CB7676`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#C98A7D`},children:`/dev/null`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#80A665`},children:`zenith`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#C98A7D`},children:` logs`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#C99076`},children:` --source`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#C98A7D`},children:` runtime`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#CB7676`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#C98A7D`},children:`/dev/null`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#80A665`},children:`zenith`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#C98A7D`},children:` down`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#CB7676`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#C98A7D`},children:`/dev/null`})]}),`\n`]})})}),_jsxs(_components.p,{children:[`Choose the template that matches the app. The `,_jsx(_components.code,{children:`node`}),` template is an example. Do not overwrite existing app behavior to fit a starter.`]}),_jsxs(_components.p,{children:[_jsx(_components.code,{children:`NO_COLOR=1`}),` controls output. It does not disable every prompt or approve external actions. Omit `,_jsx(_components.code,{children:`--verbose`}),` and do not set `,_jsx(_components.code,{children:`ZENITH_VERBOSE=1`}),`, which enables animated output. Use explicit `,_jsx(_components.code,{children:`--template`}),` and publishing inputs instead of relying on terminal prompts.`]}),_jsxs(_components.p,{children:[`Reuse authorized CLI credentials. If login is needed, use `,_jsx(_components.code,{children:`NO_COLOR=1 zenith auth login --no-browser`}),` and hand the URL to the user. Do not copy browser cookies or try to bypass OAuth, GitHub connection, or the Developer Agreement.`]}),_jsxs(_components.p,{children:[`Before `,_jsx(_components.code,{children:`up`}),`, confirm that uploading the project and creating a temporary deployment are within the user’s request. Review archive inputs and keep secrets out of source and image layers. Do not push commits, publish images, change registry visibility, or submit an app without explicit authorization.`]}),_jsxs(_components.p,{children:[`After testing, report the session ID, URL, expiry, commands run, app flows verified, and cleanup result. Record the tested commit and any local changes. A ready URL alone does not prove that the app works. Follow the `,_jsx(_components.a,{href:`/content/publish#agent-publishing-workflow`,children:`publishing agent workflow`}),` only when submission is authorized.`]})]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"codeStyling":{"theme":{"light":"github-light-default","dark":"vitesse-black"}},"config":{},"pageMetadata":{"title":"Get started with the CLI","sidebarTitle":"Quickstart","description":"Install the Zenith CLI, prepare your app, and launch your first temporary deployment.","href":"/content/quickstart"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Install and sign in","slug":"install-and-sign-in","depth":2,"children":[]},{"title":"Prepare your project","slug":"prepare-your-project","depth":2,"children":[]},{"title":"Check and test","slug":"check-and-test","depth":2,"children":[]},{"title":"Publish when ready","slug":"publish-when-ready","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"zenith-hosting","siteName":"Zenith","title":"Get started with the CLI - Zenith","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-22T06:39:12.319Z","originalFileLocation":"content/quickstart.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Install the Zenith CLI, prepare your app, and launch your first temporary deployment.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Zenith\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/zenith-hosting/15Dl96z5TYB9iHUH/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/zenith-hosting/15Dl96z5TYB9iHUH/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/zenith-hosting/15Dl96z5TYB9iHUH/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/zenith-hosting/15Dl96z5TYB9iHUH/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/zenith-hosting/15Dl96z5TYB9iHUH/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/zenith-hosting/15Dl96z5TYB9iHUH/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/zenith-hosting/15Dl96z5TYB9iHUH/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/zenith-hosting/15Dl96z5TYB9iHUH/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/zenith-hosting/15Dl96z5TYB9iHUH/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Get started with the CLI - Zenith\">\u003cmeta data-mint-head property=\"og:description\" content=\"Install the Zenith CLI, prepare your app, and launch your first temporary deployment.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Zenith\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.zenith.hosting/content/quickstart\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://zenith-hosting.mintlify.site/_mintlify/api/og/v2?division=Start+here\u0026amp;title=Get+started+with+the+CLI\u0026amp;description=Install+the+Zenith+CLI%2C+prepare+your+app%2C+and+launch+your+first+temporary+deployment.\u0026amp;theme=bea2dd65243df29746aefac5\u0026amp;signature=6de2d25461484c1a4f82808dd8cca8ef53a5922fd43b7e6ffd057df537bedc93\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Get started with the CLI - Zenith\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Install the Zenith CLI, prepare your app, and launch your first temporary deployment.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://zenith-hosting.mintlify.site/_mintlify/api/og/v2?division=Start+here\u0026amp;title=Get+started+with+the+CLI\u0026amp;description=Install+the+Zenith+CLI%2C+prepare+your+app%2C+and+launch+your+first+temporary+deployment.\u0026amp;theme=bea2dd65243df29746aefac5\u0026amp;signature=6de2d25461484c1a4f82808dd8cca8ef53a5922fd43b7e6ffd057df537bedc93\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/zenith-hosting/15Dl96z5TYB9iHUH/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Zenith\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#5D45B6\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.zenith.hosting/content/quickstart\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/content/quickstart.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.zenith.hosting/#organization\",\"name\":\"Zenith\",\"url\":\"https://docs.zenith.hosting\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/zenith-hosting/1Iaf63Z3n_Oc8RCE/assets/wordmark.svg?fit=max\u0026auto=format\u0026n=1Iaf63Z3n_Oc8RCE\u0026q=85\u0026s=4abfa32b5a206e2019e8095d5773d4b7\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.zenith.hosting#website\",\"name\":\"Zenith\",\"url\":\"https://docs.zenith.hosting\",\"publisher\":{\"@id\":\"https://docs.zenith.hosting/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.zenith.hosting/content/quickstart#webpage\",\"url\":\"https://docs.zenith.hosting/content/quickstart\",\"name\":\"Get started with the CLI\",\"description\":\"Install the Zenith CLI, prepare your app, and launch your first temporary deployment.\",\"dateModified\":\"2026-10-22T06:39:12.319Z\",\"isPartOf\":{\"@id\":\"https://docs.zenith.hosting#website\"},\"breadcrumb\":{\"@id\":\"https://docs.zenith.hosting/content/quickstart#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.zenith.hosting/content/quickstart#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Start here\",\"item\":\"https://docs.zenith.hosting/index\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Get started with the CLI\",\"item\":\"https://docs.zenith.hosting/content/quickstart\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.zenith.hosting/content/quickstart#article\",\"headline\":\"Get started with the CLI\",\"name\":\"Get started with the CLI\",\"description\":\"Install the Zenith CLI, prepare your app, and launch your first temporary deployment.\",\"url\":\"https://docs.zenith.hosting/content/quickstart\",\"mainEntityOfPage\":{\"@id\":\"https://docs.zenith.hosting/content/quickstart#webpage\"},\"dateModified\":\"2026-10-22T06:39:12.319Z\",\"publisher\":{\"@id\":\"https://docs.zenith.hosting/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.zenith.hosting#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Zenith\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Zenith","nav":{"global":null,"pages":[{"group":"Start here","pages":[{"title":"Build, test, and publish with Zenith","description":"Use the Zenith CLI to prepare your app, test a temporary deployment, and publish it for review.","mode":"wide","href":"/index"},{"title":"Get started with the CLI","sidebarTitle":"Quickstart","href":"/content/quickstart"}]},{"group":"CLI workflow","pages":[{"title":"Test with zenith up","sidebarTitle":"Temporary deployments","description":"Build your local app on Zenith, test it at a temporary URL, inspect logs, and stop the deployment.","href":"/content/up"},{"title":"Publish with zenith publish","sidebarTitle":"Publish your app","href":"/content/publish"}]},{"group":"App configuration","pages":[{"title":"Prepare your container","href":"/content/containerise"},{"group":"zenith-compose.yml","root":{"title":"Create a zenith-compose.yml","href":"/content/zenith-compose"},"pages":[{"title":"zenith-compose.yml reference","sidebarTitle":"Reference","href":"/content/zenith-compose-reference"}]},{"title":"Configure environment variables and secrets","sidebarTitle":"Environment variables and secrets","href":"/content/environment-variables"},{"title":"Mount static configuration files","sidebarTitle":"Static configuration files","href":"/content/static-configuration"}]},{"group":"App integrations","pages":[{"title":"Send email with SMTP","sidebarTitle":"SMTP email","href":"/content/smtp-email"},{"group":"Sign in with Zenith","root":{"title":"Add Sign in with Zenith","sidebarTitle":"Sign in with Zenith","href":"/content/sign-in-with-zenith"},"pages":[{"title":"Sign in with Zenith reference","sidebarTitle":"Reference","href":"/content/sign-in-with-zenith-reference"}]},{"title":"Protect an app with forward authentication","sidebarTitle":"Forward authentication","href":"/content/forward-authentication"},{"title":"Configure public URLs and domains","sidebarTitle":"Public URLs and domains","href":"/content/public-urls"},{"title":"Store app data and expose files","sidebarTitle":"Persistent storage and files","href":"/content/persistent-storage"},{"title":"Expose configuration files","href":"/content/configuration-files"}]}]},"basePath":"","title":"Get started with the CLI - Zenith","buildId":"dpl_BLQvU86QFwq3AhPofSTw6q8dGWKm","deploymentId":"dpl_BLQvU86QFwq3AhPofSTw6q8dGWKm","dynamics":[],"chunks":[]}