Profile
Back to NewsBack
GitHub Trending 5 min
Reader Mode
akazwz/hostc: Localhost, anywhere. One command gives your dev server a public HTTPS URL, with WebSockets and hot reload. Free, no account, runs on Cloudflare Workers.

akazwz/hostc: Localhost, anywhere. One command gives your dev server a public HTTPS URL, with WebSockets and hot reload. Free, no account, runs on Cloudflare Workers.

5 hours ago

hostc logo

hostc

Localhost, anywhere.

One command gives your dev server a public HTTPS URL. WebSockets and hot reload included.
Free, open source, no account.

npm version Apache-2.0 license GitHub stars

hostc.dev · 简体中文

Quick start

Start your app, then point hostc at its port:

npx hostc@latest 3000
https://k7m2xq9pa4dn.hostc.app  → http://localhost:3000

Anyone with this URL can reach your local server. Press Ctrl+C to stop.

Open the URL on any device. Every request shows up in your terminal as it arrives. Needs Node.js 22.1 or later.

The URL is public: anyone who has it reaches your server, so only expose what you mean to share.

hostc is free and open source. If it helps you, a star on GitHub helps other developers find it, and it's the best encouragement for the project.

Why hostc

  • Nothing to set up. No sign-up, no auth token, no binary to download. If you have Node.js,
you have hostc.
  • Visitors see your app. No warning page to click through before they reach it.
  • Hot reload works. WebSockets pass straight through, so Vite, Next.js and friends update
every open device the moment you save. Server-Sent Events stream as they are produced.
  • Dev servers accept it as is. Requests arrive addressed to localhost and redirects point back
to the public URL, so there is no allowed-hosts setting to change.
  • The link survives. After a network drop or a server restart, hostc reconnects on its own and
the URL stays the same, as long as it gets back within 10 minutes.

Use it to

  • share something you built with an AI coding tool before you deploy it anywhere,
  • show work in progress to a teammate or a client,
  • test webhooks from Stripe, GitHub or Slack against the code on your machine,
  • try your site on a real phone, with hot reload (--qr prints a QR code to scan),
  • let a coding agent share what it built. Point the agent at
hostc.dev/llms.txt and it knows how to run hostc and read the URL.

Usage

hostc <target> [options]
hostc codex [options]

3000 http://localhost:3000 127.0.0.1:8080 http://127.0.0.1:8080 https://localhost:5173 any http(s) origin

--server <url> tunnel server (env HOSTC_SERVER) --qr print a QR code of the public URL --here hostc codex: show only this directory (commands still reach the whole machine) -h, --help show this help -v, --version show the version

Press Ctrl+C to stop; the URL is released immediately. Restarting hostc gives a new URL.

Limits

  • 256 requests and WebSockets at once per tunnel. Up to 1024 more wait for a free one; beyond
that, requests get 503.
  • WebSocket messages up to 1 MiB. A stream also closes if your local server stops reading and over
4 MiB is waiting for it.
  • Your local server has 2 minutes to start responding to a request.

Always run @latest

Server updates can be incompatible with older CLIs, so run npx hostc@latest to always get the matching version. Don't install hostc globally (npm i -g hostc) or add it to a project: an installed copy stays on its version, and an outdated CLI stops at startup and tells you to upgrade.

Troubleshooting

What visitors see when a request can't reach your app:

| Error | Meaning | What to do | | ------------------------------ | ---------------------------------------------------- | -------------------------------------------------- | | 404 Tunnel not found | The tunnel was stopped or has expired | Run hostc again for a new URL | | 502 Tunnel offline | hostc isn't connected, usually while it reconnects | Try again in a moment; check that hostc is running | | 502 Local server unavailable | The tunnel is up but your local server didn't answer | Check that it's running on the port you gave hostc | | 503 Tunnel busy | Too many requests at once | Try again in a moment | | 504 Local server timed out | No response started within 2 minutes | Check what your local server is stuck on |

hostc codex (experimental)

Use the Codex CLI on your machine from any browser, including your phone:

npx hostc@latest codex --qr

This is experimental, and it depends on a Codex protocol that is also marked experimental. Read this first:

  • The link controls your machine. Anyone who has it can read any file and run any command as
you. Treat it like a password: don't paste it into chats or show the QR code on a shared screen.
  • Asking for approval doesn't protect you from a leaked link. New threads ask before acting, but
whoever has the link can approve. --here shows only the current directory, and commands can still reach the whole machine.
  • The link lasts until you stop it. The token is random, kept in memory, and replaced on every
start. Press Ctrl+C to end access; there is no other way to revoke it.

hostc is open source, so you can also host it yourself and use --server.

hostc vs Cloudflare Tunnel

hostc runs on Cloudflare too. It does one narrower job than Cloudflare's own tunnels: sharing a dev server for a while.

| | hostc | Quick Tunnel | Cloudflare Tunnel | | ------------------ | -------------------- | ------------------------- | ----------------- | | Install | Node.js only | cloudflared | cloudflared | | Account | None | None | Required | | URL | Random | Random | Your hostname | | Server-Sent Events | Yes | No | Yes | | Dev servers | Work as is | May need the host allowed | Configurable | | Access control | None | Email allowlist | Cloudflare Access | | Made for | Sharing a dev server | Quick tests | Production |

How it works

browser ──▶ Worker ──▶ Durable Object (one per tunnel) ◀── WebSocket ── hostc ──▶ localhost

hostc opens a single outgoing WebSocket, so nothing on your machine has to be reachable from the internet. Each public request or WebSocket becomes a stream on that connection, with flow control for bodies. Idle tunnels sleep on the server, which is what keeps hostc free. The wire format is in docs/protocol.md.

Self-hosting

The server is a Cloudflare Worker you can run on your own domain, then point the CLI at it with --server. See docs/self-hosting.md.

Contributing

Issues and pull requests are welcome. See CONTRIBUTING.md.

License

Apache-2.0

Chat with me