Zipper
ServicesPlansDocsSupport
Sign inCreate account

Start

  • Honest production
  • What is not Cloudflare or Neon scale
  • Cloudflare in front of Zipper
  • Getting started
  • Quickstart in ten minutes
  • What to use Zipper for
  • Plans and quotas
  • Migrate from Cloudflare
  • Migrate from Vercel
  • Auth, tokens, and SSO
  • Control plane API
  • Using The Armory

Delivery

  • The Crown
  • The Drawbridge
  • The Gallery
  • The Archives
  • Video Delivery

Security

  • The Keep
  • Portcullis
  • The Moat
  • The Scepter
  • Visitor Queue
  • Palace Guard

Compute

  • Edge Functions
  • Site Hosting
  • Job Queues
  • Edge AI

Data

  • The Cellar
  • The Armory

Support

  • Zipper Pilot

Identity & access

  • The Herald
  • The Vault
  • The Throne Room
  • Origin Connect
  • Emails

Observe

  • The Watchtower

Start

  • Honest production
  • What is not Cloudflare or Neon scale
  • Cloudflare in front of Zipper
  • Getting started
  • Quickstart in ten minutes
  • What to use Zipper for
  • Plans and quotas
  • Migrate from Cloudflare
  • Migrate from Vercel
  • Auth, tokens, and SSO
  • Control plane API
  • Using The Armory

Delivery

  • The Crown
  • The Drawbridge
  • The Gallery
  • The Archives
  • Video Delivery

Security

  • The Keep
  • Portcullis
  • The Moat
  • The Scepter
  • Visitor Queue
  • Palace Guard

Compute

  • Edge Functions
  • Site Hosting
  • Job Queues
  • Edge AI

Data

  • The Cellar
  • The Armory

Support

  • Zipper Pilot

Identity & access

  • The Herald
  • The Vault
  • The Throne Room
  • Origin Connect
  • Emails

Observe

  • The Watchtower

Sealed warrant backend

The Armory

The Armory is Zipper’s warrant mesh for iOS, Android, and the web. You mint a hatch-bound session, then a warrant that names a rack. A write warrant is a spent cartridge — reuse returns 409. Musters hold sealed documents with revisions. Kit is cordoned by Palace Guard, including JSON bodies. The roll is SSE on this node. Twenty Docker racks isolate duties. This is not Firebase, not Appwrite Cloud, not FCM/APNs, and not Kubernetes. Without Docker the same twenty racks run in-process and still fail closed. Included on every Zipper plan.

Cloudflare analogue: Firebase Auth + Firestore (skill map only)

What it is

The Armory is Zipper’s warrant mesh for iOS, Android, and the web. You mint a hatch-bound session, then a warrant that names a rack. A write warrant is a spent cartridge — reuse returns 409. Musters hold sealed documents with revisions. Kit is cordoned by Palace Guard, including JSON bodies. The roll is SSE on this node. Twenty Docker racks isolate duties. This is not Firebase, not Appwrite Cloud, not FCM/APNs, and not Kubernetes. Without Docker the same twenty racks run in-process and still fail closed.

Closest analogue: Firebase Auth + Firestore (skill map only). SLA 99.9% · p99 45ms. Admins create apps, collections, and webhooks. Operators may inspect mesh health.

  • ▸Spent-cartridge write warrants (zw.…)
  • ▸Hatch-bound sessions — Origin is identity
  • ▸Musters with revision stamps
  • ▸Palace Guard on kit and JSON
  • ▸Twenty Docker racks, one duty each

How it works

The Armory is a warrant mesh, not a document cloud. Dashboard → The Armory → Create app (watch, roll, todos, or chat). Copy the HTTPS endpoint, anon key, and service key (once). Sign in; the JSON includes a write warrant (spent cartridge) and a read warrant.

Every data-plane call carries X-Armory-Warrant. A write warrant fires once — reuse is spent_cartridge. Sessions are bound to Origin (hatch). Musters are sealed documents with rev stamps. Palace Guard cordons kit bytes and JSON string fields. The roll is SSE on this process. Zipper does not send mail.

Words: anon key on the device, service key on the server, session after sign-in, warrant per rack, muster for documents, kit for files, roll for live SSE, hatch for Origin. The walkthrough is Docs → Using The Armory.

Twenty Docker racks isolate duties. ARMORY_MESH=docker fails closed if a rack is down. Without Docker the same twenty racks run in-process. Warrants are not JWTs. Live is not FCM. The mesh is not Kubernetes.

Use cases

Concrete ways teams use this service on day one.

Ship a watch log in an afternoon

A React Native app needs sign-in and an owner-only event muster without standing up Postgres.

  1. Create an Armory app with the watch kit.
  2. POST /auth/signup with the anon key. The body includes warrants.write.
  3. POST /musters/events with X-Armory-Warrant. Mint a new write cartridge for the next insert.
  4. Keep the service key on the server. Never ship za_svc_ in the IPA or APK.

Chat rooms on one node

A small team chat needs rooms, messages, and a live channel.

  1. Create an app with the chat kit (rooms + messages).
  2. Sign in, then GET /roll/rooms as EventSource with a read warrant.
  3. Fan-out is this Zipper process, not a world bus.

Native app without a browser Origin

A Swift or Kotlin client has no Origin header.

  1. Omit Origin on signup so the session hatch is native.
  2. Do not later call the same session from a website — that is hatch_mismatch.
  3. Keep za_svc_ on your BFF. The device only holds za_anon_ plus session plus warrants.

Set it up in the dashboard

Dashboard → Services → The Armory. The console lists words, five steps, kits, headers, and refusal codes.

Create an app. Copy the endpoint, anon key, and service key (once). Paste a browser origin if the client is a website.

Follow Docs → Using The Armory for signup, spend, and mint examples.

API

Control-plane: GET|POST /api/v1/armory · POST /auth/signup · POST /warrants · GET|POST /musters/:name · POST /kit · GET /roll/:channel · GET /mesh. Send Authorization: Bearer tz_live_YOUR_TOKEN.

Creates count against the plan quota. A 402 plan_limit means you are at the cap — upgrade or delete an unused resource.

Create an app

curl -sS -X POST https://tinyzipper.com/api/v1/armory \
  -H "Authorization: Bearer tz_live_YOUR_TOKEN" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"name":"mobile","kit":"watch"}'

Sign up, spend a write warrant

const base = "https://tinyzipper.com/api/v1/armory/APP_ID";
const headers = { "X-Armory-Key": process.env.ARMORY_ANON, "Content-Type": "application/json" };
const auth = await fetch(base + "/auth/signup", { method: "POST", headers, body: JSON.stringify({ email: "dev@example.com", password: "long-password" }) }).then((r) => r.json());
await fetch(base + "/musters/events", {
  method: "POST",
  headers: { ...headers, Authorization: "Bearer " + auth.item.access_token, "X-Armory-Warrant": auth.item.warrants.write },
  body: JSON.stringify({ title: "gate-up" }),
});
const next = await fetch(base + "/warrants", { method: "POST", headers: { ...headers, Authorization: "Bearer " + auth.item.access_token }, body: JSON.stringify({ verb: "write", rack: "records" }) }).then((r) => r.json());

List the same resource in JavaScript

const res = await fetch("https://tinyzipper.com/api/v1/armory", {
  method: "GET",
  headers: {
    Authorization: `Bearer ${process.env.ZIPPER_TOKEN}`,
    "Content-Type": "application/json"
  }
});
const json = await res.json();
if (!res.ok) throw new Error(json.error ?? res.statusText);
console.log(json);

Tips

Warrants are not JWTs. A write cartridge is spent on first use.

Never put the service key in a mobile binary. Use the anon key, a session, and a warrant.

Browser Origin is the hatch. Native apps omit Origin and cannot replay a browser session.

Twenty Docker racks are the isolation medium, not a GKE replica set.

Zipper does not send SMTP. Recovery tokens are returned to your backend.

  • ▸SOC 2
  • ▸AES-256-GCM
  • ▸Spent warrants
  • ▸Hatch-bound sessions
  • ▸Twenty Docker racks

Runbook

Create an app. Copy endpoint, anon key, and service key (once). Sign in at POST /auth/signup — the response includes a write warrant (spent cartridge) and a read warrant. POST /warrants to mint the next write. Insert musters at POST /musters/{name} with X-Armory-Warrant. Reusing a write warrant returns spent_cartridge. Sessions are bound to Origin. Kit and JSON pass Palace Guard. The roll is GET /roll/{channel} SSE on this node. Twenty Docker racks isolate duties when ARMORY_MESH=docker.

Next: Zipper Pilot · All docs · Create a free account

Zipper

Honest production on multi-layered Global Server nodes: application-layer DDoS and WAF, in-process cache, DNS-JSON, and image delivery. A Spatial Regal Technology platform by Spatial Regal Digital Ltd.

Product

  • Services
  • Pricing
  • Docs
  • Honest production
  • Scale gaps
  • vs Cloudflare
  • Cloudflare alternative
  • Workers alternative
  • Turnstile alternative
  • Create account
  • Support

Services

  • The Crown
  • The Keep
  • Portcullis
  • The Moat
  • The Herald
  • The Vault
  • The Scepter
  • The Watchtower

Legal

  • Terms
  • Privacy
  • Cookies
  • AUP
  • DPA
  • Security
  • Subprocessors
  • Billing
  • DMCA

© 2026 Spatial Regal Digital Ltd. Zipper is part of Spatial Regal Technology.

Powered by Spatial Regal · tinyzipper.com