Reach any service.
From anywhere.

Share one service — not your network. With your staff, your partners and your vendors.

Give each person or machine access to exactly the internal services they need, and nothing else on your network — without a VPN, a cloud account or an open port. You run it yourself, on every operating system.

self-hosted · linux · macos · windows · bsd · android · ios · private beta

Four steps, a few minutes.

No account to create and no server to rent. Everything runs on machines you already have.

Request access →
01  / run

Run it on one machine.

Start SideServices on the machine that will manage everything. A setup page opens in your browser: choose Controller, and pick a relay — ours, a partner’s or your own. No config files.

run on: any computer
02  / invite

Invite a device.

Create a one-time invitation in the controller and paste it into the new device’s setup page. It joins, and every connection is encrypted — direct when it can be, through the relay when it can’t.

invite: paste it, or a USB stick
03  / people

Add a person.

Add them by name and choose the device they use. They pick their own password on that device — you never see it.

people: their own password
04  / grant

Grant a service.

Choose a service and who may use it. It appears on their device at a local address — already signed in. Take it back and it is gone.

grant to: a machine or a person

Every grant, in plain sight.

You manage everything from a web page on your own machine: who can reach what, and what is waiting for your approval. The people you grant see only their own services, and simply open them. Click a screenshot to enlarge.

The controller's Overview: one item needing attention — an access request waiting for approval — above cards for nodes online, services, people, partner federations, the relay and SideMail, and the federation's short fingerprint.
Overview — what needs you first, then the federation at a glance.
The controller's Services page: a partner's access request with Approve and Decline, then every service with who can reach it — people such as alice on her laptop and phone, machines such as a build runner, a partner organization's person on a lease, a service shared with partner-co, and redis granted to nobody.
Services — who can reach each one: people, machines, partner organizations. Or nobody yet.
Alice's laptop at sideservices.localhost, signed in as alice: the services granted to her grouped by the node that provides them with direct or relay paths, each web service opening at service.acme.sideservices.localhost, and a service from the partner-co federation.
Alice's laptop at sideservices.localhost — her services, by name, including one from a partner.
A video call between alice, bob and dave on the federation's own meeting server, each joined under the name they signed in with.
A meeting on your own server — everyone arrives by name, no public meeting service.
The controller's Services page, full size. The controller's Overview, full size. A node's service list at sideservices.localhost, full size. A video call on the federation's own meeting server, full size.

Five ways people use it.

One primitive — grant one service to one machine or person, deny everything else — covers problems that usually take five products. Nothing below opens a port, publishes a DNS name, or joins two networks together.

// partner exchange

Hand another organization one service.

Two organizations, two controllers, no merged network. Link once, then share a single service — and approve each of their people or machines who asks for it. They see what you share, not your network.

  • Scoped to one serviceCross-organization access is deny-by-default and per service. No shared address space, no site-to-site tunnel to decommission later.
  • Auditable on both endsEach side keeps its own record of the exchange: which person or machine, how many requests, how many bytes, over what period.
  • Withdrawn in one clickTake access back and their local address stops answering — no ticket to a network team, no firewall change.
// ot & industrial

Let a vendor reach one machine, not the plant.

Remote support for an HMI, a PLC or an instrument normally means a jump host, a VPN account and a route into the OT segment. Here the vendor is granted exactly one service on one device, for as long as you say.

  • The device needs no softwarePlug it into the IoT appliance's protected port. It keeps its own address and its own firmware; the appliance is what joins the mesh.
  • The grant is the perimeterNothing else in the segment is reachable — there is no subnet to scan, because the vendor never receives a route, only a local port.
  • Time-boxed and revocableA service can carry an idle timeout and a deadline, and deleting it in the controller drops the live session on the device.
// private ai

Serve a self-hosted model to your people.

A GPU box running an inference server is the most sensitive thing to expose and the easiest to get wrong. Publish it as a service and grant it to people: it follows each of them to whichever device they sign in on, and never touches the internet.

  • Streaming worksAnswers stream in as they are written, so chat apps and OpenAI-compatible tools work exactly as they would on the same machine.
  • Prompts stay insideTraffic goes device-to-device over an encrypted tunnel. No inference provider, no vendor control plane, and no request contents are recorded — usage accounting stores counts, never payloads or query strings.
  • It knows who is askingThe model server is told which person is calling, and per-request accounting shows how much each one used — the basis for a chargeback, or for noticing a client that suddenly went loud.
// ci/cd

Give a build runner an internal dependency.

A hosted runner needs your private registry, a package proxy or a seeded database. The usual answers are a public endpoint behind a password, or a VPN credential sitting in CI secrets.

  • Nothing is publishedThe registry stays on its own machine. It is never resolvable by public DNS, never listening on a public port, never fronted by a public certificate.
  • One identity per runnerEach runner is its own machine with its own grant, so a compromised runner can be revoked on its own — and its traffic is separable in the usage log.
  • Same address everywhereThe service answers on the same local address on every runner, so the pipeline configuration does not change between environments.
// meetings

Hold video calls nobody else hosts.

Run a meeting server on your own machine and grant it to your people. They join from a laptop or the phone app, already signed in by name, and the call never touches a public meeting service.

  • Camera and microphone, per serviceOn a phone, the app asks once for each service, the way a browser asks per site — and you can take it back.
  • Media gets through hard networksAudio and video fall back to a relay that is itself a service: only your people reach it, and it reaches nothing but the meeting server.
  • Everyone arrives by nameParticipants join as who they signed in as, and the moderators are the people you name — not whoever got there first.

A service is one thing you share.

A service is one thing you expose — a database, a web app, an SSH port, a SOCKS exit, even your mailbox. Grant it to a machine or a person and it shows up on a local address on their device. Nothing else on your network is visible: there is no network to wander, only the services you gave.

TCP

Databases, SSH, Git, registries — anything on a port.

localhost:5432
UDP

DNS, syslog, game servers, custom protocols.

localhost:5353
HTTP / HTTPS the web naming

Web apps and APIs answer at a name — no IP, no port to remember. Resolved on your own machine, never by public DNS.

wiki.acme.sideservices.localhost
SOCKS5

Browse from another location — through a proxy on one of your machines.

localhost:1080
Mail

Private IMAP + SMTP for your federation, on the node you choose, and webmail in the browser — mesh-only, and delivered to partner organizations over the mesh, never the public internet.

localhost:1143 · 1587

Six reasons it replaces the VPN.

Access you control, for people as well as machines, across organizations — on infrastructure you own.

// access

Nothing is shared until you say so.

Each service stays invisible until you grant it — to one machine or one person. A grant can end on a date, after a period of inactivity, or a set time after first use, and taking it back cuts the connection on the spot.

✓postgres → build-runner
✓wiki → alice, on any device
✕redis → nobody
// people

People, not just machines.

Grant a service to a person and it follows them to whichever device they sign in on. SideServices signs them in to the app as well — Grafana, Gitea, Open WebUI, any app that trusts a who-is-calling header, or one that takes a stored password — so there is no second login. One password per person: single sign-on, with no identity server to run.

alice wiki · signed in as alice
alice grafana · on laptop and phone
bob metrics · from partner-co, until Friday
// partners

Share with other organizations.

Link with another organization once, then share single services. You approve each of their people or machines, and take access back in seconds. Your networks never merge, and mail flows between you over the same link.

metrics acme → partner-co
registry acme → lab-team
mail acme → partner-co, both ways
// accounting

Every request, attributed.

See who used each service, how much and for how long — down to each web request and each connection. Admin changes, sign-ins and partner decisions go into an audit log you can export.

alice registry · 412 KB
vendor-laptop hmi-3 · 18 KB · 4m12s
partner-co metrics · 1,204 requests
// trust

Yours, and only yours.

No sign-up, no vendor cloud, no telemetry: you run it, and you trust only your own controller. Every connection is encrypted end to end, with post-quantum protection. Each device learns only what it was granted, so a lost laptop reveals nothing about the rest of your network, and the whole setup backs up into one encrypted file.

✕a vendor cloud or telemetry
✕a relay that can read your traffic
✕public DNS, certificates or open ports
✓trust only your own controller.
// everywhere

One program, every system.

The same program manages, relays and connects, on Linux, macOS, Windows, FreeBSD and OpenBSD, with apps for Android and iOS. There is nothing else to install or operate.

linuxmacoswindowsandroidiosfreebsdopenbsd

Or run it as an appliance.

SideServices also ships as ready-to-flash appliances — the whole mesh baked into a small, self-updating image. No server to run, no operating system to install or patch.

// self-host a federation

Federation appliance

The easiest way to self-host an entire SideServices federation. Flash a Raspberry Pi, plug it in, and the controller, relay and your services come up as a single tiny image.

  • A whole federation in a boxController, relay and services on one Raspberry Pi — no Linux to install, harden or patch.
  • Atomic over-the-air updatesThe box updates itself in one step onto a second system partition, so the previous version is always one reboot away.
  • An extra-small trusted baseNo shell, no package manager, a read-only image — a tiny attack surface.

Built on the gokrazy appliance framework.

// protect any device

IoT appliance

Put a SideServices appliance in front of an industrial machine or IoT device and expose only the specific services you choose — with no web traffic reaching the device by default.

  • SecurityPassword-protected updates over the network, and very little software on the box, keep it secure and up to date.
  • Devices that can't run softwareA PLC, a camera, a lab instrument: plug it into the protected port and it reaches its granted service with nothing installed — still attributed by its own address.
  • Ease of useIt joins with a one-time code on a USB stick. No console, no config files.
Contact us about appliances Federation & IoT appliances are in beta — tell us your use case.

How it compares.

The same kind of encryption as a VPN. A different idea of who's in charge — and of what is reachable.

Hosted VPN services

A vendor runs the service you have to trust. You sign up, and your setup lives in their cloud.

SideServices

Your own controller is the only thing you trust — no account, no vendor in the loop. The relay can't read anything, so it can be ours, a partner's or yours.

Self-hosted VPNs

Every device joins one network, and you write firewall rules to keep each one from reaching too much — plus a server to operate.

SideServices

Each person or machine gets exactly the services you grant, nothing else. One program does every job, so there is nothing extra to run.

Partner-access portals

Your partner becomes a guest in your system — a guest account, an identity in your directory.

SideServices

Two organizations, each with its own people and controller, link once and share single services. Neither becomes the other's tenant.

And across all of them: post-quantum encryption end to end, and services that never appear on the public internet.

Questions, answered.

Short version: you decide exactly who can reach each service, and everything stays on machines you own.

Request access →
What's a federation?

Your devices and the people who use them, managed together. One machine is the controller: it admits new devices and decides who can reach what. Devices connect to each other directly when they can, and through a relay when they can’t.

Can I grant access to a person rather than a device?

Yes. A person signs in on any of their devices with one password, and the services granted to them appear there — and go when they sign out. SideServices can also sign them in to the app itself, so a granted wiki opens already logged in as them.

Do I have to type my password every time?

No. Tick Stay signed in and your browser keeps you signed in on that computer. On a phone, your fingerprint or PIN signs you back in.

Can I share a service with another organization?

Yes. Link with the other organization once — both admins confirm each other’s short fingerprint — then share single services. You approve each of their people or machines, and can take access back at any time. Your networks never merge.

Who runs the relay, and do I have to trust it?

No. When two devices can’t reach each other directly — behind a home router, a firewall, a mobile network — a relay passes their traffic along, still encrypted. It can’t read it, so it doesn’t have to be yours: use our relay (free, on request), a partner’s, or run your own.

Is it quantum-safe?

Yes. Every identity and every connection combines today’s proven encryption with the new post-quantum standards, so traffic recorded today stays unreadable to a future quantum computer.

Does it work on phones?

Yes. The Android and iOS apps open your services inside the app, signed in as you. Attachments download as they would in a browser, and a video call can use the camera and microphone once you allow it for that service. On Android it can also keep running in the background, for a phone that hosts a service.

What if the controller's machine dies?

Take a backup from the controller: one file, encrypted with a passphrase you choose. Restore it on a new machine and everything carries on — nobody has to join again.

Can a device only use services — never offer any?

Yes. Set it up without a relay and it only uses what others share with it, exposing nothing. Add a relay later if it should offer services too.

Do I need an account?

No. No sign-up, no vendor cloud, no telemetry. The controller is a machine you own, and invitations travel between devices however you choose.

How do I get access?

SideServices is in private beta. Email info@sidephone.io with a bit about what you’d like to connect, and we’ll help you set it up.

Try SideServices in private beta.

We are in private beta. Tell us what you would like to connect — the services, the people, the partners — and we'll help you set it up on your own machines.

self-hosted · relay hosted by us on request · info@sidephone.io