Outer Loop is a specialized web browser that uses SSH to connect to web apps running on private servers. It uses a custom SSH port forwarding engine that is designed to work well on laptops. You can close your laptop lid, open it later, and everything will still be connected.
This is useful for:
- Scientific computing (Jupyter, Tensorboard, MLFlow, RStudio Server, etc.)
- Server / database administration (phpMyAdmin, Kubernetes Dashboard, etc.)
- Smart home management (Home Assistant)
Outer Loop's long-term product direction: keep making it more fun to use apps like these.
Example
Here is Outer Loop showing a Jupyter Python notebook and a Tensorboard LLM training visualization.
Apps like Jupyter and Tensorboard are not typically visible to standard web browsers if they're running on remote servers, because it would be terribly unsafe to let the whole internet touch this app. Instead, they run on a local port on the server, which your computer can't access directly.
Classically, to get access to these, you had to open a new terminal and run:
ssh -L 24601:localhost:8889 mrcslws@lambda4.mycompany.com &
ssh -L 24602:localhost:6006 mrcslws@lambda4.mycompany.com &
then you would navigate to "localhost:24601" and "localhost:24602". This works, but it's not a great experience, and it's not reliable; for example, the connection often breaks if you close your laptop.
In Outer Loop, each browser window is connected to a remote server. It can freely access remote ports as if they're on your own machine. And, in addition to providing this better UI, the web view's connection to the server is much more reliable in Outer Loop than over the classic "ssh -L". Outer Loop's custom SSH engine embraces the transient nature of SSH sessions, rather than assuming that they are stable, which makes everything seamless, even after you close your laptop and reopen it later.
Of course, you don't have to use the built-in web view. If you really just want a reliable standalone port forwarder for your existing browser, Outer Loop supports that:
Hope you like it! And feel free to .
Release Notes
I'm doing a lot of rapid releases, building toward the next big release, where I'll invite others to come build their own outerframe apps. Here is a recent changelog:
0.9.14 (January 21, 2026)
Sandbox improvements. With this change, now most of Outer Loop runs inside an App Sandbox, while Outerframe content runs inside of classic Seatbelt sandboxes (similar to what Chrome uses). Before this change, SSH processes and Outerframe content used Seatbelt sandboxes, while the main app was not sandboxed. Now the few pieces of logic that need to run un-sandboxed are in a dedicated "OuterProcesses" process, the SSH processes inherit the App Sandbox of a "OuterSSH Launcher" process, and Outerframe content network acesss is proxied through an App Sandboxed "OuterNetworkProxy" process.
0.9.13 (January 17, 2026)
- Outerframe platform improvements
0.9.12 (January 16, 2026)
- Support for multiple clients connecting to the same app backends.
- Various outerframe platform improvements.
0.9.11 (January 14, 2026)
This introduces a native "Top" app, running via a new "outerframe" platform. Run it from the Start Page. See blog post "The web could use machine code" for more info on outerframes. I am working on making this platform available to everyone, so that Outer Loop becomes "a native frontend for servers".
0.9.10 (October 16, 2025)
- Add support for private key passphrases.
- Support authenticating via ssh-agent (Thanks for reporting, Subutai!)
- Improve the "empty" / first run experience: (Thanks, Nick C., for suggestions!)
- When adding a server, provide suggestions from ~/.ssh/config
- Put keyboard focus on address bar when opening new window / tab
- When the Start Page is empty, show some tutorial text.
- Fixed macOS 14 crash (Thanks for the bug report, Subutai!)