Skip to main content
Every VM gets https://name.boxd.sh the moment it boots. TLS terminated, HTTP redirects to HTTPS, HSTS set, WebSockets supported. No DNS to point, no certificates to renew, no deploy step. Start a server on port 8000, share the URL.

How it works

When a VM boots, boxd registers a default proxy that pairs https://name.boxd.sh with port 8000 on the VM. DNS is created automatically (60s TTL). You can change the port, swap to auto-detect, or add subdomain proxies for additional services on the same VM. The result: prototypes, design reviews, and founder demos are one command away from being shareable.

Use it

boxd new --name=demo
ssh demo.boxd.sh 'cd /home/boxd/app && npm run dev'
Open https://demo.boxd.sh and you’re looking at it. If your app listens on a different port:
boxd proxy set-port --vm=demo --port=3000
Or let boxd pick whichever port your app started on:
boxd proxy set-port --vm=demo --port=auto

Multi-port apps

Frontend on 3000, API on 3001, websocket on 8080? Add a subdomain proxy per port.
boxd proxy new api --vm=demo --port=3001
boxd proxy new ws  --vm=demo --port=8080
You now have:
https://demo.boxd.sh       -> port 3000 (default proxy)
https://api.demo.boxd.sh   -> port 3001
https://ws.demo.boxd.sh    -> port 8080
List what you have:
boxd proxy list --vm=demo --json
[
  { "name": "default", "vm": "demo", "domain": "demo.boxd.sh",     "port": 3000 },
  { "name": "api",     "vm": "demo", "domain": "api.demo.boxd.sh", "port": 3001 },
  { "name": "ws",      "vm": "demo", "domain": "ws.demo.boxd.sh",  "port": 8080 }
]
Remove one with boxd proxy delete api --vm=demo.

Patterns

Founder demo

Spin a fresh box, run your dev server, paste the URL into a DM. Suspend it after the call. Resume in microseconds when the next person clicks the link.
boxd new --name=acme-demo
# ... start your app ...
# share https://acme-demo.boxd.sh

Design review on a branch

Fork your golden, check out the branch, share the URL with the designer. Destroy the fork when merged.
boxd fork yourapp-golden --name=review-nav-redesign
ssh review-nav-redesign.boxd.sh 'cd app && git checkout nav-redesign && pnpm dev'

nginx in front of multiple services

nginx is pre-installed and listens on 8000 once you start it. Point the default proxy at nginx and route internally:
ssh demo.boxd.sh 'sudo systemctl enable --now nginx'
# nginx serves on :8000, proxies to whatever you want internally

FAQ

Yes. The proxy upgrades WebSocket connections transparently.
Yes. Anyone with the URL can reach the service. If you need auth, put it in your app or in front of it (e.g. basic auth via nginx).
The DNS record is removed. Recreating a VM with the same name reuses the same URL and, when possible, the same IP.
Custom domain binding isn’t available yet. Contact the Azin team if you need it.

Next

https://mintcdn.com/azin/Ax1V0serIwQf0x_2/images/icons/branching-paths-up.svg?fit=max&auto=format&n=Ax1V0serIwQf0x_2&q=85&s=06ff61ff2b80a7adc15558368629f9bb

Per-PR preview URLs

A URL per pull request, posted as a comment on the PR.
https://mintcdn.com/azin/Ax1V0serIwQf0x_2/images/icons/routing-3.svg?fit=max&auto=format&n=Ax1V0serIwQf0x_2&q=85&s=870ef3744a5e59ab444b8ac8f4ce61bf

Proxies

The HTTPS layer in detail. Domains, ports, TLS.