No description
  • Go 77.8%
  • TypeScript 18.8%
  • Go Template 1.4%
  • Nix 0.7%
  • CSS 0.6%
  • Other 0.7%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Kyle Mendell dbe6ccd87d
Some checks failed
CI / nix (push) Has been skipped
Nightly / nightly (push) Has been skipped
CI / lint (push) Successful in 55s
CI / test (push) Failing after 4m27s
Release / nix (push) Successful in 5m34s
Nix hashes / refresh (push) Successful in 3m4s
Release / release (push) Successful in 4m18s
release: 0.24.0
2026-09-02 17:47:52 -05:00
.forgejo feat: use update nightly channel versions 2026-08-22 15:48:37 -05:00
cmd feat: macos agent 2026-08-28 20:54:24 -05:00
docker fix: dont mis flag lxc containers as actual containers 2026-08-06 13:23:52 -05:00
docs feat: macos agent 2026-08-28 20:54:24 -05:00
examples refactor: refine proxmox integration 2026-08-23 20:36:44 -05:00
internal feat: transcode browser vnc on the agent with a pure-go rfb proxy 2026-09-02 17:47:50 -05:00
nix fix: fix nix hashes 2026-08-28 21:19:16 -05:00
pkg feat: macos agent 2026-08-28 20:54:24 -05:00
proto/overpass/v1 feat: vnc and rdp support 2026-08-06 20:13:13 -05:00
scripts feat: use update nightly channel versions 2026-08-22 15:48:37 -05:00
web release: 0.24.0 2026-09-02 17:47:52 -05:00
windows fix: force copy of binary 2026-08-08 12:19:20 -05:00
.air.toml fix: remove docs 2026-08-06 14:44:31 -05:00
.dockerignore feat: update name to overpass 2026-07-29 12:06:00 -05:00
.gitignore feat: logind and proepr 'pam' sessions 2026-08-07 12:50:56 -05:00
.golangci.yml fix: update logging config 2026-08-23 12:27:50 -05:00
.goreleaser.yaml feat: macos agent 2026-08-28 20:54:24 -05:00
.node-version fix: floating sidebar 2026-08-22 12:57:16 -05:00
buf.gen.yaml chore: initial commit 2026-07-28 19:49:35 -05:00
buf.yaml feat: table ui updates 2026-07-30 21:27:33 -05:00
compose.yaml fix: allow use of pgid and puid variables 2026-08-03 13:57:51 -05:00
cosign.pub fix: sign msi 2026-08-08 12:27:32 -05:00
flake.lock chore: update flake lock 2026-08-31 07:09:20 +00:00
flake.nix fix: fix nix hashes 2026-08-28 21:19:16 -05:00
go.mod feat: bump deps 2026-08-28 20:55:03 -05:00
go.sum feat: bump deps 2026-08-28 20:55:03 -05:00
Justfile fix: updated ui and justfile 2026-08-23 11:15:55 -05:00
LICENSE chore: initial commit 2026-07-28 19:49:35 -05:00
README.md feat: macos agent 2026-08-28 20:54:24 -05:00

Overpass

Overpass

Overpass is a self-hosted remote access gateway. Users sign in with a local account or OIDC and connect with short-lived SSH certificates. Servers run an agent that connects outbound to Overpass, so they do not need a public SSH port.

Overpass includes a web dashboard and three commands:

  • overpass runs the control plane or a server agent.
  • op connects to servers.
  • opctl manages Overpass from the command line.

Quick start

1. Start Overpass

The image already starts the control plane with its built-in defaults. The browser-facing address is inferred from the request, so no command override is needed for a first run.

docker compose up -d
docker compose logs overpass

Open https://localhost:8443/setup, enter the one-time claim code from the startup log, and create the first administrator. The certificate is self-signed on a new installation, so your browser will show a warning. The setup page can optionally record the Unix usernames you will use on servers; you can change them later.

For a deployment behind a reverse proxy, define public_url and public_addr in /etc/overpass.yaml, or use OVERPASS_PUBLIC_URL and OVERPASS_PUBLIC_ADDR as fallbacks when those YAML fields are omitted. See Configuration for the precedence rules.

2. Add a resource

After setup, open Servers, select Add a resource, and run the generated command on the machine you want to access. The agent installs as a service and connects back to Overpass.

3. Connect

Download op from the account page in Overpass, then run:

op login your-hostname:8443 --user admin --insecure
op ls
op ssh your-unix-user@your-server

--insecure is only needed while Overpass uses its self-signed certificate. You can also connect from the browser terminal.

If browser setup is unavailable, opctl --local still supports recovery against the data directory. After signing in with op, normal opctl commands reuse that login to administer the server through its API.

Production setup

  • Keep the overpass-data volume. It contains the database, the SSH certificate authority keys, and the server-managed config directory (overpass.d/) holding configuration made through the web UI.
  • Back up that volume.
  • Configure a trusted certificate before removing --insecure.
  • Limit access with roles and server labels.
  • Configure OIDC if you do not want to manage local passwords.

See the documentation for configuration, certificates, OIDC, roles, reverse proxies, and node management.

Install without Docker

Download overpass, op, and opctl from the releases page. The getting started guide covers a binary installation. Linux and OpenBSD binaries are published for amd64 and arm64; Windows is published for amd64. On Apple Silicon, macOS receives overpass, op, and opctl; the overpass binary runs as a native node agent for SSH, file access, and local VNC Screen Sharing. The node installer sets up a service under launchd, systemd, OpenRC, runit, s6, sysvinit, or OpenBSD rc.d, and a node knows which one it runs under so a fleet update can restart it correctly.

NixOS

The repository flake builds Overpass from source and provides modules for the control plane and node agent. Add it to your system flake:

{
  inputs = {
    nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
    # Do NOT set inputs.nixpkgs.follows: the package pins Go/pnpm hashes against
    # Overpass's own nixpkgs, and following a different one fails the build.
    #
    # No ref tracks main (rolling); ?ref=refs/tags/v0.19.0 pins one release.
    # Both are gated by a Nix build in CI.
    overpass.url = "git+https://forgejo.ofkm.us/ofkm/overpass.git";
  };

  outputs = { nixpkgs, overpass, ... }: {
    nixosConfigurations.gateway = nixpkgs.lib.nixosSystem {
      system = "x86_64-linux";
      modules = [
        overpass.nixosModules.default
        ./configuration.nix
      ];
    };
  };
}

Then enable the control plane in configuration.nix:

{
  services.overpass = {
    enable = true;
    openFirewall = true;
    settings = {
      cluster_name = "production";
      proxy = {
        public_addr = "overpass.example.com";
        public_url = "https://overpass.example.com";
      };
    };
  };
}

Apply it and read the one-time setup code from the service log:

sudo nixos-rebuild switch --flake .#gateway
sudo journalctl -u overpass -b

For a node, enable services.overpass-node on that host and provide a one-time join token through joinTokenFile. See the NixOS guide for node enrollment, TLS pinning, secret handling, all module options, and the package-managed update workflow.

License

Overpass is licensed under the BSD 3-Clause License.