CLI tool for deploying static sites to Bunny.net. Go from zero to your site deployed across the globe in under a minute.
- Supports one-command rollbacks (Deployments are identified by their git hash)
- Sensible caching out of the box
- Deploy on push via the provided GitHub Actions example
Note: Still in beta, I'm testing it on my own projects. Further configuration of CDN & Caching settings may still be required depending on your project. This project is not affiliated with bunny.net.
Installation#
Requires the Bun runtime installed. Installing & running using npm, pnpm, etc. will fail!
bun add -g bunnyup
Quick Start#
# 1. Authenticate
bn login
# 2. Set up your project
bn new
# 3. Commit Files (bn new creates a config file, bn deploy expects a clean repository)
git add . && git commit -m "setup bunnyup"
# 4. Build and deploy
npm run build && bn deploy
Why#
I wanted Vercel-like static site deployments with EU-based hosting.
Bunny.net has the infrastructure for great static site hosting, but no good way to iteratively ship to it. This CLI is the missing piece.
Concept#
Bunnyup simplifies the deployment of statically built sites to bunny.net. It follows the following deployment process:
- Upload files to a new storage zone (i.e. bucket), identified by the git commit hash.
- Activate that deployment by pointing the pull zone (i.e. CDN configuration) at the new storage zone
- Prune deployments older than x days
Old deployments remain available until pruned and can be rolled back to at any time via bn activate.
The Pull Zone the CLI creates is long-lived and may be reconfigured afterwards as needed.
You may want to visit the Bunny.net dashboard after running bn new to make any applicable adjustments for your setup.
Caching#
Caching is configured by default, oriented around framework-built static sites, with the following settings. CDN Cache is not purged in between deployments. Uncached content is served from the 15 edge storage regions.
| CDN Cache | Browser Cache | Assets |
|---|---|---|
| not cached | not cached | html, json, xml |
| 3 hours | public, max-age=31536000, immutable |
Framework assets (_next, _astro, _nuxt, _app/immutable) |
| 3 hours | 3 hours | All other assets |
Commands#
| Command | Description |
|---|---|
bn login |
Save your Bunny.net API key (this is stored securely in your OS Keychain via Bun.secrets) |
bn new |
Configure a new site |
bn deploy |
Upload → activate → prune |
bn upload |
Upload files to a new version |
bn activate [version] |
Switch to a git ref/hash (default: HEAD) |
bn prune |
Delete old deployments |
bn cleanup |
Delete the pull zone and all storage zones for this project on Bunny.net |
Options#
--no-prune- Skip pruning old versions (deploy)-f, --force- Upload with uncommitted git changes (upload, deploy)-y, --yes- Skip confirmation prompts (prune, cleanup)
Requires clean git working directory by default. Use --force to override.
Configuration#
bn new creates a bunnyup.json file:
{
"name": "my-site",
"outputFolder": "dist",
"pruneAfter": "30",
"pullZoneId": 123456
}
pruneAfteris the number of days after which old deployments will be deleted bybn prune
CI/CD#
Set the BUNNY_API_KEY environment variable. See examples/github-deploy.yml for a GitHub Actions example.
Roadmap#
- Support preview deployments
Please open an issue if you want to help work on these.
























