Quickstart · testing phase
Publish an Astro site.
Four steps, from an empty terminal to a preview URL you can send to someone. Read straight down.
This guide doesn't require a technical expert. You'll need a terminal, an Astro project, and Node 22 unless you install with Homebrew. If the command line is new to you, a short primer first helps.
Using a coding agent? It can deploy for you: set it up.
Install
$ npm install -g curiouspubNode 22 or later. The command it installs is curious.
On a Mac with Homebrew, install it this way instead. It needs no Node.
$ brew install curiouspub/tap/curiouspubInstalled it before? Upgrade first: run the same install command again, or, with Homebrew:
$ brew upgrade curiouspubThen check that curious version says 0.1.7 or later.
If you installed the older Homebrew cask, also called curious, it no longer updates. Swap it for the formula:
$ brew uninstall --cask curious && brew install curiouspub/tap/curiouspubDeploy
From the project directory. The CLI checks your project first, then packs your source and uploads it. The build runs on curious.pub, in an isolated sandbox with no credentials of its own.
The project needs a committed lockfile, because the build installs exactly the versions you tested: package-lock.json, npm-shrinkwrap.json or pnpm-lock.yaml.
$ curious deployThe log streams as it happens: the same output the build tools print. Progress moves through extracting, installing, building, uploading.
Sign in, the first time
There is no separate sign-in step. The first deploy asks for an email address and sends a 6-digit code. No password, no OAuth, nothing to create.
Email address: you@example.com
Login codes for you@example.com go to that address.
Enter the 6-digit code: ······That email address is the only personal data an account has.
What you have now
Published.
https://<deploy>.curiously.dev- The address is published at once, and it can take up to about a minute before it starts answering. It is kept for 72 hours after your last deploy.
- It is public. Anyone with the address can open it, so don't publish anything you wouldn't want seen.
- It is immutable. Deploy again and you get a new URL; the old one is never edited.
- Free during the trial. New accounts are limited each day.
- Astro static sites, up to 3,000 source files and 30 MB, 5 MB per file. A build gets 5 minutes, and what it produces can be up to 1,000 files and 30 MB, badge included.
- Server-side rendering is not supported in the trial. A deploy that needs it is refused when its build finishes, with a plain explanation.
- The build's output has to be in
dist/, Astro's default. A customoutDirin astro.config is not supported yet, and a build that leaves nodist/is refused when it finishes. - Every published page carries a small published curiously badge, bottom-left. It loads nothing and tracks nothing.
- If you deploy the astro-minimal-starter template, its blog's search box stays empty. That template expects its host to build a Pagefind search index, and its own build doesn't make one. Starlight's built-in search works.
From a coding agent
With curious installed, add it to your agent, then ask the agent to deploy the site. In Claude Code:
$ claude mcp add curious -- curious mcpAny MCP client that can start a local command works the same way. The command is curious and the argument is mcp.
When it says no
A page, or a file in public/, whose name has a space or an accented letter is refused by the local check, with the file named, because names like that can't be served at a web address yet. Rename it and deploy again.
Every refusal names what stopped it, and ends with a line like Failure ID: lockfile-missing. If the deploy had already reached curious.pub, it also prints a Deploy ID line.
Tell us what broke
This is a test, and your reports are the point of it. Try something that should fail too, such as deploying a folder that isn't an Astro project, and see whether the message tells you what to do next.
Write to support at curious.pub with what you ran, what it printed (including any Deploy ID line), what you expected, and anything that confused you or felt slow.