@zackbart/gander
v0.4.0
Published
Publish HTML to a live, shareable URL with sub-200ms hot reload. Self-hosted on Cloudflare.
Maintainers
Readme
gander — CLI
Publish HTML to a live, shareable URL with sub-200ms hot reload. Talks to your own gander-worker; see ../worker/SETUP.md.
Install
npm install -g @zackbart/ganderNode 18+. Command is gander.
One-time setup
gander login --domain https://gander.<sub>.workers.dev --token <AUTH_TOKEN> --as <name>--as defaults to your OS username. Writes ~/.gander/config.json (mode 0600).
Commands
| Command | What it does |
|---|---|
| gander push <file> <path> | Upload once. Prints the URL. |
| gander watch <file> <path> | Auto-pushes on every save. |
| gander stop | Stops the active watcher. |
| gander ls [--folder <prefix>] | List pages (table; --json for raw). |
| gander get <path> | Print HTML to stdout. --url / --open to skip the dump. |
| gander mv <from> <to> | Move a page. Viewers see a "moved" overlay. |
| gander rm <path> | Delete a page. |
| gander url <path> | Print the URL. No network. |
All commands accept --json. Errors → stderr, non-zero exit.
Paths
Lowercase letters, digits, hyphens; / separates folders: demos/landing, team/q4-roadmap/slides. A page is either a leaf path or a folder prefix — never both. Anything starting with . is reserved. Invalid paths are rejected with a suggested fix — no silent slugify.
Watch loop
gander watch index.html demos/landing &
# → https://gander.<sub>.workers.dev/demos/landingEach save triggers a sub-200ms patch via WebSocket + morphdom. Always gander stop when done.
Local state
~/.gander/
config.json # domain + token + publisher, mode 0600
watch.pid # active watcher PID + path + start time
history/<path>/... # local HTML snapshots, 500 max per path, FIFO