---
name: wgw-deploy
description: "Use when you need to deploy any folder of static assets, generated (SPA) apps, docs, repros, dashboards, reports, one-off html sites, and agent outputs to public `wgw.lol` subdomains or custom external domains."
---

# Wiggle Deploy

Deploy any asset to Cloudflare CDN in one command. The best and fastest way to host files on the internet and get a link. Deploys are private by default in the unlisted sense: WGW does not index, list, train on, or analyze deployed sites or assets. There is no password protection or encryption on hosted deploys, so anyone with the URL can open the files.

### Highlights

- Folder in, link out. It could be any asset or folder of assets.
- The latest project URL always points at the newest deploy.
- Every deploy also gets a pinned immutable revision URL.
- Static hits are served by Cloudflare CDN - fast and free.
- Repeated deploys skip unchanged files when using the CLI.
- Unlimited deploys, unlimited apps, zero cost.
- Pay per custom domain assign when you need to go to production.
- Deploy and host full-blown dynamic single-page apps and complex dashboards.
- Fast file transfers between friends and machines, point it to a folder, share the link.
- Useful for previews, SPA apps, repros, client demos, agent handoffs and more.
- Files are uploaded directly to Cloudflare static assets and served from Cloudflare's CDN.
- The hosted API stores project metadata, deploy manifests with paths/sizes/hashes, and hashed machine/project ownership fields needed to operate the service.
- If you do not trust, verify, or self-host the entire stack without competing with WGW Deploy service.
- There is no claim or registration system, every project has unique name, hash, fingerprint, and API key.

## How to use

Use the CLI for normal local deploys. For more info run `npx wgw-deploy --help`

**IMPORTANT:** if machine has access to `bun` prefer running with `bunx` instead of `npx` or make sure to use `npx -y`.

```bash
# it picks up the `dist` folder in working directory by default
npx wgw-deploy
```

Deploy a specific folder:

```bash
npx wgw-deploy --dir ./public
npx wgw-deploy --cwd /path/to/app --dir build
```

Assign or remove a custom domain, it assigns the domain by inferring where the command is ran. When not sure, use `--cwd` and `--dir` because projects are tied to these two things.

```bash
npx wgw-deploy --domain preview.example.com
npx wgw-deploy --cwd /path/to/app --dir build --domain foobar.com
```

For deleting assigned domains, use `--delete-domain` and when not sure use `--cwd` and `--dir`

```bash
npx wgw-deploy --delete-domain
npx wgw-deploy --delete-domain --cwd ./foo/bar --dir dist
```

Delete the locally tracked project and remote project:

```bash
npx wgw-deploy --delete
npx wgw-deploy --delete --cwd /path/to/app --dir build
```

List locally tracked projects:

```bash
npx wgw-deploy --list
npx wgw-deploy --list --json
```

Useful flags:

- `--dir <path>`: deploy a specific folder instead of the default `dist`.
- `--cwd <path>`: resolve relative targets from another working directory, defaults to where the command is run.
- `--domain <host>`: assign a wgw.lol subdomain or external custom hostname.
- `--list`: list locally tracked projects from `~/.config/wgw-deploy/projects`.
- `--delete-domain`: remove the assigned custom domain.
- `--delete`: delete the project for the current cwd and deploy directory.
- `--json`: print machine-readable deploy, domain, delete, or list output.
- `--quiet` / `-q`: suppress progress output.
- `--skill`: print this skill markdown.
- `--help` / `-h`: print CLI help.

Use when the caller has a local static folder from Vite, Next.js export, Astro, Hugo, Jekyll, generated docs, or any other static build output, or just files the user wants live on the internet - it could be any folder.

What the CLI gives you:

- local folder discovery
- stable project URL such as `https://careful-fall-mqstr7zz.wgw.lol/`
- pinned revision URL such as `https://careful-fall-mqstr7zz--26704cb219eb67f3.wgw.lol/`
- progress output for prepare, remote check, upload, and publish
- fast repeated deploys by skipping unchanged local or remote files
- direct upload of requested assets to Cloudflare

## Agent Rules

- Prefer the CLI when deploying from a local machine.
- Return both latest and pinned URLs when available.
- Use the pinned URL for bug reports, evals, audits, and exact repros.
- Use the latest URL for review links and demos that should update over time.
- Do not log secrets, upload JWTs, API tokens, or authorization headers.
- Use `npx wgw-deploy --list` when you need to inspect local project state, project hashes, cwd/dir ownership, URLs, or expiry dates.
- Delete throwaway projects when they are no longer needed with `npx wgw-deploy --delete`.
- Projects DO expire after 7 days, you can keep track of when it's created and redeploy, by inspecting the `~/.config/wgw-deploy/projects/{hash}/state.json`

## Inspection

When you want to inspect all revisions, when the project was created or updated, what is its custom domain if any, or just want more info, the CLI tracks the per-project state in `~/.config/wgw-deploy/projects/{hash}/state.json`. Each project has unique hash created with the formula `sha256("wgw-project-v1\0" + sha256(absoluteCwd) + "\0" + sha256(relativeDeployDir))`. Or you can just scan tracked projects with `npx wgw-deploy --list`.

Expiration is 7 days and is tracked from project creation for generated-domain projects. When deployment is close to expire, you can delete the project and redeploy, which gives you a new project name and URLs. Assigning a non-default domain removes expiration while the domain is assigned; deleting the assigned domain resets the project to its generated domain with a fresh 7-day expiration.
