A browser for the Mac

Small app.
Big reach.

Native on WebKit, built for the keyboard, and open to your coding agents.

Free and open source. Requires macOS 15.4 or later.

Tern showing a travel magazine page, with the address bar across the top and vertical tabs on the right.
3.8 MBrelease build
0copies of Chromium
4panes in one split
⌘Kto everything

Your hands stay
on the keys.

Search tabs, history and every command from one place. Then press ⌘J and click any link by typing.

The Tern command palette open, listing recent tabs and commands with their shortcuts.
⌘KCommand palette ⌘PTab picker ⌘JLink hints ⌘EFilter tabs ⌥⌘→Split right

Your app. Its docs.
One window.

Two to four tabs side by side, stacked or in a grid. Drag a tab onto the page, or press ⌥⌘→. Focus follows the pane you click.

Three tabs in a Tern split view grid, grouped together in the tab list.

The small things,
all built in.

Link hints

Every link, button and field gets a letter code. Type it to click.

Read the docs DS or the guide GD

Link peek

⌥-click opens a floating preview. Keep it as a tab or a split, or press esc.

peek
⌘↩ keep · esc close

!bangs

Search a site directly. About 25 are built in, and you can add your own.

!mdn grid

Pinned tabs that go back home

⌘W on a pinned tab that has wandered off takes it back to its page. Press it again and the tab goes to sleep.

github.com/issues/212wandered off
github.com⌘W, back home

Compact mode

On by default. The address bar stays out of the way until you point at the top edge or press ⌘L.

⌘L  the bar comes back over the page

Responsive design

Phone, tablet and laptop sizes, with the right user agent and pixel density.

Requests

Every request the page made, filterable, with copy as cURL.

/api/user200 · 41 ms
/app.js200 · 12 ms
/api/cart500 · 88 ms

Extensions

Press Add to Tern in the Chrome Web Store. Safari and unpacked extensions work too.

Chrome Web Store
Safari Web Extensions
Unpacked, MV2 and MV3

Built for agents

Your agent gets
a real browser.

A local API, a tern CLI and an MCP server. Off until you turn it on.

It sees what you see

Claude Code and other MCP clients open tabs, read the page as an outline, click, type, and read the console and network, all in the tabs you already have open.

Agent API
why does checkout fail?
tabs_open localhost:3000open
page_click e7act
network_list failedOnlyread
console_read errorread
POST /api/cart returns 500.
The console has the stack trace.

You see what it does

A tab an agent is acting on gets a purple ring and a tag, so you always know who's driving. You can also limit agents to the tabs they opened.

Agent is driving
emailada@example.compage_type e3
planTeampage_select e5

One line to connect

The API listens only on a Unix socket that only you can open, and no network port is ever opened. Scripts can use the same methods through the CLI.

$ claude mcp add tern -- \ /Applications/Tern.app/Contents/Helpers/tern mcp

$ tern page snapshot # outline with refs
$ tern page click e7
$ tern console read --level error

Quiet by default.
Light by design.

Blocked before you change a setting

EasyList and EasyPrivacy are compiled to native WebKit rules, so blocking costs the page almost nothing. Links lose tracking parameters before they load, and local dev servers are left alone.

shop.example.com/item?utm_source=mail&fbclid=x1
ad networkblocked
trackerblocked
localhost:3000left alone
*.testleft alone

Tabs that give memory back

A restored tab is just a URL and its history until you open it, so 200 tabs cost about as much as one. Background tabs are suspended after 15 minutes, and sooner when macOS runs low on memory.

localhost:3000running
docs.swift.orgsuspended ☾
github.comsuspended ☾
news.ycombinator.comnot loaded yet

Tech specs

Size

3.8 MB, release build. No Electron and no bundled Chromium.

Engine

WebKit through WKWebView, in plain AppKit and Swift.

Requires

macOS 15.4 or later. To build, Xcode 16.3 or later and XcodeGen.

Extensions

Chrome Web Store, Safari Web Extensions, and unpacked MV2 and MV3 extensions.

Automation

JSON-RPC over a local Unix socket, the tern CLI, and an MCP server.

License

MIT. Free and open source.

Build it in
about a minute.

There are no signed releases yet, so you build Tern from source. You'll need Xcode and XcodeGen.

$ brew install xcodegen
$ git clone https://github.com/TorstenDittmann/tern.git
$ cd tern
$ make release