Too many tabs? Tabstract helps clear the clutter and sharpen your focus, while keeping your data completely private and local.
Download on the App Store · tabstract.app
- macOS with Safari installed
- Xcode 15 or newer
- Clone this repository.
- Open
Tabstract.xcodeprojin Xcode. - Select the Tabstract scheme or the Tabstract Extension scheme.
- Build and run the Tabstract macOS application.
- Enable the extension in Safari ▸ Settings ▸ Extensions if prompted.
- The extension should now be available in Safari's toolbar.
Tabstract.xcodeproj– Xcode project containing both targets.Tabstract– macOS container app used to manage the extension.Tabstract Extension– Safari Web Extension resources.
Tabstract includes a built-in debug pipeline that writes JS console output, DOM snapshots, CSS, storage state, and per-element inspection data to files on disk via native messaging. This allows debugging without access to Safari's Web Inspector for extensions.
All debug features are gated by debugMode in extension storage — disabled by default, zero runtime impact for end users.
Enable debug mode from any extension page console:
chrome.storage.local.set({debugMode: true})Output is written to:
~/Library/Group Containers/84HBFJDM48.group.com.paulmaiorana.Tabstract/debug/
See CLAUDE.md for full details on available output files and the element inspector.
If your Safari extension disappears or stops working after archiving the app in Xcode, it's likely due to multiple versions of the same app or extension existing on your machine. Safari can get confused and stop registering the extension entirely.
Workaround steps:
- In Xcode: go to Product ▸ Show Build Folder in Finder.
- Delete anything Tabstract-related from that build folder.
- Go to
~/Library/Developer/Xcode/DerivedData/and delete your project's derived data. - In Xcode: go to Window ▸ Organizer and delete any archived builds for the app.
- Make sure you don't have other copies of the app anywhere else on disk (check Downloads, Desktop, etc).
- Empty your Trash.
- Back in Xcode: do a fresh Build & Run.
This usually resolves the issue. It's a Safari/Launch Services quirk — not a bug in your extension code.
Reference: Apple Developer Forums thread 772581, answer ID 821488022. https://developer.apple.com/forums/thread/772581