Horizon vs zrok
Horizon is simpler to set up and keeps a request log you can replay. zrok has free reserved names, private shares, TCP and UDP, and self-hosting.
Last checked October 2026
npm install -g @hrzn/cliThe short version
Which one fits you
Pick Horizon if…
- You want to skip OpenZiti concepts such as environments and namespaces.
- You want to install with npm: one package and one sign-in.
- You want a stored request log with replay in a dashboard, kept for 24 hours.
- You send WebSockets or streamed responses, which Horizon documents as passing through.
Pick zrok if…
- You want a free reserved name that stays stable across restarts.
- You need private shares, or private TCP and UDP tunnels.
- You want to self-host, or you want open source under Apache-2.0.
- You need a custom domain, which zrok offers on Pro.
Side by side
Horizon and zrok, topic by topic
Setup
| Feature | Horizon | zrok |
|---|---|---|
| Install | npm install -g @hrzn/cli | Install script or tarball (zrok2) |
| Account | Required: hrzn login | Account, then zrok2 enable <token> |
| Concepts to learn | Tunnels and subdomains | Environments, shares and namespaces, built on OpenZiti |
Inspection
| Feature | Horizon | zrok |
|---|---|---|
| Request inspection | Dashboard request log, kept 24 hours | Live feed in the terminal UI |
URLs and domains
| Feature | Horizon | zrok |
|---|---|---|
| Stable URL | Reserved subdomain, paid per slot | Reserved name on the free plan |
| Example stable URL | https://my-app.hrzn.run | https://myapp.share.zrok.io |
| Custom domain | No | Yes, on Pro |
Protocols
| Feature | Horizon | zrok |
|---|---|---|
| Public HTTPS | Yes | Yes |
| TCP and UDP | No | Private tunnels only |
Security and access
| Feature | Horizon | zrok |
|---|---|---|
| Browser warning page | Once every 7 days per visitor IP | For unverified free accounts. Adding a credit card removes it. |
| Skip the warning | x-hrzn-skip-warning header | skip_zrok_interstitial header |
| OAuth on shares | No | Documented for self-hosted only |
| Self-hosting | No | Yes, open source under Apache-2.0 |
Pricing
What a stable URL costs
Price
| Feature | Horizon | zrok |
|---|---|---|
| Free tunnels | Free, random subdomain | Free: 5 GB a day, 25 environments, 50 share backends, reserved names included |
| One stable URL | €1 per slot per month, or €10 per slot per year | Free on the zrok free plan |
One stable URL for a year: €10 on Horizon, $0 on zrok.
zrok custom domains need Pro. We did not find a published Pro price. zrok prices checked October 2026. The two sets of prices use different currencies and are not converted.
Switching
Switching from zrok
zrok reserves a name with zrok2 create name. Horizon reserves a subdomain as a paid slot, then starts it with -s.
Install script or tarball (zrok2)npm install -g @hrzn/clizrok2 enable <token>hrzn loginzrok2 create name myapphrzn tunnel http://localhost:3000 -s my-appskip_zrok_interstitialx-hrzn-skip-warningFAQ
Questions about zrok
Is zrok free?
Yes. The zrok free plan costs $0. It includes 5 GB of bandwidth a day, 25 environments and 50 share backends, either ephemeral or reserved. It rate limits each IP to 2,000 requests per 300 seconds.
Does zrok have reserved names?
Yes, on the free plan. zrok2 create name myapp gives you https://myapp.share.zrok.io, and the name stays the same across restarts. On Horizon, a reserved subdomain is a paid slot.
Do I need to learn OpenZiti to use zrok?
zrok is built on OpenZiti and hosted by NetFoundry. You work with zrok concepts such as environments and namespaces, and you run zrok2 enable with a token from your account. Horizon has none of these: you install the CLI, sign in and start a tunnel.
What does the Horizon request log add?
Horizon stores each request in the dashboard for 24 hours, with method, status, path, headers and bodies. You can replay a request while the tunnel is connected. zrok shows a live request feed in its terminal UI.
Can I self-host Horizon?
No. Horizon is a hosted service. zrok is open source under Apache-2.0 and you can self-host it.
Does Horizon support private shares or TCP and UDP?
Horizon does not offer raw TCP or UDP tunnels. zrok offers private shares, where the visitor runs zrok too, and private TCP and UDP tunnels.
Put localhost online.
Install the CLI, sign in and run one command.
npm install -g @hrzn/cli$ hrzn tunnel http://localhost:3000 -s my-app
HORIZON: Tunnel connected
URL https://my-app.hrzn.run (reserved)
Forwarding http://localhost:3000
Request log https://hrzn.run/dashboard/tunnels/my-app
POST 200 /webhooks/stripe
GET 200 /