ngrok alternative · for durable previews

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.
The ngrok tax

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.

ngrok / tunnels today

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.
Cordane

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.
How it works

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.

01

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.

02

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.

03

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.

Honest coverage

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.
Who can see it

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.

FAQ

Before you swap a tunnel for this.

Is this a self-hosted ngrok?
Not exactly, and we won't pretend it is. Cordane covers the durable-preview jobs people reach for ngrok to do — a stable public or team-only URL for a dev server on a machine you own — but it isn't an ad-hoc tunneling tool. It doesn't do webhooks or inbound callbacks, one-command tunnels from any random machine, or link passwords and expiry. If you want a permanent preview URL for a real app, it fits; if you want to expose an arbitrary port for two minutes, it doesn't.
What URL do I get, and does it change when I restart?
You get a stable subdomain of the form {app}--{worker}.your-domain, tied to a defined app rather than to a process. It doesn't churn when the dev server restarts, so the link you sent a client keeps working — the opposite of a fresh random hostname on every run.
Can I make a link truly public, with no login?
Yes, per app. Each app has a toggle — "Public — anyone with the URL can access (no login)" — so you can hand a client or a teammate on another network a link that just loads. The default is team-only: it stays behind Cordane's auth until you deliberately make it public.
Can I share a ticket or agent preview publicly?
Ticket previews are team-only. Your whole team sees the agent's work live at its preview URL, but it stays behind auth — make it an app when you want to share it publicly. Public sharing is an app feature; ticket previews are for the people already on your team.
Does it handle webhooks or inbound callbacks?
No — this is for sharing previews, not receiving inbound calls. Cordane's proxy is built to show a running dev server to a browser, not to be a stable inbound endpoint for a payment provider or a webhook sender. If webhooks are what you need, keep a tool built for that.
Are there session limits or a per-seat paywall on the links?
No. A preview rides the worker's single outbound connection to the hub, so there are no per-tunnel session timeouts and no per-seat gate on who can open a public link. It's your machine and your domain, not metered minutes on someone else's.
Managed cloud waitlist

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.