The wrkr CLI
Object storage — wrkr storage
Replaces S3, R2, Supabase Storage.
wrkr storage is object storage for your app's files — user uploads, generated
assets, anything you'd otherwise put in an S3 bucket. Objects are private by
default, and it's held in durable storage that survives a machine rebuild.
wrkr storage put ./avatar.png avatars/user-42.png
wrkr storage ls avatars/
It's separate from your machine's 200 GB disk on purpose: this is where your app's production files live, so they scale independently and stay durable.
When to reach for it
Whenever your app stores files that belong to its end users — uploads, attachments, exports, media — or any asset you want to serve or keep safe outside the code tree.
Command reference
You'll usually just ask your agent; these are the exact commands it runs (and you can too).
wrkr storage put <local-path> <key> [--content-type T] [--metadata k=v]...
wrkr storage get <key> <local-path>
wrkr storage stat <key> [--json]
wrkr storage ls [prefix] [--json]
wrkr storage rm <key> [--json]
wrkr storage cp <src-key> <dst-key> [--json]
wrkr storage mv <src-key> <dst-key> [--json]
wrkr storage url <key> [--method get|put] [--expires N] [--metadata k=v]...
wrkr storage url <key> --public # publish: set public-read + print the stable public URL
wrkr storage unpublish <key> [--json]
wrkr storage info [--json]
Full flags and examples: wrkr storage --help.
Private by default, public on purpose
Every object is private until you say otherwise. There are two ways to hand something out:
-
Presigned URL — a temporary link that expires. Good for "download your export, link valid for an hour," or for letting a browser upload directly.
wrkr storage url reports/q3.pdf --expires 3600 # temporary GET link wrkr storage url uploads/incoming.bin --method put --expires 600 # temporary upload link -
Published object — a stable, permanent public URL for one object. Explicit and per-object; there is no "make the whole bucket public" switch.
wrkr storage url avatars/user-42.png --public # → stable public URL wrkr storage unpublish avatars/user-42.png # revoke it
cp and mv are server-side (they don't round-trip the bytes through your
machine). Each of your app's objects is isolated and survives a machine rebuild.
Limits
50 GB of object storage is included with your machine — fair use beyond that, never a surprise bill.
- Uploads are single-PUT. There's no multipart/resumable upload for very large files (roughly over 5 GB) yet.
- You get presigned and published URLs, not drop-in S3-SDK static
credentials — point your code at
wrkr storage(or its presigned URLs) rather than expecting anAWS_ACCESS_KEY_IDto hand an S3 SDK.