Rewrite in Python with uv, zero external dependencies#11
Conversation
Replace Ruby implementation (sqlite3, markaby, htmlbeautifier gems) with a modern Python package using only stdlib modules. Managed by uv with hatchling build backend. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Introduces a `save` subcommand that reads tab groups from SafariTabs.db and writes them as bookmark folders into Safari's Bookmarks.plist. Creates a top-level "Tabby" folder with profile subfolders. Idempotent on re-run, with automatic backup and atomic writes. Refactors CLI to subcommands while preserving backward compatibility (`tabby [path]` still works). Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
|
Hey Joe — apologies for the slow response here. I wanted to give this the attention it deserves and it took me a while to get there. Thanks for your patience. ... This is a substantial PR and I really appreciate the effort you've put into this. I’ve been thinking about the best way to handle this, and I think I’d prefer not to merge it directly. Tabby (Ruby) is something I use personally and depend on for my own CLI automation, so I’d like to keep that as the canonical codebase rather than maintain two implementations in one repo. That said, your Python port absolutely stands on its own (especially with the much simpler install and new import feature). It definitely shouldn't sit around in a closed PR. It deserves a more visible home where it can be maintained and improved independently. Would you be open to publishing this in its own repo under your account — something like If you’re open to that, here's how we could do it: Python version:
Ruby version:
Let me know what you think, and thanks again for the thoughtful work here! |

We (Claude Code and I) replaced the Ruby implementation (sqlite3, markaby, htmlbeautifier gems) with a Python package using only stdlib modules and managed by uv.
We also added the ability to save the current tab groups into Safari's plist so you can interact with them directly in the browser, although sadly it usually requires restarting Safari to see the new bookmarks.
Works great for my use case so I'm sharing it here in case it's of interest.