Fast and simple remote access gateway
  • Go 72.5%
  • TypeScript 25%
  • Go Template 1.2%
  • CSS 0.9%
  • Just 0.4%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Kyle Mendell e582e34f4b
All checks were successful
CI / Go Linter (darwin) (push) Successful in 1m15s
CI / Go Linter (windows) (push) Successful in 1m26s
CI / Go Linter (linux) (push) Successful in 1m29s
CI / Frontend Linter (push) Successful in 32s
CI / Go Linter (linux-noweb) (push) Successful in 46s
CI / Go Tests (e2e) (push) Successful in 4m9s
CI / Go Tests (unit) (push) Successful in 5m5s
test: add e2e TestMain and update session e2e coverage
- Add internal/e2e/main_test.go to set up the e2e package
- Update internal/e2e/e2e_test.go test cases
- Adjust internal/client/session.go to match
- Exclude .cache/ artifacts from the commit
2026-10-31 16:14:17 -05:00
.cache test: add e2e TestMain and update session e2e coverage 2026-10-31 16:14:17 -05:00
.forgejo chore: fix tests 2026-10-28 14:09:58 -05:00
cmd chore: fix tests 2026-10-28 14:09:58 -05:00
docker refactor: move CLIs to cobra and merge opctl into op admin 2026-10-28 12:42:45 -05:00
examples chore: bump deps 2026-10-27 14:06:07 -05:00
internal test: add e2e TestMain and update session e2e coverage 2026-10-31 16:14:17 -05:00
pkg chore: fix tests 2026-10-28 14:09:58 -05:00
proto/overpass/v1 feat: add NodeHostInfo functionality to retrieve host information from nodes 2026-10-27 15:05:01 -05:00
web feat: show certificate values in copyable snippets 2026-10-31 15:13:03 -05:00
windows chore: bump deps 2026-10-27 14:06:07 -05:00
.air.toml fix: remove docs 2026-08-06 14:44:31 -05:00
.dockerignore refactor: move CLIs to cobra and merge opctl into op admin 2026-10-28 12:42:45 -05:00
.gitignore refactor: use vite and tanstack router 2026-10-28 13:39:38 -05:00
.golangci.yml chore: fix tests 2026-10-28 14:09:58 -05:00
.goreleaser.yaml refactor: move CLIs to cobra and merge opctl into op admin 2026-10-28 12:42:45 -05:00
.node-version fix: floating sidebar 2026-08-22 12:57:16 -05:00
AGENTS.md refactor: use vite and tanstack router 2026-10-28 13:39:38 -05:00
buf.gen.yaml chore: initial commit 2026-07-28 19:49:35 -05:00
buf.yaml chore: bump deps 2026-10-27 14:06:07 -05:00
compose.yaml chore: bump deps 2026-10-27 14:06:07 -05:00
cosign.pub fix: sign msi 2026-08-08 12:27:32 -05:00
go.mod fix: fix go vert file issues 2026-10-28 13:55:31 -05:00
go.sum fix: fix go vert file issues 2026-10-28 13:55:31 -05:00
Justfile feat: redesign web UI with app sidebar and animated icons 2026-10-31 14:57:24 -05:00
LICENSE chore: initial commit 2026-07-28 19:49:35 -05:00
README.md chore: update documentation links and remove outdated references 2026-10-27 15:08:52 -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

Overpass provides a Nix Flake packaging precompiled release binaries and NixOS modules for the control plane and node agent. Add it to your system flake:

{
  inputs = {
    nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
    overpass.url = "git+https://forgejo.ofkm.us/nix/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.