Skip to content
Nat Lee

Keyboard shortcuts

Turn these off if they get in the way of a screen reader or voice control. The setting is saved in this browser.

1
Home
2
Projects
3
About
4
Experience
/
Search projects
?
Show this panel

Flagship · case study

Telepy

Reach every device from your browser.

One outbound reverse SSH tunnel per device gives you a browser terminal, files, remote desktop, a remote browser and the LAN behind it. No port forwarding, no VPN, no public IP.

Device connect to online (Django: 2.90 s)
0.16 s
Idle memory (Django: 329 MiB)
20 MiB
Backend cold start (Django: 14.2 s)
0.7 s
1,340+ commits since 2024
v2.13
Telepy's tunnels page: health, latency, how each device connects, and who is using it

Why it exists

The machines I needed to reach kept ending up somewhere unreachable: a server behind NAT, a Raspberry Pi at home, an office PC behind a firewall, a router that only lets HTTPS out.

Port forwarding needs a router you control, a VPN needs software on every laptop, and both need someone to maintain them. Every one of those devices could already reach the internet, judging by how often they download updates. So Telepy turns the connection around: the device dials out, and you work on it from the browser.

How it works

Your browser

HTTPS

Telepy server

  • Traefikfront door, HTTPS
  • Next.jsweb interface
  • Rust backendREST · WebSockets · SSH gateway · monitor · SQLite
  • guacdRDP / VNC engine
  • kasm-browserChromium for remote browsing
reverse SSH, dialed out by the device

Device

ssh -R

LAN hosts behind it

The device runs an ordinary ssh -R to the gateway built into Telepy. Nothing is opened on the server, and both ends check each other's host key.

What it does

Connect devices

  • One command on Linux, macOS and OpenWrt, followed live until Telepy can log in
  • A step-by-step wizard with ready-made scripts for Windows, Docker and appliances
  • SSH inside a WebSocket on the web port when only HTTPS gets out
  • Health, per-hop latency and search that understands status:down or label:env=prod
Connect devices

Work on a device

  • Web terminal with tabs, Nerd Fonts, a toolbox of saved commands and recordings
  • File manager with an editor that never saves half a file
  • RDP and VNC through the tunnel, or RustDesk in the tab
  • A real Chromium that goes online from the device, for admin pages that only open on that network
Work on a device

Teams and control

  • View, edit or admin sharing with expiry; removing someone ends their sessions at once
  • Command rules that block, hold for approval or remind, for people and MCP agents alike
  • Watch a live terminal, hand over the keyboard, or end a session
  • Tamper-evident audit logs, recordings and sign-in history
Teams and control

Automate

  • telepy CLI: ls, ssh, exec on twenty devices at once, cp
  • REST API with scoped personal tokens, device limits, expiry and a call log
  • MCP endpoint so Claude Code or Cursor can work on devices, every call logged
Automate

From Django to Rust

In October 2026 the Django backend was rewritten as one Rust process behind the same API. Measured side by side on the same machine and the same device, right after the switch:

MeasureDjangoRustChange
Device connect → online on the dashboard2.90 s0.16 s18.1×
Device SSH authentication54 ms12 ms4.5×
Dashboard API, 50 concurrent561 req/s4,726 req/s8.4×
Web terminal throughput35.1 MB/s96.9 MB/s2.8×
Backend cold start14.2 s0.7 s20.1×
Memory at idle329 MiB20 MiB16.5×
Processes per connected device2 sshd + sampler0 (one Tokio task)—

Full benchmark notes (opens in a new tab)

Stack

  • Rust
  • axum
  • russh
  • Tokio
  • SQLite
  • Next.js
  • TypeScript
  • Docker Compose
  • Traefik
  • Apache Guacamole
  • KasmVNC
  • RustDesk
  • MCP

Further reading

Telepy on GitHub

Self-hosted with Docker Compose. AGPL-3.0.

GitHub(opens in a new tab)
  • Infrastructure & backend66 stars on GitHub

    dev-dock-manager-rust

    One Docker dev box per user, with a web terminal, a noVNC desktop and optional GPU. The Django version, rewritten in Rust, partly to find out whether I could.

    2026Active
  • Infrastructure & backend11 stars on GitHub

    Blockchain from Scratch

    Nine hands-on chapters, from hashing to a peer-to-peer network. The same Rust code powers interactive WebAssembly demonstrations in your browser.

    2026Completed
  • Infrastructure & backend1010 stars on GitHub

    dev-dock-manager

    The original Django dev-box manager: isolated Docker environments for several users on one machine. The Rust version replaced it, but this one carried the load first.

    2022Completed