Deployments
A deployment is an immutable snapshot of static files. Once created, its contents never change.
Every deployment gets a unique name (e.g. happy-cat-abc1234) and an instant preview URL. On every response the deployment field carries the full hostname — happy-cat-abc1234.shipstatic.com — which is the form every interface shows and accepts.
Available via Web, CLI, SDK, MCP, Action, and API.
Properties
| Property | Description |
|---|---|
deployment |
Unique identifier — the deployment's hostname |
url |
Preview URL, immediately accessible |
files |
Number of files |
size |
Total size in bytes |
status |
Lifecycle state (see below) |
labels |
Mutable tags for organization |
password |
true if the deployment is password-protected |
via |
Origin tag — see Origin tags below |
created |
Creation timestamp |
claim |
Claim URL — present only on response of public (unauthenticated) deploys |
expires |
Expiry as a unix timestamp in seconds. Set for deploys made without an account (3 days from creation) and for any deployment given a ttl |
Status
pending → success → deleting
→ failed → deleting
A deployment starts as pending during upload. On success, the preview URL goes live. Deletion is asynchronous from any terminal state — the status transitions to deleting while files are cleaned up.
Behaviors
Immutable. After creation, only labels can be modified. To change content, create a new deployment.
Path optimization. When all files share a common root directory (e.g. dist/), the platform flattens it automatically — dist/index.html becomes index.html.
SPA detection. The platform analyzes your index.html for single-page app patterns (React Router, Vue Router, etc.) and configures client-side routing fallbacks automatically.
Limits
What one deployment may carry. These bound a single publish — they are not account totals — and the API enforces them on every deploy, whichever interface you use.
| Free | Pro | Team | |
|---|---|---|---|
| Largest single file | 20 MB | 50 MB | 50 MB |
| Files per deployment | 500 | 1,000 | 1,000 |
| Total deployment size | 50 MB | 200 MB | 200 MB |
Deploys made without an account use the Free limits. Scale is arranged directly and its limits are higher.
Your own current limits are always available from GET /limits (API),
ship.getLimits() (SDK), and the Plan page in the console (Web). That
answer reflects your plan and any adjustment made on your account, so prefer it
to this table whenever the two could differ.
Public Deployments
Deploys without authentication go to the public account and expire 3 days from creation. The response includes a claim URL — visit it while signed in at my.shipstatic.com to transfer the deployment to your account.
$ npx -y @shipstatic/ship ./dist --json
{
"deployment": "happy-cat-abc1234.shipstatic.com",
"url": "https://happy-cat-abc1234.shipstatic.com",
"claim": "https://my.shipstatic.com/claim/...",
"expires": 1755302400
}
Once claimed, the deployment is yours, never expires, and the claim URL stops working.
Until then, the claim URL is what transfers ownership, so anyone holding it can claim the deployment — share it the way you would a one-time invite rather than posting it somewhere public. Worth knowing if an agent prints one into a chat you keep around: the link stays usable for the same 3 days the deployment does. Claiming it yourself is what closes it.
Custom domains, password rotation, and listing/management operations require an API Key. The deploy itself doesn't.
Password Protection
Deployments can be locked behind a password set at upload time. Visitors see an unlock page until they enter the correct value. Passwords are stored securely — ShipStatic cannot reveal or recover one, so keep it somewhere safe.
Length: 6 to 128 characters. There is no edit-in-place — to change or remove a password, redeploy.
ship ./dist --password 'hunter2!'
Labels
Labels organize and filter deployments. Each label is 3–63 lowercase alphanumeric characters with ., -, or _ separators. Maximum 10 per deployment.
production
v1.0.3
staging.preview
Origin tags
The via field records which interface created the deployment, useful for filtering listings by origin.
| Value | Origin |
|---|---|
web |
Web console (drag-drop or upload) |
cli |
CLI |
sdk |
SDK used directly |
mcp |
MCP server (AI agents) |
git |
Action (GitHub Actions) |
n8n |
n8n community node |
gpt |
GPT Action (custom GPT integration) |
vsc |
VS Code extension |
api |
A call straight to the API that named no origin |
Operations
| Operation | Description |
|---|---|
| Upload | Create a new deployment from files |
| List | All deployments on your account |
| Get | Details of a specific deployment |
| Set | Update labels |
| Delete | Delete a deployment and its files |