---
title: Publishing
description: Publish an app from your AI through MCP or from the terminal with the crow CLI, what gets published, versions and rollback.
---

# Publishing

Publishing uploads a folder of web files and makes it the app's current version. Today you publish through your AI with the MCP server; the `crow` command-line tool is coming.

## From your AI (MCP)

Ask your AI to publish. It calls the `publish` tool with the built folder's files. For a new app it asks you for a name and who should see it; for an existing app it publishes a new version to the same address.

Your AI should build the project first (see the table below) and publish the output folder.

## From the terminal (crow CLI, coming soon)

> **Note** The `crow` CLI isn't on npm yet. Until it is, publish through your AI. This section describes how it will work.

```bash
npm install -g crow-nest
crow login            # opens crow-nest.com/device to sign in
crow publish          # in your project folder
```

`crow publish` recognizes Vite, React, Next.js, Astro, SvelteKit, Nuxt and Remix projects, runs the build on your machine, checks the output will work on Crow Nest, and publishes it. The first publish asks for a name and visibility and writes `.crow.json` with the app's ID, so later publishes update the same app. See [CLI](/cli) for every command.

## What to publish

Publish the **built output**, the folder with `index.html` in it:

| Project | Folder | Notes |
| --- | --- | --- |
| Plain HTML | the folder itself | |
| Vite, Astro | `dist` | Vite `base` must be `/` or `./` |
| Create React App, SvelteKit | `build` | SvelteKit needs `@sveltejs/adapter-static` |
| Next.js | `out` | Needs `output: "export"` in `next.config.js` |
| Nuxt | `.output/public` | From `nuxt generate` |
| Remix | `build/client` | SPA mode |

Put `crow.json` at the root of that folder if the app uses data, files, AI, APIs, live updates or server code. Put server code in `server/`; it's never served to browsers.

## An icon is required

Every app has an icon. It's the app's favicon in the browser tab, and how it shows on your dashboard and in your organization's app list. Publishing without one is refused with `icon_required`. Crow Nest looks for it in this order:

1. The `icon` key in `crow.json`.
2. The first `<link rel="icon">` (or `shortcut icon`, `apple-touch-icon`) in the root `index.html` that points at a file you publish.
3. `icon.svg`, `favicon.svg`, `favicon.png`, `favicon.ico` or `icon.png` at the root.

SVG, PNG, ICO and WebP work, up to 256 KB. PNG and WebP must be square and at least 32 pixels. An SVG needs a `viewBox` and can't hold scripts, `<foreignObject>`, `on*` attributes, `javascript:` links or links to other sites. If your folder has no icon, your AI can make a simple square SVG for you. Apps published before icons were required show a letter on a colored square until their next publish.

## Checks on every publish

The same checks run whether you publish with MCP or the CLI:

- **No secrets in files.** API keys and tokens in the app's files are refused. Use [secrets](/apis-and-secrets) instead.
- **A valid crow.json.** Unknown keys and invalid rules are refused with a message that says what to fix.
- **Server code is bundled.** Bare npm imports in `server/` are refused; bundle them first.
- **Sizes.** Up to 300 MB unzipped and 25,000 files per app; a single upload through the CLI is up to 100 MB zipped.

If a check fails, nothing is published and the previous version stays live.

## Versions and rollback

Every publish is a new version. To go back, ask your AI to roll back (the `rollback` tool), use the dashboard, or call `POST /tools/:id/rollback`. Rolling back also brings back that version's server code and schedules.

## A card before your first publish

A personal account needs a card on file to publish. New accounts add one when they sign up (Pay as you go charges nothing until your apps use paid services). If there isn't one, publishing answers `card_required` with a link to Settings, where you can add it. See [Plans and billing](/pricing#adding-a-card).

## Deleting an app

Ask your AI to delete it (the `delete_tool` tool asks you to confirm) or use the dashboard. The app stops working for everyone and its address can't be reused. Crow Nest staff can restore its data for 30 days.
