Native macOS · Safari

Your Safari tabs,
down the side
and in order.

BaoTabs docks a vertical tab list to the left of your Safari window. Tabs you open from a link nest under the tab you opened them from, so a morning of research reads as a tree instead of forty identical favicons.

macOS 14 or later · Apple silicon & Intel · Free

Try it: click a row, or the triangle to fold a branch.

Actually native

Swift, SwiftUI and AppKit. No Electron, no bundled browser, no local server. It is a menu bar app that uses about as much memory as a text editor and almost no CPU when idle.

Real Safari tabs

Not a copy or a bookmark list. Click a row and you land on that exact tab. Drag a row and Safari's own tab bar reorders with it.

Your tab list never leaves your Mac

No account, no sync, no in-app analytics. BaoTabs makes exactly two kinds of network request: fetching a site's own favicon and, only if you allow it, checking whether a new version exists. Nobody else ever holds a copy of your tabs.

The idea

Tabs that remember where they came from

Safari has no concept of which tab opened which. Every tab sits in the bar at the same level, in the order it happened to arrive. BaoTabs works out the link and draws it. Open three references from one article and they sit indented beneath it, foldable in a click, closable as a group.

  • Fold a parent to hide its whole branch, with a count of what is tucked away
  • Drag vertically to reorder, horizontally to change nesting depth
  • Nesting, pins and groups survive quitting Safari and coming back
Long read on baobabs
→ opened from a link
→ opened from a link
→ opened from that
Something else entirely
Depth is only drawn while it matches Safari's real tab order. Rows are never reordered to make the tree look tidier.

Features

Everything a tab bar should have done years ago

Groups & four views

File tabs into coloured groups by dragging. Then look at the same tabs as a Tree, By Age, By Domain or By Group, depending on what you need to find.

Instant search & command palette

Rank every open tab by title, URL, domain and group as you type. Nothing is indexed or cached, no page text is read and no remote service is involved.

Pin, lock, Read Later

Pin a tab into its own section so bulk closes step around it. Lock one so it cannot be closed at all. Park anything in a Read Later queue that outlives the tab.

Reopen with its notes intact

Restore a closed tab to the branch, group and pin it had before. Closing a tab never throws away what BaoTabs knew about it.

Export & import

A versioned, portable archive of tabs, groups and settings, designed to move to another machine rather than to copy this one's session.

Immersive mode

Optional: reclaim Safari's own horizontal tab strip and draw a breadcrumb of where the current tab came from, which a horizontal tab bar cannot show.

Themes & a compact rail

Choose from a growing range of colour themes. Collapse the whole thing to a favicon-only rail and hand the freed space back to Safari.

Docks and gets out of the way

Rides beside Safari's frontmost window, same height, following moves and resizes. Switch apps and it drops behind rather than floating over your work.

Privacy

Your tabs stay on your Mac

The long version, covering this website as well as the app, is in the Privacy Policy.

No account, no sync

There is nothing to sign in to and nothing uploaded. What BaoTabs knows lives in a JSON file in your own Application Support folder.

One permission, asked once

Automation access to Safari, the same mechanism any script uses to list your tabs. macOS asks the first time and you can revoke it in System Settings whenever you like.

Accessibility only if you ask

Requested only when you switch immersive mode on, and used only to read where Safari's tab row sits inside its window. Never to type, click or read a page.

Favicons come from the sites

Icons are fetched from the site itself and cached on disk. No favicon service gets handed a list of every host you have open.

Update checks you opt into

BaoTabs asks once before it starts checking for new versions, and never checks on its own until you say yes. The request carries nothing about you or your machine, not even which version of macOS you are running.

BaoTabs app icon

Get BaoTabs

Free and small. Drag it to Applications, allow Automation when macOS asks, and your tabs appear immediately.

Requires macOS 14 Sonoma or later and Safari. Universal build.

FAQ

Common questions

Is this a Safari extension?

No. BaoTabs is an ordinary macOS app that reads and controls Safari through Apple Events, the same scripting interface AppleScript uses. There is an optional web extension that supplies one identifier Safari otherwise withholds, but everything works with it uninstalled, and it can never be required.

Does it slow Safari down?

No. Safari is polled about once a second while you are in it, and roughly every three seconds while you are working elsewhere. Window position is read from the window server, which costs no round trip into Safari at all.

Why does it need Automation permission?

It is the only way to ask Safari what is open and to tell it which tab to switch to. macOS asks once, per app, and you can withdraw it in System Settings → Privacy & Security → Automation at any point.

Does it work with private windows?

No. Safari's private windows are not scriptable, so they do not appear in the sidebar, which is the right behaviour for a private window.

Can I drag a tab to another window?

Not yet. Within a window, dragging reorders and re-nests properly. Across windows a nested branch would have to be broken apart to survive the move, so the feature is left out for now.

Other browsers?

No. Every assumption in BaoTabs is about Safari specifically, from how tabs are addressed to how its window is measured. Supporting another browser would mean starting again rather than adding an option.

Where does my data live?

In a versioned JSON file in your Application Support folder, plus a few window preferences in UserDefaults. You can export the whole thing to a portable archive whenever you want, and delete it by deleting the folder.