Go · MIT · v0.9.1
Upload once. Never twice.
A static-asset uploader for S3, R2, and B2 with built-in deduplication and fingerprinted output paths. Ship faster builds without re-uploading what you already have.
brew install heron-cli/heron/heron go install github.com/heron-cli/heron@latest curl -fsSL https://get.heron.dev | sh Project stats
2.1k
GitHub stars
38
Contributors
184k
Monthly downloads
Features
What you get.
-
Content-addressed uploads
SHA-256 of every file becomes its remote path. Identical builds upload zero bytes. Diff-only deploys, even on a fresh CI runner.
-
No daemon, no server
A single static binary, ~6MB. No background process. No license server. Reads from your build directory, writes to S3. That's it.
-
Atomic deploys
Every push generates a manifest. Atomic switch-over via a single object update. Rollback by pointing to a prior manifest in one command.
-
S3, R2, B2, MinIO
Anything S3-compatible. Tested daily against AWS S3, Cloudflare R2, Backblaze B2, and self-hosted MinIO. Bring your own credentials.
-
Concurrent by default
Parallel multipart uploads with backpressure. 1,000-file deploys finish in 6–12 seconds on a residential connection. Configurable per profile.
-
Zero telemetry
No "phone home." No anonymous metrics. No license activation. Audit the source — it's 4,200 lines of Go and a Cobra config.
How it works
Three commands. No surprises.
01 / Configure
A single TOML file.
Tell heron which bucket to push to, where to find your build output, and what cache headers to set. No daemons, no servers — just config.
# heron.toml
[remote]
endpoint = "s3.us-east-1.amazonaws.com"
bucket = "your-bucket"
region = "us-east-1"
[upload]
source = "./dist"
prefix = "v1/"
cache-control = "public, max-age=31536000, immutable"
02 / Run
Diff first. Push second.
--dry-run shows the diff against the remote manifest. heron push uploads only what's new and atomically swaps the manifest.
$ heron push --dry-run
ok 1,247 files scanned
ok 1,213 already uploaded (skipped)
add 34 new files (~ 6.2 MiB)
del 12 stale objects
$ heron push
uploaded 34 files in 4.1s · manifest: m-a91c3.json
Used by
Used by these teams
- Basalt CI
- Stackform
- Riverline
- Cinder Studio
- Northshore Labs
- Quill Editorial
Contributors
Built with help from 38 people.
Patches, bug reports, and the occasional very-strong-worded issue. Thank you.
Stop re-uploading what you already have.
heron ships as a single ~6 MB binary. Install in 30 seconds. Free, MIT-licensed, no telemetry.