Share the work, not a random URL.
Live preview links for dev servers on machines you own. Public or team-only. No tunnels, no rotating hostnames, no per-seat paywall.
For sharing previews, not webhooks.A stable share link shouldn't cost you a subscription.
Tunnels are great for a five-minute demo. The moment you want a link that lasts — for a client, a staging preview, a teammate on another network — the friction and the pricing show up.
Ephemeral by design.
- A fresh random hostname on every restart — the link you sent a client dies when your process does.
- Session limits and per-seat paywalls gate the stable URL and the second person who wants one.
- Your preview lives on someone else's domain, not a URL you control.
Durable by design.
- A stable subdomain tied to a defined app — it survives restarts, so the link keeps working.
- No session limits and no per-seat gate — it rides the worker's one outbound connection.
- It's your machine and your domain — public with one toggle, or team-only by default.
- Opens on any device, including a phone on cellular — no login, no app to install, same durable URL.
Define an app, get a subdomain, choose who sees it.
No inbound ports, no tunnel daemon to babysit. The worker is already dialed out to the hub — the preview rides the same connection.
Define an app
Point an app at a port on a worker — the dev server an agent booted, or a long-running staging build. Cordane gives it a stable subdomain: {app}--{worker}.your-domain.
Choose public or team-only
It's team-only by default, behind Cordane's auth. Flip Public — anyone with the URL (no login) when you want a client or an outside teammate to just open it.
Send the link — it opens on a phone too
Paste it anywhere and it just opens — on a laptop, or a phone on cellular with Wi-Fi off and no login for a public app. The reverse proxy serves it over the worker's single outbound connection — WebSockets and all — so nothing inbound is ever opened on the machine.
Public sharing is an app feature. Ticket and agent previews stay team-only: your whole team sees the agent's work live at its preview URL — make it an app when you want to share it publicly.
Which ngrok jobs Cordane covers — and which it doesn't.
People reach for ngrok to do a handful of different things. Cordane does the durable-preview ones well and deliberately doesn't do the others. Here's the line, drawn plainly.
| The job | Cordane |
|---|---|
| A stable URL for a dev server that survives restarts | Covered — a per-app subdomain, not a fresh random host each run. |
| A truly public link, no login, for a client demo | Covered — per-app "Public — anyone with the URL (no login)" toggle. |
| A team-only preview behind auth by default | Covered — it's team-only until you deliberately make it public. |
| A persistent staging preview with no session limits or paywall | Covered — rides the worker's one outbound connection; no metered minutes. |
| Sharing without opening an inbound port on the machine | Covered — the worker dials out; nothing ever connects to it. |
| Webhooks and inbound callbacks (a stable endpoint for a provider) | Not covered — this is for showing previews, not receiving inbound calls. |
| Ad-hoc one-command tunnels from any arbitrary machine | Not covered — sharing is per defined app on a joined worker, not any random port. |
| Link passwords or automatic expiry on a share | Not covered — no per-link password or expiry today; public is public until you toggle it off. |
Private by default, public only when you say so.
A share link on infrastructure you own should default to closed, and an admin should be able to slam it shut. Both are true here.
Auth on by default
Every app preview is authenticated and team-scoped out of the box. A link goes public only when someone deliberately flips the toggle — never by accident.
Admins can force-private
Admins get a list of every public app and can force any of them back to private. Nothing stays open without an owner who can see it and shut it.
Suspend kills the tunnels
Suspend a user and their previews drop with them — access follows account state, so a former teammate can't keep a link alive.
Before you swap a tunnel for this.
Is this a self-hosted ngrok?
What URL do I get, and does it change when I restart?
Can I make a link truly public, with no login?
Can I share a ticket or agent preview publicly?
Does it handle webhooks or inbound callbacks?
Are there session limits or a per-seat paywall on the links?
Share a preview from a box you own.
Self-hosting is free and available now — start with the quickstart, no email required. This list is only for managed cloud, where we run a finite fleet and would rather queue you than sell a hub we can't build well. We store your address only to tell you when a slot opens, and you can ask us to delete it any time.
No spam. No newsletter. One email when a slot opens.