Ryan X. Charles
Ryan X. Charles
Follow

TermSurf 1.0: The Terminal That Surfs

June 22, 2026 · Ryan X. Charles

TermSurf 1.0 is out. It puts a real web browser inside your terminal:

brew tap termsurf/termsurf
brew install --cask termsurf

Here is the simple idea. You spend all day in a terminal. But you also need to look at web pages — docs, a dashboard, the thing you’re building on localhost. So you keep flipping back and forth to a separate browser window. TermSurf stops the flipping. The browser lives in the terminal, right next to your code.

What it does, in plain words

Open a pane and type:

web localhost:3000

A normal web page shows up, in your terminal, in a pane. You can click links, scroll, type into boxes, log in — all the things a browser does, because it is a browser. Split your terminal and the page splits with it. Close the pane and it’s gone. It feels like any other terminal split, except one of the splits happens to be the whole internet.

What’s new since 0.1

Back in April I shipped 0.1. That version answered one question: can a real browser actually run inside a terminal pane? Yes, it can.

1.0 is the version where it stops being a clever demo and starts being a tool you can rely on. Under the hood there used to be five different half-built attempts sitting side by side. Now there’s one. The terminal part got rebuilt on top of Ghostty, which is a fast, modern terminal, so TermSurf inherits all the things a good terminal already does well.

It’s a protocol, not a single app

Here’s the part I’m most happy about, explained without jargon.

Think of TermSurf less like one program and more like a language that two programs use to talk to each other. On one side is the terminal. On the other side is the browser. They don’t have to be glued together — they just have to speak the same language. The terminal says “draw a page here, this size,” the browser draws it, and the terminal shows it.

Why care? Because once the two sides only need to agree on a language, you can swap either side out. A different terminal could speak it. A different browser could answer. The terminal and the browser stop being one locked box and become two pieces you can mix and match.

A real browser, not a fake one

The browser inside TermSurf is real Chromium — the same engine under Chrome. Not a screenshot, not a stripped-down reader, not a picture of a web page. Real pages, real logins, real JavaScript, and yes, real DevTools when you need to poke at something. It’s drawn straight onto your screen by the graphics card, so it stays smooth even when you resize and scroll.

The proof: a second browser shows up

This is the moment the “it’s a language, not a box” idea stops being a promise.

In 1.0 there’s a second browser engine starting to answer the same language — Safari’s engine, WebKit, running real pages in early tests. That matters because it means the swap actually works. The terminal didn’t know or care which browser was on the other end. It asked for a page; a different browser drew it. Same conversation, different participant. That’s the whole bet of TermSurf paying off, and you can see it happening rather than take my word for it.

Try it

If you’re new, two commands get you running:

brew tap termsurf/termsurf
brew install --cask termsurf

If you’re already on 0.1, upgrade:

brew update && brew upgrade --cask termsurf

Then open a pane and point it somewhere:

web ryanxcharles.com
web localhost:3000
web --profile work gmail.com

It’s open source under the MIT license. Code is on GitHub, and the project lives at termsurf.com. If you want the original story of why this thing exists, read Introducing TermSurf.

The browser is in the terminal now. Stop flipping windows.

Surf.


Earlier Blog Posts


Back to Blog

Copyright © 2026 Ryan X. Charles