explaingit

browsh-org/browsh

18,804JavaScriptAudience · developerComplexity · 3/5QuietLicenseSetup · hard

TLDR

A text-based web browser that runs real Firefox in the background and streams the rendered page as text to your terminal, letting you browse modern websites over slow internet.

Mindmap

mindmap
  root((repo))
    What it does
      Renders websites in terminal
      Runs headless Firefox
      Converts to text characters
    Why use it
      Slow internet connections
      Unstable networks
      Low-power devices
    How it works
      Firefox backend
      Text conversion
      SSH or MoSH protocol
    Tech stack
      Go language
      Firefox extension
      Headless browser
    Deployment
      Linux and macOS
      Docker support
      Remote server setup

Things people build with this

USE CASE 1

Browse modern websites over a 3kbps tethered connection by running Browsh on a remote server and viewing text output via SSH.

USE CASE 2

Reduce battery drain and CPU load on a low-powered device by offloading rendering to a remote machine.

USE CASE 3

Access the full web from a terminal-only environment without losing JavaScript functionality.

USE CASE 4

Maintain stable browsing sessions over unreliable networks using MoSH protocol instead of SSH.

Tech stack

GoJavaScriptFirefoxDocker

Getting it running

Difficulty · hard Time to first run · 1h+

Requires Docker, Firefox binary, and Go build; multiple moving parts (browser backend + streaming frontend) need coordination.

Use freely for any purpose, including commercial use, as long as you comply with the GNU Lesser General Public License v2.1 terms, which allow modification and distribution with attribution.

In plain English

Browsh is a text-based web browser that runs modern, JavaScript-heavy websites inside a terminal. Most text browsers like elinks cannot handle modern websites because they lack JavaScript support. Browsh solves this by running a real instance of headless Firefox behind the scenes, letting Firefox do all the heavy rendering work, and then converting the result into text characters that display in your terminal. The main reason to use it is very slow internet connections. If you have a 3kbps tethered connection, you can SSH into a server with a fast connection, run Browsh there, and the server does the heavy web downloading while your SSH session only transfers the lightweight text representation of the page. It also supports MoSH (a protocol that handles dropped connections and reconnections better than SSH) to make browsing even more stable on unreliable networks. A secondary use case is offloading browser CPU and battery drain from a low-powered device by running the browser on a remote server. You would use Browsh if you need to browse the full modern web over a very slow or unstable connection, or via a terminal-only environment. It is built with Go for the terminal interface and a JavaScript Firefox extension, runs on Linux and macOS, can be launched via Docker, and is licensed under GNU Lesser General Public License v2.1.

Copy-paste prompts

Prompt 1
How do I set up Browsh on a remote server and connect to it from my laptop over SSH to browse websites with minimal bandwidth?
Prompt 2
Show me how to use Browsh with MoSH instead of SSH to handle dropped connections better on my unstable mobile network.
Prompt 3
How do I run Browsh inside Docker and what are the steps to get it working on my Linux machine?
Prompt 4
Explain how Browsh converts a rendered Firefox page into text characters that display in the terminal.
Prompt 5
What are the keyboard shortcuts and navigation commands in Browsh for browsing websites in the terminal?
Open on GitHub → Explain another repo

Generated 2026-05-18 · Model: sonnet-4-6 · Verify against the repo before relying on details.