Patchline publishes signed release manifests to S3 or any static host. Your app fetches them, verifies signatures, and applies whole-file updates atomically. That's the whole thing.
Every release manifest is signed with Ed25519. Clients verify signatures against the literal payload bytes — unknown future fields survive verification. Unsigned publishes require an explicit --unsigned-dev flag.
Files live under their SHA-256. Republishing builds that share assets is free — objects already in storage don't get re-uploaded. Garbage collection is a set difference between retained manifests and stored objects.
Channels are independent mutable pointers at immutable release manifests. Promote and rollback rewrite a single pointer file — they never re-upload bytes. A failed publish never advances a channel to objects that aren't in storage.
Local filesystem or any S3-compatible bucket — AWS S3, Cloudflare R2, DigitalOcean Spaces, MinIO. No patch server, no central API. Your release tree is just static files behind whatever host or CDN you already use.
Install the CLI, generate a signing keypair, point it at a build directory, publish. Patchline handles scanning, hashing, signing, deduping, uploading, and channel advancement.
Read the full quickstart →