webby
Drop a static HTML app into a bag and get a URL.
webby is for tiny tools, one-off dashboards, agent-made prototypes, and standalone HTML files. It works with no config on localhost, and can also activate tailnet, temporary public, durable public, or custom hosting.
Install
Start Fast
No config required:
That stages clock.html in the local bag and serves the bag at
http://localhost:8765.
Commands
A bag is a named directory plus a hosting provider. Apps are copied into a bag, then the provider decides how that directory gets a URL.
webby ls lists all bags by default. Use -b / --bag to select one bag.
An app is a folder with index.html or a standalone .html file. Names that
start with tmp are shown under the Temp section in generated indexes.
webby preview -b BAG captures static JPEG card previews into the bag's
.webby-previews/ directory. It shells out to uvx shot-scraper, skips
existing previews unless --force is passed, and keeps generated indexes fast
by serving images instead of live iframes. Pass an app name, for example
webby preview jobsearch-docs -b internal --force, to refresh one preview.
Provider Examples
Built-in bags:
| bag | provider | reach |
|---|---|---|
local |
local |
localhost preview |
tailnet |
tailscale-serve |
private Tailscale HTTPS |
funnel |
tailscale-funnel |
temporary public HTTPS |
public |
cloudflare-pages |
durable public HTTPS |
If INTERNAL_URL or INTERNAL_DIR is set, webby also adds an internal Caddy
compatibility bag.
Tailnet:
Temporary public Funnel:
Durable public Cloudflare Pages:
Configuration
Run:
This writes ~/.config/webby/config.json. Override the config path with
WEBBY_CONFIG, and the default bag storage root with WEBBY_DATA_DIR.
Example:
webby can also load a KEY=VALUE env file from WEBBY_ENV; when running from a
checkout, a local .env.secret file is loaded if present.
Provider Notes
local generates an index and can be served with webby serve.
tailscale-serve and tailscale-funnel call the tailscale CLI with the bag
directory as the target.
cloudflare-pages calls:
command providers run a shell command template. {dir}, {label}, and
{url} are expanded before execution.