# Publish a Claude artifact

Built something in Claude as an artifact? You can publish it to Volly as-is:
download the artifact as a single `.html` or `.jsx`/`.tsx` file and drag it
into the dashboard — or connect the [MCP integration](https://volly.so/docs/mcp) and just ask
Claude to publish it for you.

## What works out of the box

Most artifacts run on Volly without any changes:

- **React components** (`.jsx`/`.tsx`) deploy as-is — no build step. Volly
  wraps the file in a page that renders it in the browser.
- **npm packages** like `recharts`, `lucide-react`, or `d3` load automatically
  from a CDN when the page opens.
- **Tailwind classes** work.
- **Saving data in the browser** with `localStorage` works.

## What doesn't carry over

A few things only exist inside Claude's artifact preview, and stop working on
any normal website — including Volly:

- **Asking Claude for answers from inside the app** (`window.claude`). On
  claude.ai the artifact can talk to Claude; a published app can't.
- **Claude's built-in storage** (`window.storage`). Data saved this way lives
  in claude.ai, not in your app.
- **Calling Anthropic's API from the page.** In the artifact preview these
  requests ride on your Claude session; on a real website they fail — and
  putting an API key into the page would expose it to everyone.

There's one more single-file limitation: the file can't import other local
files (`./utils` or `@/components/...`). If your project has multiple files,
build it and upload the output as a `.zip` instead — see
[Publish an app](https://volly.so/docs/publishing-apps).

## Volly warns you before you publish

When you upload a file that uses any of these Claude-only features, the
upload step shows a warning explaining what won't work. You can still publish
— the app may simply have dead features until it's fixed.

Each warning includes a ready-made **"Prompt to fix it"**. Copy it, paste it
back into your Claude conversation, and Claude rewrites the app to work as a
normal website — for example swapping `window.claude` calls for built-in data
and moving storage to the browser. Then publish the new version.