Skip to content

Tech stack

SmartTab Organizer is a cross-browser extension (Chromium MV3 and Firefox MV2), written entirely in TypeScript. No part of the application relies on a server or a third-party service: the whole codebase runs in the browser.

LayerTechnology
Build and packagingWXT (multi-target extension framework)
UIReact 19, Radix Themes and Radix Primitives
Types and validationStrict TypeScript, Zod for runtime schemas
Unit testsVitest + Testing Library
E2E testsPlaywright (Chrome MV3)
StorybookStorybook 8 + addon-a11y and test-runner with axe-core
DocumentationAstro Starlight (this site)
Lint and formatESLint, Prettier
BrowserManifestStatus
ChromeMV3Primary target
Edge, Brave, Arc, Opera (Chromium-based)MV3Compatible (same artifact as Chrome)
VivaldiMV3Partial: native grouping is not supported. Deduplication and sessions work.
FirefoxMV2Compatible (targets pnpm build:firefox, pnpm zip:firefox)

Browser APIs are accessed through wxt/browser, which normalizes the differences between chrome.* and browser.*. The extension uses a subset that exists on both: browser.tabs, browser.tabGroups, browser.storage, browser.action / browser.browserAction, browser.notifications, browser.scripting.

BackendContents
browser.storage.localDomain rules, settings, sessions (pinned, active, archived), workspaces, categories, UI preferences (expanded state, etc.)
browser.storage.sessionProfile-window map, session drafts, editing reentrancy guard

No cookies. No network requests beyond what the browser does on its own.

See Architecture for pointers to entry points, background modules, and the core hooks.

The repository welcomes contributions. Project conventions (logger, accessibility, i18n, Storybook, writing style) are described in CLAUDE.md. Guidelines for adding a pack or a preset live in src/data/packs/README.md and public/data/presets.json.