Publishing & frameworks
Build and share a working prototype with one command. After installing the CLI
and linking your project with artor init, run this from its folder:
artor publish # build and ship the next version → latest
artor publish --alias staging # publish to "staging"; see named-link behavior belowYou don’t edit config files, remember build flags, or pick a “deploy type”. Artor works out
what kind of app you built and prepares it for preview. Plain artor publish creates a new
numbered version; publishing to an existing named link can replace its
version in overwrite mode.
One command, any framework
Artor supports both working apps and static pages:
- Live apps can process forms, fetch data, and run other app features.
- Static sites display the pages and assets you publish, including plain HTML prototypes.
| Your project | How Artor serves it |
|---|---|
| Next.js | Live app (full Next.js) |
| React Router v7 (framework mode) | Live app |
| Remix | Live app |
| SvelteKit (Node adapter) | Live app |
| SvelteKit (static adapter) | Static site |
| TanStack Start | Live app |
| TanStack Router (SPA, no Start) | Static site |
| Vite | Static site |
| Astro | Static site |
| Create React App | Static site |
| Plain HTML (no framework) | Static site |
Next.js uses its live-app build by default. Use --static only if the prototype doesn’t
need features such as API routes or server rendering. React Router, Remix, and SvelteKit
Node builds need a live app and can’t be forced to static.
TanStack Start needs its Node build output. If publishing can’t find it, give the error
to your coding agent to check the build target. Use --entry <path> for a custom location.
Plain TanStack Router projects without Start publish as static sites.
Artor supports your project’s package manager, including pnpm; you don’t need to switch it to publish.
Monorepos: publish from the app’s folder
If your repository contains several apps, run Artor from the app you want to publish. Each app folder is linked to its own prototype:
cd apps/web
artor init # links this folder
artor publish # builds apps/web and ships its next versionThe project link is per-folder, so apps/web and apps/api are two independent prototypes,
each with its own versions and links.
Running artor publish at the root of a workspace won’t work: the root usually has no
build script (the real apps do), so publishing stops with a clear message —
no build script in package.json. Pass --dir <build-output> instead. Change into the app’s
folder and publish from there.
A plain HTML folder — no framework, no build
You don’t need a framework at all. If your project is just a hand-written index.html and
some assets — no framework, no build script, no build output folder — artor publish ships
the folder as a static site as-is, with no build step. Drop in an index.html, run
artor publish, and it’s live.
A couple of things to know:
- The homepage must be named
index.htmland sit at the project root. If there are.htmlfiles but none isindex.html, publishing stops with a clear message (found .html files but no index.html at the project root. Rename your entry page to index.html) rather than guessing which page is the homepage. - Artor never packs
node_modules,.git, build caches, or secret files into the published bundle, so a stray folder in your project won’t ride along. - This only kicks in when there’s no framework to detect — adding Next.js or Vite later means that version publishes as the right kind of app automatically, with no flags to remember.
Static prototypes get the review widget too. Artor adds commenting to the published
copy automatically, without changing your source files. If the widget is missing, check
that your HTML page includes a closing </body> tag and publish again.
Every publish is a fresh build
Each publish rebuilds your prototype from scratch to use your current code.
If you’ve just built and want to skip the rebuild, add --no-build to reuse what’s
already there (it fails clearly if there’s nothing built yet).
Artor installs the review widget automatically during setup. If required
packages are missing when you publish, it tries to install them first using your project’s
package manager. Use --no-install only when those packages are already available, such as
on a machine that must stay offline.
Broken builds fail before they go live
Artor checks your prototype before uploading it. If publishing stops:
- Missing homepage: make sure a static site’s main file is named
index.html. - Incomplete build: finish the build, or use
--dirto select the correct output folder. - App cannot start: give the error to your coding agent, fix the problem, and publish again.
If your app needs services or configuration that are only available on Artor, you can use
--no-smoke to skip the local startup check. Use this only when you know why the check fails.
Your existing versions remain available if a new publish fails before upload.
Artor confirms your link works
After publishing, Artor opens the new link once to check it responds. If you see a warning, open the link yourself and check it. The version is already live; this warning does not undo its publication. See Runtime errors if it cannot start.
Keeping the review widget current
If your project still has @artorapp/web-sdk (the in-page review widget)
pinned to "latest", what artor init sets up by default, publish checks whether a newer
version is available before it builds. On a normal terminal it asks before updating; with
--yes it updates without asking; running unattended with no --yes it skips the check
silently, so it never blocks a CI publish. If you’ve pinned an explicit version instead of
"latest", publish leaves it alone. Add --no-sdk-update to skip the check entirely.
Reconciling mock data before it ships
If local sample data differs from the version saved in Artor, publishing asks which copy to use. Choose local to keep your files or server to use the saved data.
For unattended publishing, use --mocks=local or --mocks=server when a choice is needed.
If Artor cannot check for differences, it also asks you to choose. See
Mock datasets for the full workflow.
Useful flags
Most publishes need no flags at all. The ones you might reach for:
| Flag | What it does |
|---|---|
--alias <name> | Publish to a named link, such as staging. May replace its existing version in overwrite mode. -v is the short form. |
-m "<note>" | Attach a changelog note describing what changed. |
--static | Force a static build (for an app you know is purely static). |
--no-build | Reuse the existing build instead of rebuilding. |
--mocks=local|server | Choose which sample data to keep when conflicts arise. Required for unattended runs with conflicts. |
--dir <path> | Publish an already-built folder as a static site, with no detection. |
--no-sdk-update | Skip the check for a newer review widget SDK version. |
--yes | Skip confirmation prompts — needed when running unattended or in CI. |
--json | Print a result an agent or script can read. |
--version <name> is still accepted as an older spelling of --alias, but it prints a
deprecation notice: everywhere else in the CLI --version means a version number
(artor open --version 3). Use --alias.
--static only applies to static-capable projects. Asking Artor to force a static build of
an app that needs a backend (React Router, Remix, SvelteKit Node) fails with a clear
message rather than shipping a broken site.
Honest limits
- A prototype can read any value you give it. Treat previews as staging, and use staging credentials in your environment variables, never production ones.
- Live apps take a moment to wake. The first open after a while may be a little slow while the app starts; it stays warm after that.
- Build limits depend on your plan. The default is 200 MB for static builds on every plan. For live apps, the defaults are 200 MB on Starter, 500 MB on Pro, 1,000 MB on Team, and 1,024 MB on Enterprise. Your organization may have a custom limit.
- Saved source has a separate limit. Its compressed upload can be up to 200 MB. Downloading or remixing also stops if the source files exceed 200 MB after unpacking, even if publishing succeeded. Large videos, datasets, and design exports can make the source too large even when the app itself is small.
- Saved source leaves out dependency folders, build output, and recognized credential files. Check your project before publishing: a password written into an ordinary source file or included in a built page can still be shared. See Getting the source back.
Related
- The publish → review loop — the full round-trip with your team
- Deployments & versions — how version links and aliases work
- CLI reference — every command and flag
- Getting the source back — pull a version’s code or fork it