This whole thing has been built with Claude Code. I've hardly checked the code at all so use at your own risk. Don't trust it just because the agent wrote "tests"
Automatic container routing for Firefox -- assign websites to containers with rules, manage bookmarks with container context, and see how you use your containers.
Firefox Multi-Account Containers let you isolate websites into separate browsing contexts -- different cookies, sessions, and storage for each container. This is powerful for privacy, separating work from personal browsing, and managing multiple accounts on the same service. But Firefox gives you no way to automate it. Every time you open a site, you have to remember which container it belongs in and manually open it there.
Silo fixes that. You write rules -- "open github.com in my Dev container", "restrict banking.com to my Finance container" -- and Silo intercepts every navigation to enforce them automatically. It also extends Firefox bookmarks with container associations, gives you a statistics dashboard showing how you use your containers, and provides import/export tooling for rules, containers, and complete backups.
It's built for privacy-conscious users who use containers seriously: developers juggling staging and production environments, people with multiple accounts on the same service, or anyone who wants their browsing compartmentalized without the manual overhead.
- Rule engine with 4 match types: exact URL, domain (with subdomain and path support), glob, and regex
- 3 rule types: Include (open in container), Exclude (break out of container), Restrict (force into container)
- Priority-based resolution: Restrict > Exclude > Include
- Inline prefix overrides:
@for regex,!for glob - Interactive pattern tester for validating rules before saving
- Duplicate rule detection and resolution
- Full CRUD for Firefox containers with custom names, icons, and colors
- Temporary containers that auto-delete when their last tab closes
- Preset wizard for quick setup of common ecosystems (Facebook, Google, Discord, Amazon, X/Twitter, TikTok, YouTube, Microsoft)
- Cookie clearing per container
- Sync with Firefox's native container list
- Firefox bookmark integration with a metadata layer for container associations
- Drag-and-drop reordering via hierarchical tree view
- Table view for bulk operations
- Fuzzy search across all bookmarks
- Bulk actions: assign containers, open in containers, delete
- Rules (JSON) -- export/import with preview, validation, and template download
- Containers (JSON) -- full container configuration import/export
- Complete data backup (JSON) -- backup/restore for containers, rules, preferences, categories, and stats
- Bookmarks (Silo JSON and cross-browser HTML) -- UI is present, but backend import/export handlers are currently not implemented
- Per-container usage: tabs opened, navigations, rule matches, time spent
- Global aggregates and daily breakdowns
- Container usage trends
- Active tab tracking
- Recent activity feed
- Workflow-first action panel focused on likely tasks
- Quick actions: open current tab in container, open new tab in container, open in new temporary container
- Searchable target-container picker with arrow/enter keyboard navigation
- Keyboard shortcuts for speed (
1,2,3on home;↑/↓+Enterin picker)
Full-tab management interface with sections for: Dashboard, Containers, Rules, Bookmarks, Import/Export, and Settings.
- SaaS-style app shell with persistent sidebar navigation
- Keyboard section switching (
1-6) - Container management master-detail workflow with search, filtering, and quick actions
- Container-page keyboard workflow (
/,j/k,n,e,c,Delete,r)
- Theme support: light, dark, and auto (follows system)
- Settings page includes theme switching and Firefox shortcut management helper
- Sync operations (
SYNC_PUSH,SYNC_PULL,GET_SYNC_STATE) are stubbed and currently return "Sync not implemented" - Bookmark import/export sections in Import/Export currently call placeholder handlers and are not yet functional
| Category | Technology |
|---|---|
| Language | TypeScript (non-strict, ES2020) |
| UI | React 18 |
| State management | Zustand |
| Styling | Tailwind CSS |
| Code quality | Biome (format + lint) |
| Build | esbuild + Extension CLI + Tailwind CLI |
| Testing | Jest + React Testing Library + Playwright |
| Drag-and-drop | @dnd-kit |
| Search | fuse.js |
| Icons | lucide-react |
| Validation | zod |
| Browser APIs | webextension-polyfill |
-
Clone the repository:
git clone https://github.com/jamesmacfie/silo.git cd silo -
Install dependencies:
npm install
-
Build the extension:
npm run build
-
Load in Firefox:
- Open
about:debugging - Click "This Firefox"
- Click "Load Temporary Add-on"
- Select
manifest.jsonfrom the project directory
- Open
- Node.js 16+
- Firefox 91+
npm run dev # Dev server with hot reload
npm run build # Production build
npm run test # Jest test suite
npm run test:watch # Watch mode
npm run test:coverage # Coverage report
npm run test:e2e # Playwright e2e tests
npm run type-check # TypeScript validation
npm run fmt # Biome format + lint (auto-fix)
npm run fmt:check # Biome check (no auto-fix)- Run
npm run dev - Open
about:debuggingin Firefox - Click "Load Temporary Add-on"
- Select
manifest.json - The popup is accessible from the toolbar icon; the options page opens in a full tab
- Install the extension and pin it to your toolbar
- Click the Silo icon to open the popup
- Choose one of the three popup actions (
1current tab,2new tab,3new temp container), then select a container when prompted - Open full management from the popup when you need deeper configuration
- Navigate away and back -- Silo will automatically open the site in the correct container
- Open the options page (click "Manage" in the popup, or right-click the icon)
- Go to the Rules section
- Click "New Rule" and configure:
- Pattern: the URL pattern to match (e.g.,
github.com,*.example.com/admin/*) - Match type: Domain, Exact, Glob, or Regex
- Rule type: Include, Exclude, or Restrict
- Container: target container (not required for Exclude rules)
- Priority: higher numbers take precedence within the same rule type
- Pattern: the URL pattern to match (e.g.,
- Include: Open matching URLs in the specified container when navigating from the default context. If already in a different container, the rule is ignored.
- Exclude: Break out of any container for matching URLs -- they open in the default (no container) context.
- Restrict: Force matching URLs into the specified container regardless of current context. This is the strongest rule type.
Popup:
1open current tab in chosen container2open new tab in chosen container3open current context in a new temporary containerArrowUp/ArrowDownmove through search results in the container pickerEnterconfirm selected container in the picker
Container Management:
/focus searchj/kmove selection through containersnnew containereedit selected containercclear selected container cookiesDelete/Backspacedelete selected containerrjump to Rules filtered by selected container
The Bookmarks section in the options page provides:
- Tree view with drag-and-drop reordering
- Table view for bulk operations
- Container association for each bookmark
- Fuzzy search across all bookmarks
Go to the Import/Export section in the options page.
- Working now: Rules JSON, Containers JSON, and Complete Data backup/restore
- Not yet implemented: Bookmarks (Silo JSON) and Bookmarks (cross-browser HTML)
See ARCHITECTURE.md for the full technical architecture including layer diagrams, data flows, event bindings, storage schema, and the URL matching engine.
This project is licensed under the MIT License - see the LICENSE file for details.