mob3

mcp
Security Audit
Warn
Health Warn
  • License — License: AGPL-3.0
  • Description — Repository has a description
  • Active repo — Last push 0 days ago
  • Low visibility — Only 7 GitHub stars
Code Warn
  • fs module — File system access in .github/pages/build.sh
Permissions Pass
  • Permissions — No dangerous permissions requested

No AI report is available for this listing yet.

SUMMARY

MOB³ is a small indie terminal browser with a real rendering engine and built-in MCP automation.

README.md

image

MOB³ is a small indie terminal browser with built-in MCP automation

Written in Go, it combines its own HTML parser, CSS cascade and layout engine, ANSI renderer and pure-Go JavaScript runtime to display real web pages, including inline images, without a GUI toolkit or persistent profile. History, cookies, storage and caches live in memory only: closing MOB³ saves nothing.

Project page: mob3.net.

Documentation

Try it with Docker:

docker run --rm -it ghcr.io/mob3net/mob3 -graphics blocks

Download and install

Download the latest MOB³ release
from GitHub Releases.

Release archives cover Linux (386, amd64, armv6, armv7, arm64) and
macOS (amd64, arm64). Choose the archive for your OS and architecture, for
example mob3_vX.Y.Z_linux_amd64.tar.gz. Each archive contains the static
mob3 binary.

Example:

tar -xzf mob3_vX.Y.Z_linux_amd64.tar.gz
sudo install -m 0755 mob3 /usr/local/bin/mob3
mob3 -version

Screenshots



What to expect

MOB³ is a content browser, not a full browser engine. It is happiest with
text-focused pages and gets rough on modern JavaScript-heavy apps.

Works well

  • Documentation, blogs, news articles, wikis, forums, changelogs and old or
    server-rendered HTML.
  • Headings, paragraphs, lists, links, tables, <pre> blocks, images and common
    presentational markup.
  • Text/search inputs, textareas, single-select option popups and multi-select
    list boxes, with a visible caret, arrow-key editing, date/time/month/week,
    range sliders, color swatches, HTML constraint checks, GET and urlencoded POST
    form submission. The start page has justified text and a full-width
    search/URL box that resolves input the same way as the o prompt, including
    the -search fallback.
  • Common CSS: selectors, cascade and inheritance, box model (including
    box-sizing and min/max sizes), margins, borders, backgrounds, text styling,
    lists, tables, viewport-width @media queries and basic flex rows.
  • PNG/JPEG/GIF/WebP/BMP/SVG/data-URI images when enabled with -graphics (auto,
    kitty, iterm, or blocks for half-block art). Images are off by default
    for speed.
  • Session-only memory cache for CSS, scripts and decoded images, with a 32 MiB
    default budget and -cache to change or disable it.
  • Light JavaScript: DOM queries and mutation, classList/style, click
    handlers, timers, alert/confirm/prompt and native <dialog> open/close,
    same-origin fetch/XMLHttpRequest plus simple CORS cross-origin requests,
    and in-memory storage/cookies. Script
    errors turn the footer JavaScript label into a red JavaScript:Error;
    click it to open the console.
  • JavaScript console (!): tabbed view of logs, requests, cookies and
    in-memory storage, plus the raw page HTML; evaluate one-line expressions in
    the page's runtime, with Up/Down history and results appended to the log.
  • Reader mode (R, the footer Reader:on/Reader:off label, or -reader at
    launch): extracts the main article into a narrow, chrome-free text column,
    stays enabled across navigation, and restores the normal page and scroll
    position when toggled off.
  • Dark mode (D, the footer Dark:on/Dark:off label, or -dark at launch):
    asks sites for their dark styles with prefers-color-scheme: dark. Pages that
    already render a dark background keep their own palette; otherwise
    backgrounds, text, links and borders are remapped to a dark palette. Images
    keep their original colors.
  • Headless MCP automation (-mcp): navigate, snapshot page text and links,
    click, type, press keys, scroll, evaluate JavaScript and inspect history.
    Text-only and memory-only; no screenshots or persistent sessions.
  • Browser-style toolbar with back/forward/reload/home, history/help buttons,
    a bookmarks button when -bookmarks is supplied, a config gear and a centered
    page title.
  • Keyboard and mouse navigation, including the kitty keyboard protocol in
    kitty, WezTerm, Ghostty and foot, / incremental find (including multi-word
    phrases) with highlighted matches
    (also in the console HTML tab), a draggable page scrollbar, history (including
    a top-right History page
    listing the session's links), bookmarks imported with -bookmarks from a
    Netscape HTML export, scrolling, focus, link hover targets in the footer,
    text selection, and a ! JavaScript console.

Rough edges

  • Modern JavaScript apps (SPAs, dashboards, Google search and similar) may show
    a partial page, a blank page or their no-JavaScript fallback. Pages that rely
    on ES modules show a status-bar warning that modules are unsupported and
    suggest reader mode (R).
  • Reader mode is heuristic: it can pick too little or too much content on
    unusual layouts, shows a snapshot rather than live updates, and removes
    images, forms and other interactive controls. Dark mode keeps images in
    their original colors and approximates some author color schemes.
  • Anti-bot and firewall checks (Cloudflare, CAPTCHA, DataDome/PerimeterX,
    Imperva/Sucuri, access-denied pages) are generally not usable. A “Site
    blocked” page is shown instead.
  • No video/audio playback, WebGL, WebAssembly, workers, WebSockets, iframes,
    Shadow DOM, custom elements, real observers or full History API.
  • Basic CSS grid rows are supported, along with position:relative,
    position:absolute and position:fixed; floats, position:sticky,
    z-index, CSS
    variables, animations, transitions, generated content, @import and
    background images are unsupported or approximated as block flow.
  • SVG support is partial: text inside SVG, <use>/<symbol>, filters, masks and
    CSS-in-SVG may be missing. Animated WebP is not supported.
  • Oversized images are capped at 60% of the viewport width and 24 rows,
    preserving their aspect ratio.
  • No tabs or automatic downloads; download links and non-HTML responses open a
    popup with a copyable curl command instead, and multipart/file uploads are
    not implemented (clicking a file input shows an unsupported notice). Selected
    page text copies with
    y through OSC 52 (terminal support required), and the URL can be selected
    with the terminal.
  • Very large pages, stylesheets and images are capped to keep memory and CPU
    bounded. Style and layout also run under a time budget, so a pathological
    page is shown partially with a truncation notice instead of freezing the
    browser. Pages whose timers update the DOM are redrawn a few times per
    second rather than continuously, and an idle page with no pending timers does
    not repaint at all.

Using command line options

Start reading Wikipedia in dark mode:

mob3 -dark -reader 'https://en.wikipedia.org/wiki/Vim_(text_editor)'

See all available options with -h flag. Every flag and default is listed in the
command-line reference.

Capture a PNG screenshot:

mob3 -png -width 120 bbc.com/news > bbc.png

Automation (MCP)

mob3 -mcp runs a headless browser as a Model Context Protocol server over
stdin/stdout. It accepts an optional starting URL and fixed -width:

{
  "mcpServers": {
    "mob3": {
      "command": "/path/to/mob3",
      "args": ["-mcp", "-width", "100", "about:home"]
    }
  }
}

Tools: navigate, snapshot, screenshot, click (link number, CSS
selector or x/y), type, press, scroll, back, forward, reload,
evaluate and history. snapshot returns the current page viewport as text, visible links
as [n] and form controls with coordinates. Results are text only: there is no
pixel screenshot because MOB3 renders to terminal cells.

The server is local and unauthenticated, sessions and storage are memory-only,
and nothing is written to disk. Do not expose it as a network service. See the
full MCP reference for the protocol, snapshot format and
tool details.

Development

Build from source and start browsing:

make
./bin/mob3 https://example.com

Requires Go 1.27 or newer. Interactive mode runs on Linux and macOS terminals;
Windows users can run it under WSL. When stdin/stdout are not a terminal, MOB³
automatically falls back to dump mode.

Press ? inside the app for keys, mouse and forms help. Run mob3 -h for the
full list of command-line flags. mob3 -version prints the embedded version.

Contributing

Contributions are welcome. Every pull request must include the broad
license-grant CLA statement described in
CONTRIBUTING.md; it
keeps MOB³ available under both AGPL-3.0-only and a commercial license. The PR
workflow checks the statement. The CI workflow runs formatting, vet and tests.

License

MOB³ is licensed under the GNU Affero General Public License, version 3 only
(AGPL-3.0-only). Copyright (c) 2026 Milos Stojanovic. See
LICENSE.

A separate commercial license is available on request for use without the
AGPL's source-disclosure requirements.

MOB³ is provided “as is”, without warranty of any kind. See the warning at the
top: this is not a security boundary.

Third-party module licenses are listed in
THIRD_PARTY_NOTICES.

Reviews (0)

No results found