asdOne command takes any process on your laptop and gives it a public HTTPS URL — without a SaaS account in the middle, with declarative config in git, and with the same surface available to AI agents as to you.
This page is the headline. For long-form versions:
curl install. Run asd expose 3000. Open the URL on your phone.
That's the first five minutes. Whatever you wanted a "deploy" for —
demo, validation, mobile testing, an AI agent's callback, a
colleague's review — is now a URL.
What you don't do: write nginx config, install certbot, register
with Cloudflare / ngrok / Tailscale, push to staging, learn
docker-compose, restart anything.
The rest of the page is what that one command enables and what asd
adds on top once you decide it's worth a manifest.
You ship side-projects from your laptop. Cloud staging burns money
and time. You want a real https:// URL to share with a friend or
register with an OAuth provider, without learning certbot. asd expose 3000 is the whole flow.
"Your laptop is the only server you need to ship a side project.
asd makes it look like a real one to the rest of the internet."
Onboarding a developer takes two senior days, mostly in setup
hell. Three of your five repos have outdated READMEs because no
one notices until the next hire fails the install. With asd,
project setup is asd.yaml + tpl.env; if asd up works, the
setup is current. New hires go from clone to productive in hours.
"Your team's bus factor on local setup just went from 2 to N."
You spend Mondays unsticking someone's broken tunnel. Different
frameworks (Traefik labels, nginx confs, k8s ingress, certbot
cron) per project. With asd, one YAML format, one binary, one
asd doctor diagnostic surface the team can self-serve.
"Stop being the team's tunnel-fixer. The CLI does its own
triage."
Dev and staging environments cost more than production because
they sit idle 90% of the time. Vendor lock-in (cloudflared,
ngrok, vendor-specific tunnels) is a renegotiation lever pulled by
the vendor, not you. With asd, the laptops you already pay for are
the platform; the tunnel server is self-hostable.
"Cut your dev/staging cloud bill to zero. Your laptops are
already paid for; make them the staging."
Your agents need callback URLs, webhook receivers, and live access
to local services to be useful. localhost is invisible to them;
spinning up a public endpoint per experiment is heavy. asd expose 3000 agent-webhook --auth=none is the entire setup.
asd.host's tagline says it on the front page: "secure webservice
exposure for humans and AI". Every part of asd — --json
output, schema-exposed contracts, headless asd login key — is
built so an agent can drive it as well as you can.
"Give your AI agent a callback URL faster than it takes to
write the prompt."
You describe what you want — what service is on what port, what
hostname routes to it, whether it's public — in a
net.manifest.yaml. You run asd net apply. Routes appear,
tunnel comes up, URLs get written back to .env. Edit the YAML,
re-run. That's the whole loop.
No reverse-proxy config files to maintain by hand. No "remember to
restart Caddy after editing". No separate place to wire up the
tunnel.
Most teams reach for Cloudflare Tunnel or Tailscale Funnel for
public HTTPS on a self-hosted box. They work; they also mean your
traffic goes through someone else's infrastructure.
asd ships its own tunnel layer — reverse SSH to a sish-compatible
tunnel server you can self-host or use ours. Same outcome, no
account at a third party, full control of the routing.
asd net apply is diff-based and convergent. Run it twice → the
second time is a no-op. Run it after a half-failed deploy → it
finishes the job. CI pipelines don't need "have I already applied
this?" guards.
A typical self-hosted stack also needs a database GUI, a web
editor for SSH-only servers, a web terminal, a network inspector.
asd bundles these as first-class commands:
asd database start — DbGate, your DB browserasd code start — code-server (VS Code in the browser)asd terminal start — ttyd, a web terminalasd inspect start — mitmproxy, network inspectionEach one is one command. Each one gets its own subdomain through
the same Caddy + tunnel pipeline. No separate install.
.asd/workspace/ is per-project and gitignored, but asd data push snapshots it to the org registry and asd data pull
reconstitutes it on another machine. Move from your laptop to a
fresh dev VM by pulling the workspace — code from git, runtime
state from the snapshot.
The bill stops scaling with you.
| What you pay for SaaS today | What asd costs |
|---|---|
| ngrok / cloudflared per developer | $0 (self-host) or one flat capacity tier |
| Cloud staging environments | $0 (your laptops are staging) |
| Per-service tunnel fees | One tunnel server, all your services |
| Separate code-server / DB browser / VPN subscriptions | Bundled in the binary |
The vendor-lock-in lever matters as much as the bill: when
Cloudflare / ngrok / Tailscale change pricing, terms, or
feature-gating, your stack acquires their problem. With asd +
self-hosted tunnel server, you keep the rules.
For compliance: "your code stays local — asd tunnels relay
traffic only" (asd.host). The bits literally don't leave the
laptop except as live traffic to whoever hits the URL.
A deliberately uncharitable shorthand — every alternative is a
good tool. The point is what asd replaces or combines.
| If you were going to use… | …asd replaces |
|---|---|
docker-compose alone |
Containers run, but routes / tunnels / auth / dev tools are still your problem. |
docker-compose + nginx + certbot + ngrok / cloudflared |
All of it. One YAML, one binary, no vendor account. |
| Traefik + reverse-tunnel SSH glue | For a single host + a tunnel, asd is the smaller surface. Traefik wins on k8s. |
| Cloudflare Tunnel + Caddy you configure yourself | The Tunnel half (no SaaS lock-in) and the Caddy-config half (declarative, in git). |
| ngrok / cloudflared for demo sharing | asd expose <port> — same speed, plus the rest of asd when you want it. |
| Coder / Gitpod for an in-browser editor | The "VS Code in browser via my own URL" part. asd code start. |
For long-form head-to-head comparisons: compared/.
asd is the wrong toolBe honest:
learn/01-hello-world — five
minutes from zero to a working public URL.