Description
n8n-nodes-shipstatic
n8n community node for ShipStatic. Deploy static websites, landing pages, and prototypes instantly from n8n workflows. Free, no account needed.
Try it in seconds, no account needed
First, install the node. In your n8n instance, go to Settings > Community Nodes and install:
n8n-nodes-shipstatic
Or install manually:
cd ~/.n8n/custom
npm init -y
npm install n8n-nodes-shipstatic
Restart n8n after installing.
Then add a ShipStatic node to your workflow. No credentials to configure.
Set Resource to Deployment, Operation to Deploy, then pick where the
files come from with Input:
Binary Files (default): the workflow-native path.
1. Connect binary files from an upstream node (HTTP Request, Google Drive,
Read/Write Files, Convert to File)
2. Run, and you get a live link on *.shipstatic.com
Each input item becomes one file, and a shared leading directory is stripped,
so a dist/ build deploys as index.html rather than dist/index.html.
The files need an index.html at the top: it’s the page visitors see first,
and a site without one is refused.
Text Content: one file, typed or wired in.
1. Paste or wire your HTML into File Content
2. Run: it’s published as index.html, the page visitors see first. You can change
the name with File Name, but a site needs an index.html at the top,
so keep it for a page.
Files (JSON): a whole site as data.
Give it an array of files, with an index.html at the top:
[
{ "path": "index.html", "content": "Hello
" },
{ "path": "style.css", "content": "body { margin: 0 }" }
]
Content is plain text by default. For binary files (images, fonts),
add "encoding": "base64" to that entry and pass base64 bytes. Paths are used
exactly as written, so this mode never rewrites them.
That’s all: no token, no sign-up, no configuration. You get back a link you can share right away, and a claim link. The site stays up for 3 days, and opening the claim link keeps it for good.
Want it private? Add a Password under the Deploy operation’s Options (6–128 characters; spaces count). It’s ShipStatic’s built-in password protection: visitors have to type the password before they see anything, on the site’s link and on any custom domain pointing at it.
Single-page apps just work
Deploying a React, Vue or Svelte build? ShipStatic detects it and adds the
routing config the site needs, so /about resolves to your app instead of
returning 404. It is on by default and does nothing to sites that are not single-page
apps.
Two ways to take control: turn Single-Page App Routing off under Options, or
include your own ship.json among the deployed files: the node never
overwrites one you shipped yourself.
Keep your sites with a free account
Everything above works with no account. A free account keeps your sites for good, gives you a ShipStatic domain like yourname.shipstatic.com, and shows you everything you’ve published in one place. A custom domain like www.example.com needs a paid plan. To connect an account here:
1. Get a free key at my.shipstatic.com/api-key
2. In n8n, go to Credentials > New Credential > ShipStatic API
3. Paste it into Token and save. n8n checks the connection right away
One credential slot
The field is called Token and your API key is what goes in it: one
credential, two names. Paste a ship-… key and every operation in this node
works; n8n verifies the connection when you save.
Deployments that clean up after themselves
Deploying a preview for every pull request, or a nightly build nobody needs to
keep? Add TTL under Options and the deployment expires on its own after
that many seconds. The platform removes it, so you aren’t left cleaning up.
Two things to know before you reach for it:
- It needs credentials. An anonymous deployment already expires on the
- A deployment with a TTL cannot be linked to a custom domain. A domain is
platform’s schedule, so a TTL on one is refused rather than quietly ignored.
a commitment and a deadline is its opposite, so deploy without a TTL if the
site needs one.
Retries that do not deploy twice
n8n’s Retry On Fail makes a workflow the most likely thing to retry a deploy
automatically. With a Token, set an Idempotency Key under Options and a
retry replays the original deployment instead of creating a second one. A key
replays only within the account that sent it, so without a Token it is ignored
and each run creates a new deployment:
{{ $execution.id }}
Key the attempt, never the try: a value stable across retries of one logical
deploy and different for the next. Leave it empty and every run deploys afresh.
Listing
Both List operations honour n8n’s usual controls. Return All follows the
API’s pagination to the end rather than stopping at the first page, and
Limit stops once it has collected that many. The Deployment and Domain
dropdowns page the same way as you scroll them.
Deployments
| Operation | Description |
| ———- | —————————————————————————————————— |
| Delete | Delete a deployment and all its files; the response reports the deletion state |
| Deploy | Publish files and get a live URL instantly |
| Get | Get deployment details including URL, status, file count, size, labels, and password protection state |
| List | List all deployments with their URLs, status, labels, and password protection state |
| Set | Update labels on a deployment (replaces all existing labels) |
Deleting is asynchronous: the API acknowledges with the deployment and a
deleting status, and the site stays served until background cleanup
completes.
Domains
| Operation | Description |
| ———— | ——————————————————————————- |
| Delete | Permanently disconnect and delete a custom domain |
| DNS | Look up which DNS provider hosts a domain (e.g. Cloudflare, Namecheap) |
| Get | Get domain details including linked deployment, verification status, and labels |
| List | List all domains with their linked deployment and verification status |
| Records | Get the DNS records you need to configure at your DNS provider |
| Set | Create or update a custom domain: reserve, link, switch deployments, or update labels |
| Share | Get a shareable setup hash so someone else can view the required DNS records |
| Validate | Check if a domain name is valid and available before connecting it |
| Verify | Queue a DNS check after you configure the records; the domain’s status updates once it runs |
Account
| Operation | Description |
| ———– | ——————————————————— |
| Whoami | Get your account details including email, plan, and usage |
Requirements
Requires n8n 2.0 or newer (Node.js 20.19+). The node’s code compiles as far
back as n8n 1.85, but 2.x is what it is tested against and what n8n Cloud runs.
Example workflows
Publish and connect a custom domain
1. ShipStatic > Deployment: Deploy (get the deployment ID)
2. ShipStatic > Domain: Set (link your domain to the deployment)
3. ShipStatic > Domain: Records (get the records to configure)
4. Configure DNS with your provider
5. ShipStatic > Domain: Verify (confirm everything is connected)
Scheduled redeployment
Use an n8n Schedule Trigger to redeploy a site on a recurring basis, useful for sites that pull content from external sources.
Picking deployments and domains
Deployment and Domain fields use n8n’s Resource Locator with two modes:
You can also switch any field to Expression mode to use values from upstream nodes.
AI agent support
This node works as a tool in n8n’s AI Agent workflows (usableAsTool: true).
Connect it to an AI agent and let it deploy sites, manage domains, and check
deployment status as part of a conversation.
Use Files (JSON) for agent deploys. An agent fills a node’s parameters;
it has no way to hand over binary items, so Binary Files mode is not reachable
from a tool call. Files (JSON) is: point the Files field at the agent and
it can write a whole multi-file site:
[
{ "path": "index.html", "content": "Hello
" },
{ "path": "style.css", "content": "body { font-family: system-ui }" }
]
The field’s description tells the model the schema, so a capable agent gets it
right without further prompting. Two things worth knowing:
HTML. "encoding": "base64" is for images and fonts only.
instruction in the text the agent reads.
Upgrading from 0.x
The 1.x node speaks the current ShipStatic platform; 0.x spoke a retired one
and its keyless deploy no longer works at all. Upgrading is worth it, and it
changes four things in saved workflows:
1. Re-enter your credential. The field is now a single Token slot that
takes your API key. A credential created for 0.x
stored its value in an “API Key” field that 1.x does not read, so the node
refuses to deploy rather than silently falling back to an anonymous public
deployment, so you will see a clear error until you re-enter it.
2. Re-pick your operations. Operation identifiers are now the platform’s
own verbs, so the stored ones from 0.x no longer resolve: remove →
delete, Deploy’s identifier → upload (the label is still “Deploy”), and
Account’s → whoami. A workflow carrying a retired identifier fails loudly
rather than doing something unexpected.
3. Re-select your Deploy input mode. The Binary File toggle became the
Input selector (Binary Files / Text Content / Files (JSON)). Workflows
that used the toggle in its OFF position (text content) do not carry over
and will default to Binary Files.
4. Keyless deploys changed internally. They no longer mint a token first.
Nothing to do; anonymous deploys keep working, and they work again. This was
the break that made 0.x’s headline feature stop functioning.
Resources
Also available
| Surface | Reach it |
|———|———-|
| MCP | Drop https://mcp.shipstatic.com into any MCP client |
| CLI and SDK | npx @shipstatic/ship ./dist |
| VS Code | Search “ShipStatic” in the Marketplace |
| Plugin | Install it in Cursor, Claude Code, Codex or Gemini CLI |
| GitHub Action | shipstatic/action@v3 |
| Agent Skill | npx skills add shipstatic/plugin |
License
MIT


