Publishing
Apps, components, and schemas reach users through the Kiki Store. You publish from your own machine with the kiki CLI — there's nothing to do on a Kiki device.
Install the CLI
The CLI ships as @kiki/cli and runs anywhere Node does:
npm install -g @kiki/cliDescribe your artifact — kiki.json
Every publish reads a kiki.json in the current directory. It's the public face of your artifact in the store:
{
"name": "player",
"version": "1.2.0",
"type": "desktop-app",
"license": "MIT",
"sourceUrl": "https://github.com/me/player",
"ostreeRef": "kiki/apps/player",
"description": "A music player the agent can drive.",
"tagline": "Play anything, hands-free.",
"iconUrl": "https://example.com/icon.png",
"category": "media"
}| Field | What it is |
|---|---|
name, version | The artifact and its semantic version. |
type | One of desktop-app, headless-app, cli-tool, mcp-tool, system-service, agent, component, schema, theme, and a few more. |
license | Any SPDX license you choose (see Licensing). |
sourceUrl | Where the source lives. |
ostreeRef | The content-addressed reference to your built artifact in the store's object storage. |
The store-facing presentation — tagline, description, longDescription, iconUrl, bannerUrl, screenshotsDesktop, screenshotsMobile, category, developerName, developerUrl, and variants — is optional, and it's what users see on the listing.
Sign in
kiki loginThis opens your browser, you click Accept, and the CLI stores a token. Check it any time:
kiki whoamiFor CI, skip the browser and set KIKI_TOKEN in the environment instead.
Publish
kiki publish # publishes ./kiki.json
kiki publish --dry-run # print exactly what would be sent, change nothingThe store derives the publisher from your account's organization and the listing id from it — your artifact is published as your-org/name@version (e.g. acme/player@1.2.0). You can't publish under an identity you don't own.
Your artifact's bits are distributed as a content-addressed reference — every device that installs a given version shares one copy, and an update transfers only the difference. kiki publish records the metadata that points at it.
Licensing your app
The license field is yours to choose. Because the SDK is MIT it doesn't constrain you — MIT, Apache-2.0, GPL, proprietary, whatever fits. The store records and shows it so users know the terms.
Versioning
Each publish is a new version at a new content address. Devices and apps reference the version they depend on, so bumping a version never breaks consumers pinned to an older one — the same model as schemas and components.
Once published, your artifact appears in the Store in the dashboard and mobile app, where users install it to their devices in a tap.