zenith publish submits your app for review. It pins a full commit from a public GitHub repository, prepares the app listing, and returns a submission receipt. Submission is not immediate marketplace publication.
Publishing reads the pinned commit from GitHub. If your app uses build: ., Zenith can reuse a successful preview image after verifying that its source matches that commit. Otherwise, Zenith builds the commit before submission. You do not need to push an app image to GHCR. Apps that use public, pullable images can also be submitted.
Before you publish
Confirm that:
- You have installed the CLI and signed in.
- Your GitHub repository is public and you have permission to publish the app.
- You have connected a GitHub account to Zenith that can access the repository.
- The commit is pushed to GitHub and contains a root
zenith-compose.yml. - For
build: ., the commit contains a rootDockerfileand all required app source. Image-only submissions do not require a Dockerfile. - Image-based services can be pulled without registry credentials.
- You have accurate listing details and at least one real screenshot of the app.
zenith up before publishing. The CLI warns if the publish commit differs from your last preview or if the preview included local changes. A preview is recommended, not required for submission. Zenith verifies the source match before reusing a preview image. A preview URL alone does not prove that the selected commit was tested.
Submit from your terminal
From the public repository’s local checkout, run:origin remote and local HEAD by default. Commit and push the files you intend to submit before running it. Local changes that are not in the selected commit are not published.
1
Connect GitHub
If you have not connected GitHub, open the publishing dashboard and connect an account with access to the repository. This is separate from CLI sign-in.
2
Review the Developer Agreement
The first submission for an app requires agreement acceptance. Review the agreement and confirm it when the CLI asks. An existing acceptance can be reused.
3
Prepare the listing
Answer the CLI prompts for the app name, category, descriptions, maintainer contact, license, and screenshot paths. Supply accurate details and screenshots from the working app.
4
Wait for submission
The CLI waits for any required publish build, then sends the app for review. Save the receipt, including the product ID, version, and pinned commit.
--commit requires a full 40-character SHA that exists in the public GitHub repository. Use --owner and --repo to select a repository instead of inferring it from origin. --project <dir> selects the local project directory.
If more than one connected GitHub account could apply, use --github-account-id <id> or set ZENITH_GITHUB_ACCOUNT_ID. A Zenith login alone does not connect GitHub.
Supply listing files
Use--metadata to supply a JSON listing instead of answering listing prompts. Create listing.json with accurate app details:
listing.json
Business, Communication, Developer tools, Finance, Media, Productivity, Project management, or Security.
Keep the description within 300 characters and the detail within 1,000 characters. The CLI reading the JSON file does not mean the listing has passed server validation.
Once the Developer Agreement has been accepted for the app, submit the listing with actual image files:
- Metadata, icon, and screenshot paths resolve from
--project, which defaults to the current directory. - Icons and screenshots must be non-empty JPEG, PNG, or WebP files, no larger than
2 MiBeach. - Repeat
--screenshotfor multiple images. Replacement screenshots overwrite the saved set. The first becomes the cover. - Omit
--iconto retain the icon in the metadata or saved listing. - An existing saved listing can supply screenshots when you do not pass replacements. A first submission needs at least one.
--accept-agreement records that acceptance without a prompt. Use it only after reviewing the agreement and with authority to accept it. It is not a way to bypass authorization.
Track review and make updates
These commands accept the same listing and asset flags as
publish. Pass --metadata for a non-interactive listing update. You cannot revise a submission that is already in review.
A Git push alone does not update a submission or a running deployment. Use the appropriate publishing command and check its result.
You can also view feedback in the publishing dashboard. zenith publish open prints that dashboard URL.
Handle a failed submission
Use the reported error to choose the next action:- Sign-in or GitHub connection required: complete the missing authorization, then retry.
- Commit or manifest not found: push the selected commit and confirm that
zenith-compose.ymlis at its root. - Build failed: fix the Dockerfile or source, push a new commit, and submit that commit. Do not assume an earlier local preview tested the same files.
- Listing validation failed: correct the reported fields or image files before retrying.
- Already in review: check
zenith publish statusand wait for a state that allows revision.