Your files, your requests, your headers, your media. Encrypted end to end, opened only by your own agent.
Not a policy we promise to keep β the shape of the system. We route on the hostname and forward the rest untouched.
The problem
You've probably been here
Your ISP put you behind CGNAT, so port forwarding isn't even an option.
Your photo backup fails on anything over 100 MB, because the tunnel proxies it.
You added authentication, and now Bitwarden won't sync and Immich won't log in.
You want your parents to watch something without installing a VPN on their TV.
You set up a tunnel and only later realised the service was public to everyone.
None of that is your fault. It's what happens when the tool in the middle decrypts everything at its edge.
Not our words
This started as a reading exercise
Before anything was designed, 3,268 posts and 1,274 comments from r/selfhosted, r/homelab, r/jellyfin and r/PleX were collected and read. Everything here traces back to something in that pile.
βMy apps β specifically Immich β can't use the tunnel properly. The max free upload size is 100 MB, so my videos aren't backing up.β
r/unRAID Β· removed the tunnel over it
βCloudflare application OAuth is not compatible with basically all mobile apps. Bitwarden cannot sync the vault with this in place. Immich can't log in.β
r/selfhosted Β· 100 upvotes
βMy parents especially β they're not going to open a VPN app and hit connect every time. Plus some devices like TVs can't really do a VPN.β
r/PleX Β· behind CGNAT since switching to fibre
Setting up
Three steps, no network configuration
yan
Install the agent
One command, or a container. It connects outbound, so nothing has to be opened on your router or firewall.
tan
Point it at a service
jellyfin on port 8096 becomes jellyfin.yourdomain.com, with a valid certificate issued automatically.
tethera
Choose who gets in
Public, a password, a guest link, or a per-device token. Everything starts private β opening it up is a deliberate choice.
# on the machine that already runs your services$ sheephold up jellyfin --port 8096 --guests
β tunnel established eu-west
β certificate issued jellyfin.you.example
β access guest links only
β ready https://jellyfin.you.example
Shown as it will work in the beta. Nothing is live yet β that's what the waitlist is for. (Yan, tan, tethera: how shepherds have counted sheep in the north of England for centuries.)
The gate
Protect everything, except what your apps need
Authentication that covers a whole service breaks native apps β that's the failure everyone runs into. Rules match on path and method inside one service, so the web interface can sit behind a password while your TV client keeps working.
# jellyfin β the profile ships ready to apply
default: password# everything is denied unless listed below
except:
GET /System/Info/Public # discoveryGET /Items/*/Images/* # artwork on the TV
Denied by default. Exceptions are explicit, listed on the service page, and counted where you can see them.
Profiles ship ready. Jellyfin, Plex, Immich, Nextcloud, Home Assistant, Vaultwarden. Nobody should reverse-engineer which paths their TV client calls.
A box to check your work. Paste a URL, see which rule it hits and what that rule requires.
An exempt path isn't unprotected β it's protected by the app's own login instead of ours. The panel says so before you turn it on.
The difference
We forward your bytes. We don't open them.
Most managed tunnels terminate TLS at their edge. That's how they add caching and filtering β and it's also why they cap uploads, restrict media in their terms, and choke on native apps. We route at the connection level, reading only the hostname needed to pick your tunnel.
Against a typical managed tunnel on its free plan.
Typical managed tunnel
Sheephold
Reads your traffic
Yes, at the edge
No
Upload limit
100 MB per request
None
Media restrictions
Yes, in the terms
None β we store nothing
Native apps
Break under browser auth
Per-device tokens
Heavy usage
Throttled or pushed upmarket
Point your own exit server
Charges per user
Usually
Never β guests are unlimited
Where bytes go
Three paths, and only one of them costs you
Same dashboard, same certificates, same rules. What changes is the road the traffic takes β and you don't configure any of it.
Guest on a TV
our relay
Your services
Nothing to install for them. Counts against your allowance.
Your own laptop
straight there
Your services
A small client on devices you own, connecting directly. Free, always.
Anyone
your own exit server
Your services
Your bandwidth, your rules, our dashboard. Never metered by us.
Some setups are heavy by nature β a library shared with ten people, a stack that moves terabytes. Instead of pretending otherwise, the third path exists: you keep the part that's genuinely annoying to run, we stop paying for bytes we can't afford. Nobody has to hide what they run.
Rates
You pay for relay traffic. Nothing else.
Traffic that goes direct β between your own devices, or through your own exit server β never counts. Neither do guests, and neither does what you choose to run.
Free
25 GB
Local
25 GB
Homelab
300 GB
Media
1 TB
Own exityours
Solid is included at full speed. Dashes are still working, just slower β that's what happens past your allowance. No bar ever turns into a bill.
Free
Local
Homelab
Media
Own exit
Relay traffic
25 GB
25 GB
300 GB
1 TB
Your server
Region
EU / US
Your choice
Your choice
Your choice
β
Your own domain
β
1
3
5
5
Guests
Unlimited
Unlimited
Unlimited
Unlimited
Unlimited
Direct traffic
Unlimited
Unlimited
Unlimited
Unlimited
Unlimited
Going over your allowance slows the relay down and offers a top-up. It never bills you by surprise. The free tier stays free.
Waitlist
Tell us what actually broke for you
One email when the beta opens, and nothing else. The questions are optional, and they decide what gets built first.
Questions
Straight answers
Is this a VPN?
No. Your visitors install nothing β they open a URL. There's an optional client for your own devices, which connects you directly and takes that traffic off our relay entirely.
Can you see what I'm hosting?
We see the hostname you chose and how many bytes moved. Not the content, not the URLs, not the files. TLS ends on your agent, inside your network.
What if I stream a lot of media?
Nothing breaks and nothing is against the rules β we don't cache, so there's no content restriction to work around. If your volume grows, the own-exit plan is cheaper for you than any allowance we could sell you.
Can I protect part of a service and leave the rest open?
Yes β that's the point of the access rules above. Everything is denied by default, exceptions are explicit and listed on the service page, and there's a box where you paste a URL to see exactly which rule it hits.
Is the hostname I pick private?
No β and that is true of every service with a valid certificate. Public certificate authorities publish every name they sign to Certificate Transparency logs, which anyone can search. Only the name is published: never the content, your network, or what runs there. Worth knowing when you name something, and worth remembering that a known address still gets nobody past your password or guest link.
Do my guests need an account?
No. You send a link, they open it. You can revoke that link on its own, without touching anyone else's access.
How is this different from running Pangolin on my own VPS?
In what it does, it isn't β Pangolin is good, and if you enjoy running it, keep running it. The difference is that you operate nothing: certificates, DNS, identity and updates are handled. And if you'd rather keep the bandwidth on your own server, the own-exit plan gives you that, with the dashboard still on our side.
What happens if you shut down?
On a paid plan the address is your own domain, so it keeps working the moment you point it elsewhere. The agent is open source. Nothing about your setup is locked to a hostname we control.
Who's building this?
One developer, in the open, after reading a year of the same five threads on r/selfhosted. The research is published β every claim here traces back to something someone actually ran into.