Skip to main content
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.

Install and sign in

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:
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.

Prepare your project

From your app’s root directory, run:
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:
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.

Check and test

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:
See temporary deployments for lifetime, upload limits, secrets, logs, and troubleshooting.

Publish when ready

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:
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.