Chataway Developers
Publishing

Publishing your app

From a working dev app to a listing in the Chataway store — publisher account, domain verification, signing in, uploading, and what happens during review.

#Checklist

Before your first upload:

  • Your MCP server is deployed at an https URL, and remote.mcpUrl points at it.
  • remote.domains lists every other host your panel and results use — and nothing more.
  • branding.icon is a real 512×512 icon (not the scaffold's placeholder), and you've added screenshots.
  • README.md describes the app for users — it becomes your store description.
  • Every grant, account and scope is explained in permissions.
  • Tools with side effects have confirm.
  • npm run validate (or npx chataway validate --store) passes.

#Publish from Chataway (one click)

If you built the app in an app project in Chataway (Apps → New app → Cloud app), you don't need the CLI or a developer token. The desktop app uses the account it is already signed in with:

  1. In the App strip, open Share → Publish to store….
  2. Publisher: pick one of yours, or create one right there (slug, name, optional website). Chataway writes publisher into plugin.json — and turns a local.* id into com.<publisher>.<app> — and commits it.
  3. Checks: the same store checks as chataway validate --store, with fix hints. Ask agent to fix sends them to the builder chat.
  4. Changes: what people will be asked to allow, compared with your live version.
  5. Publish: Chataway runs npm run build, packs exactly what chataway pack would, and uploads it. If the version is already in the store it offers Bump to x.y.z+1 (edits plugin.json, commits).

The strip then shows In review, Live v1.2 or Changes requested, and you get a notification when a reviewer decides. Only cloud apps can go to the store; an app that runs on your Mac is shared through GitHub instead.

Prefer the terminal or CI? The rest of this page is the CLI path.

#1. Create a publisher

Apps are published by a publisher — your company or you. Sign in at chataway.co/dashboard, open Developer → Publishers, and create one:

Field
SlugLowercase letters, digits and -, 3–40 characters. Goes into every manifest as publisher. Some slugs (like chataway, official, store) are reserved.
NameShown in the store: by Acme Inc.
WebsiteYour homepage.
DomainThe domain you'll verify, e.g. acme.com.

Invite teammates as members; anyone who's a member can publish that publisher's apps. A publisher always has at least one owner.

#2. Verify your domain

A verified publisher gets a badge in the store, and its updates that don't widen permissions are approved automatically. Unverified publishers' versions always go to a person.

In the dashboard, your publisher shows a token. Add it as a DNS TXT record on the domain itself (the apex, not a subdomain):

Type:  TXT
Name:  acme.com   (often written "@")
Value: chataway-verify=3b1f9c0e7d2a…

Then press Verify. DNS can take a while to propagate; if it's not found yet, try again later. You can remove the record after verification. Changing the publisher's domain resets verification.

#3. Sign in the CLI

bash
npx chataway login

The CLI shows a short code and opens chataway.co/developers/activate. Check the code matches, approve, and the CLI saves a developer token (~/.config/chataway/credentials.json, readable only by you). For CI, create a token in the dashboard and set CHATAWAY_TOKEN. See the CLI reference.

#4. Publish

bash
npm run publish     # builds the panel, then: npx chataway publish

The CLI packs the bundle, runs the store checks locally, and uploads it. Nothing is uploaded if a check fails.

  com.acme.my-app@1.0.0  in_review
  Review: https://chataway.co/dashboard/developer/apps/com.acme.my-app

The first upload of an id claims it for your publisher — nobody else can publish under that id afterwards.

#Review states

submitted checking in_review approved rejected published auto-approved → yanked
StatusMeaning
submittedUploaded.
checkingAutomated checks running (the same validator as the CLI).
in_reviewWaiting for a person. See below for when this happens.
approvedA reviewer approved it; it's being signed and published.
rejectedNot approved. The reviewer's notes say why; fix it and upload a new version.
publishedSigned and live in the store. Users get the update.
yankedWithdrawn; disabled on every Mac within the hour. See Versioning.

Follow a version with npx chataway status, in the developer dashboard, or by push notification on your phone (Chataway notifies the publisher's members when a review finishes).

#When a person reviews

A version goes to human review when any of these is true:

Reason
first-versionThe first version of an app.
permissions-widenedIt adds grants, domains, accounts or scopes, adds a file param, or changes mcpUrl compared with the last approved version.
publisher-unverifiedThe publisher hasn't verified its domain.
flagged:<code>A check raised a flag, e.g. flagged:bundle.obfuscated.

Otherwise — a verified publisher shipping an update that asks for nothing new — the version is approved automatically and published within seconds. See the review guidelines for what reviewers look for.

#After publishing

  • Your listing shows your name, tagline (the first sentence of description), icon, screenshots, README, permissions, domains, accounts and tools, publisher and verified badge, rating and install count.
  • Listed / unlisted. In the dashboard you can unlist an app: it disappears from search and categories, but existing installs keep working and it stays reachable by id.
  • Reviews and reports from users show up in the dashboard. Reports go to the review team as well.
  • Updates: bump version, publish again. See Updating & versioning.

#Common rejections at upload

ErrorFix
unknown_publisherCreate the publisher in the dashboard; publisher in plugin.json must be its slug.
not_a_memberAsk the publisher's owner to add you.
id_takenAnother publisher owns that id. Pick one under your own domain.
version_not_greaterBump version above every version you've uploaded before, including rejected ones.
validation_failedRun npx chataway validate --store and fix the errors.