Published Tabzero Team· Updated

Chrome, Firefox, and Safari Tabs APIs: A Compatibility Plan

Shared WebExtension names do not guarantee identical behavior. A tab manager should port one user workflow at a time, checking permissions, data fields, API availability and packaging in each target browser.

Chrome, Firefox, and Safari Tabs APIs: A Compatibility Plan

Start with a feature inventory

List the actions your extension actually performs: query active tabs, read titles and URLs, create groups, restore recently closed pages, inject code or open a companion panel. For each action, record the exact API call, manifest permission and browser version the feature needs.

This prevents a misleading claim that a whole extension is compatible because one call to tabs.query() works. A browser can support tab discovery but differ on grouping, background lifecycle or panel behavior.

Compare permission semantics

Chrome and Firefox both document privileged tab fields such as URL and title. MDN notes that permission details and URL-filter behavior have browser-specific history. Review the current reference for the exact target version instead of copying a Chrome manifest and assuming Firefox grants the same fields.

Safari web extensions also require explicit page and API permissions, with Safari-specific packaging and distribution. Apple's compatibility guidance asks developers to review manifest keys and JavaScript API usage. Treat browser permission prompts as part of the tested product experience.

Keep adapters small and capability-based

Wrap browser calls behind feature-level functions such as listSelectableTabs, openSavedSources and requestPageAccess. The adapter should return the same application result shape with explicit unsupported or permission-denied states. Avoid a single giant compatibility layer that hides important differences.

Before invoking an optional API, check availability in that browser and version. A missing method should disable only its related feature, not break note writing or URL-only source saving.

Chrome, Firefox, and Safari Tabs APIs: A Compatibility Plan contextual product example
An example browser-tab view for finding, selecting and returning to the pages that belong to a task. Credit: Tabzero.

Account for background and packaging differences

An extension's background context and lifecycle affect event listeners and temporary state. Test the same restore and tab-event workflows after an idle period or restart in each browser. Do not assume a global JavaScript variable will survive because it did in one development profile.

Safari web extensions are packaged with an app through Apple's tooling, and the packager can report unsupported manifest keys. Record those findings before advertising Safari support or promising feature parity.

Idea: a visible capability matrix

Maintain a small matrix with rows for tab search, group creation, session restore, page capture and notes. Columns should show tested browser/version, required grant, supported state and the fallback. Publish only capabilities that passed a real browser test.

This also helps users understand why a feature button is missing. A clear 'Not available in this browser version' is better than an action that silently does nothing.

Test user outcomes, not just API names

Run the same task in each browser: select three tabs, save their links with a note, close one source, then reopen it. Check whether titles were readable, links survived restart and errors were reported. Repeat with denied permissions and a restricted page.

Write down where behavior differs and adapt the UI accordingly. Compatibility is a verified workflow, not merely a manifest that installs.

Tabzero: Browser Tab Manager & Notes

Save tab links, keep notes beside your sources, and return to what matters. Tabzero is in development preview; AI Notes remains planned.

Check availability