CLI reference
The Dropway CLI
dropway deploys a folder of static files to a live, access-controlled URL from your terminal. It hashes files locally, uploads only what changed, and prints the live URL.
Install
The CLI is a single static Go binary. The quickest way to get it is the install script, which downloads the right build for your OS and architecture from GitHub Releases, verifies its checksum, and drops it on your PATH.
curl -fsSL https://raw.githubusercontent.com/danielpang/dropway/main/install.sh | shThe script installs to /usr/local/bin (falling back to ~/.local/bin). Set DROPWAY_INSTALL_DIR to choose another location, or DROPWAY_VERSION to pin a specific release.
Prefer to build from source? Install it with Go instead (this puts a dropway binary under $(go env GOPATH)/bin):
go install github.com/danielpang/dropway/cli/cmd/dropway@latestEither way, check it worked:
dropway versionLog in
Run dropway login for an interactive session, or create an API key for scripts and CI. Both authenticate the same deploy and site commands.
dropway loginThe CLI opens your browser to the Dropway sign-in page (the same account you use in the dashboard). After you approve, it saves your credentials to ~/.config/dropway/credentials.json. That’s it, no tokens to copy. Sign out any time with dropway logout.
API keys for scripts and CI
DROPWAY_API_KEY. The env var takes precedence over a stored login, so the same dropway deploy commands (including --new to create a site) work in pipelines and other non interactive environments. Revoke a key any time from Settings.export DROPWAY_API_KEY=dw_...
dropway deploy ./dist --new --site my-docs --sendSelf-hosting? Point the CLI at your own instance with --api (or the DROPWAY_API environment variable); it defaults to the hosted https://api.dropway.dev. dropway login honors the same flag.
dropway login --api http://localhost:8080 # self-hostCommands
dropway <command> [flags]. The everyday commands are deploy, sites, and read; gc and dr rebuild are operator utilities.
| Command | What it does |
|---|---|
login | Sign in via the browser and store credentials locally. |
logout | Remove the stored credentials. |
deploy <dir> | Hash a folder, upload changed files, finalize, and publish to a live URL. |
sites | List the sites you own, or every site in the org with --all. |
read <url-or-slug> | Fetch a site's served content over HTTP and print it to stdout. |
chat | Share an agent session transcript as an org chat log, and attach it to a site. |
version | Print the CLI version. |
gc | Operator: garbage-collect orphaned blobs (keep the current and last N versions). |
dr rebuild | Operator: rebuild the edge routing projection from Postgres (disaster-recovery drill). |
dropway deploy
Walk a directory, compute a SHA-256 per file, and run the full deploy: prepare, upload only-changed blobs, finalize, publish, then print the live URL.
Without --send it is a dry run: it prints the manifest it would upload and makes no network calls. Add --send to actually deploy (run dropway login first, or set DROPWAY_API_KEY).
| Flag | Description |
|---|---|
--send | Actually run the deploy. Without it, print the plan only (requires sign-in). |
--new | Create a new site before deploying (requires --site). |
--site <slug> | The slug for the new site (used with --new). |
--site-id <id> | Deploy to an existing site by id. |
--api <url> | API base URL (defaults to https://api.dropway.dev, or DROPWAY_API). |
Examples
The common flows: preview, create, and upload.
Preview a deploy (dry run, no upload)
dropway deploy ./distCreate a new site and deploy to it
dropway deploy ./dist --new --site my-docs --sendThis creates the my-docs site, uploads the folder, and prints something like https://my-org--my-docs.dropwaycontent.com.
Upload a folder to an existing site
dropway deploy ./dist --site-id 1a2b3c4d --sendOnly files whose contents changed are uploaded (everything is content-addressed), then the new version is published. Roll back any time from the dashboard.
Deploy to a self-hosted instance
dropway login --api http://localhost:8080
dropway deploy ./dist --api http://localhost:8080 --new --site demo --sendList and read sites
dropway sites lists what you've shipped; dropway read fetches a site's served content straight to your terminal.
dropway sites lists the sites you own. Add --all to list every site in your organization, with an owner column.
dropway sites # sites you own
dropway sites --all # every site in the orgRead a site over HTTP
dropway read fetches served content and writes it to stdout, so you can pipe it elsewhere. Pass a full URL, or a site slug the CLI resolves to its live URL first.
dropway read my-docs
dropway read https://my-org--my-docs.dropwaycontent.comPublic sites need no sign-in. A gated site returns its sign-in page instead of the content, since the fetch is a plain HTTP request.
dropway chat
Share the agent session behind a deploy as an org chat log, and attach it to a site so viewers see the story behind the artifact.
dropway chat share reads a conversation export (Claude Code JSONL, a ChatGPT JSON export, or plain text) and publishes it to your organization’s chat library. Add --site to attach it to a site, where it becomes that site’s “How this was made” panel under the site’s own access control.
# share a Claude Code session, attached to a site
dropway chat share ./session.jsonl --site my-docs --source claude_code
# condense the transcript's tool activity into action annotations
dropway chat share ./session.jsonl --site my-docs --derive-actionsAppend as the work continues
dropway chat append adds a follow-up message, an action annotation, or another export to an existing log, by chat id or by --site. Action annotations record a file edit or a tool run with a one-line note on why.
dropway chat append --site my-docs --message "Reworked the hero copy"
dropway chat append --site my-docs --action file_edit --path index.html --comment "Tightened the headline"| Command | What it does |
|---|---|
share <file> | Publish a session export as a chat log (optionally --site to attach it). |
list | List your org's shared chat logs. |
show <chat-id> | Print a shared chat's messages. |
append [<chat-id>] | Add a message, action annotation, or export to a log (by id or --site). |
attach <chat-id> | Attach a chat log to one of your sites. |
detach <chat-id> | Detach a chat log from its site. |
panel <chat-id> | Turn the served “How this was made” panel on or off for the attached site. |
delete <chat-id> | Delete a chat log and all its messages. |
delete-message <chat-id> <seq> | Delete one message from a log (mistakes, pasted secrets). |
Do the same from an AI tool
share_chat, append_chat, and get_site_chat so an assistant can record and read these logs directly from a conversation.Changing permissions
Sharing and access control live in the dashboard and the MCP server, not the CLI.
New sites start at your organization’s default visibility (org-only). To make a site public, password-protected, or limited to an email allowlist, change its access in the dashboard, or use the set_site_access tool on the Dropway MCP server.
Manage access from an AI tool
create_site, deploy_site, and set_site_access so an assistant can create, deploy, and re-share sites for you in chat.Prefer to deploy from an AI assistant?
Connect the Dropway MCP server to Claude, Cursor, or Codex and deploy straight from a conversation.