voop
v0.1.0
Published
Publish files to the web instantly with a single command using Coudflare R2
Maintainers
Readme
voop
Publish files to the web instantly with a single command.

Why?
I use coding agents to create interactive HTML pages instead of static markdown docs. When you can just say "make me a visualization of this data" and get a working HTML page, you need a fast way to share it. This tool lets me go from local file to public URL in one command.
Alternatives
| Tool | Pros | Cons | |------|------|------| | Surge.sh | Free, easy, custom domains | Don't own infra, account required | | Vercel CLI | Great DX, preview URLs | Opinionated, expects frameworks | | Netlify CLI | Feature-rich | Overkill for single files | | Cloudflare Pages | Fast CDN | Requires git/project setup | | GitHub Pages | Free | Requires repo + git push |
Why voop?
- You own the infrastructure (your R2 bucket, your rules)
- No account signup/login each time
- No git workflow or project structure required
- Files stay up forever (no expiring preview URLs)
- Single file → single URL, nothing else
npx voop index.html
# https://your-bucket.r2.dev/index-a1b2c3d4.html
# (copied)Uses Cloudflare R2 for storage with free egress and global CDN.
Install
npx voop <file>Or install globally:
npm install -g voop
voop <file>Setup
On first run, you'll be guided through an interactive setup wizard:
npx voop myfile.html
# No configuration found. Let's set things up first.
# → Prompts for credentials...
# → Tests connection...
# → Proceeds to uploadBefore running, you'll need:
- Create R2 Bucket: Cloudflare Dashboard → R2 → Create bucket → Enable public access
- Create API Token: R2 → Manage R2 API Tokens → Create with Object Read & Write permissions
The wizard will ask for:
- Cloudflare Account ID
- R2 Access Key ID
- R2 Secret Access Key
- Bucket name
- Public URL (e.g.,
https://pub-xxx.r2.dev)
Config is stored at ~/.config/voop/config.json.
Usage
voop mypage.html # Upload a file
voop --setup # Reconfigure credentials
voop --test # Test R2 connection
voop --help # Show helpEach file gets a unique URL with a random suffix to avoid conflicts.
License
MIT
