statice

type statice in a folder, get a live URL.

Name it what you like. Underneath, every deploy gets a permanent URL that is the hash of the files it serves. No accounts, no project creation, no config file.

$ statice --name "cool 3d generator"
  scanning 4 files
  uploading 2 new blobs
  → https://cool-3d-generator-hfj.statice.app

About three seconds. Needs Node 18 or newer; the CLI is a single file with no dependencies.

It also needs an access key, and there is no signup: keys are issued by hand. Ask for one at access@statice.run.

A dried sprig of statice on a white surface, casting a long soft shadow.

You pick the words. The suffix is assigned.

So a claim never fails, and nobody is ever told a name is taken. The folder remembers its name in a .statice file, and the next plain statice in it updates the name instead of claiming another.

$ statice --name "cool 3d generator"

Claims cool-3d-generator-hfj.statice.app and points it at this deploy.

$ statice

Same folder, later. Uploads only what changed and moves the name to it. The previous version keeps its own URL.

$ statice retire

Takes the name out of service. The record survives, so nobody else can claim it, and statice claim brings it back.

A bunch of statice hung upside down to dry against a pale wall, its violet darkened but intact.

Statice, hung to dry. It's what this is named after.

Photograph — Pedro Forester Da Silva

Underneath the name, and with or without one, every deploy gets this:

q4mfcytc4jz3gr7hnrpvzlqjxdfy2b6k5wmxnh3ttaeqzvjm4h5a.statice.app

The label is the SHA‑256 of the files, in base32.

The name points at it. Change any file and you get a different one; deploy the identical folder a year later and you get this one back. It can't be repointed and it doesn't expire, and the year‑long immutable header is safe because the bytes at that URL can't change without a SHA‑256 collision. Every version a name has ever pointed at stays reachable at its own.

The docs have the rest: what goes up and what is dropped, cross‑origin isolation, and why the whole persistence layer is four key prefixes and no database.

Hash URLs are permanent.

That is what makes one worth sharing: the bytes at it can't change, so it is cached as immutable for a year and never repointed. It also means publishing is one‑way. Access keys are validated and discarded, so nothing records who deployed what, and taking a file down is an operator action rather than a command.

So the first deploy from a folder stops and shows you what it is about to publish — file counts per directory, any sourcemaps it found, anything it skipped — and then asks: deploy 847 files to a permanent URL? [y/N]. That is the place to look.

Names work differently. statice retire takes one out of service; the record survives, so nobody else can claim it, and you can bring it back. The token that proves it is yours lives in ~/.statice/slugs/<label>, with no rotation and no recovery, so keep it.