Guides
Artifacts
Publish a folder of static HTML, CSS and JS as its own subdomain, outside any project: from the dashboard, the CLI, or the hosted MCP connector.
An artifact is a static site that belongs to you, not to a project or organization: a folder with index.html at its root, served as-is at https://<name>.robodev.povio.dev (locally http://<name>.localhost:4000). Use it for a landing page, a prototype, a static export, or any HTML you want a link to without creating a project. Your artifacts are listed on the dashboard at /artifacts, where you can deploy a folder, copy or open each URL, and delete one or many; deleting stops serving at once and frees the name for anyone.
CLI
robodev artifacts deploy [dir] uploads the folder (default .) in one multipart request: every file under it, recursively, with its path relative to the folder; .git, node_modules, .robodev, dotfiles and symlinks are skipped, .well-known/ is kept. index.html at the root is required, and the folder must be under 1 GiB; both are checked before anything is sent. It prints the URL and tells you when the name you asked for was taken. list prints one line per artifact (newest first); delete takes ids, names or hosts, confirms on a TTY and refuses without --yes when stdin is not a TTY. --json prints exactly the REST body. Credentials follow robodev deploy: ROBODEV_DEPLOY_KEY, else deployToken in the folder's robodev/.robodev, else robodev auth. A deploy key acts as the user who created it; artifacts have no project, so no link is needed and there is no --project flag.
MCP connector
The hosted Robodev MCP connector (https://robodev.povio.dev/mcp) has deploy_artifact, list_artifacts and delete_artifact. They take no project_id: artifacts belong to the signed-in user. deploy_artifact takes files: [{ path, content, encoding? }] — path relative to the site root (index.html at the root is required), content as UTF-8 text, or base64 with encoding "base64" for images, fonts and other binary files — and an optional name. One call must stay under the connector's 30 MB body limit (base64 costs about a third, so roughly 22 MB of binary); larger sites ship with robodev artifacts deploy. The result is the URL, and a line saying when the requested name was taken. robodev mcp (the stdio server) does not have these tools.
API
- POST /v1/artifacts — multipart/form-data with an optional name field and one files part per file, the part filename being the path relative to the site root (assets/app.js). 201 { artifact: { id, name, host, url, status, fileCount, sizeBytes, createdAt }, requestedName, renamed }. Errors: invalid_name, reserved_name, invalid_path, missing_index, name_unavailable (409), storage_unconfigured (503), payload_too_large (413).
- GET /v1/artifacts — { artifacts } for the caller, newest first.
- DELETE /v1/artifacts/:id — { ok: true }; 404 not_found when the artifact is not yours or already gone.
- POST /v1/artifacts/batch-delete { ids } — { deleted }: the ids that were yours and are now gone; others are skipped.
- Who: your session (robodev auth or the dashboard), or a project deploy key (rdb_…), which acts as the user who created it — it sees and changes only that user's artifacts, and revoking the key leaves them in place. The key's project is not involved.
Names
The name is optional; without one you get artifact-xxxxxxxx (8 random lowercase letters and digits). A name must be 3–63 characters of lowercase letters, digits and hyphens, not starting or ending with a hyphen — the same rule as a project's Robodev URL slug, because artifacts and project slugs share one namespace under robodev.povio.dev. Reserved labels (storage, cname, www, api, admin and a few more, plus prj-* and tunnels) are refused. A free name is used exactly as requested; a taken name (another artifact, a project slug, or a pending project creation) becomes <name>-YYYYMMDD-xxxx (today's UTC date and 4 random characters), and the response says so (renamed: true). A live artifact likewise blocks a project from taking that slug. Deleting an artifact releases its name immediately, to you or anyone else.
Limits and serving
- No product caps: no limit on artifacts per user, files per artifact or total size beyond the 1 GiB request body (and 30 MB per MCP call).
- Files are served exactly as uploaded with their Content-Type from the extension, HTTP Range requests, and index.html as the directory index (/docs redirects to /docs/). There is no SPA fallback: an unknown path serves your 404.html if you uploaded one, else a plain 404.
- Artifacts are public; there is no password protection, request log or analytics.
- There is no in-place update: deploy again (with the same name, which may then be suffixed if someone took it) and delete the old one.