Best-effort browser detection for extension contexts.
Chrome does not expose a native chrome.runtime.getBrowserInfo() API. This helper combines available browser signals and returns where the guess came from, so callers can decide how much they trust the result.
BrowserNameBrowserFamilyBrowserGuessSource
guessBrowser(): Promise<BrowserGuess>Guesses the current browser using the best signal available in the current context.
import {BrowserName, guessBrowser, isBrowser} from "@addon-core/browser";
const guess = await guessBrowser();
if (isBrowser(guess, BrowserName.Firefox)) {
// Firefox-specific path
}The result contains the guessed browser name, browser family, source, and optional raw metadata:
interface BrowserGuess {
name: BrowserName;
family: BrowserFamily;
source: BrowserGuessSource;
rawName?: string;
vendor?: string;
version?: string;
}Detection order:
- Firefox
runtime.getBrowserInfo(). - Chromium User-Agent Client Hints via
navigator.userAgentData. - Brave-specific
navigator.brave. - Browser-specific globals such as Opera or Safari globals.
- Generic Chromium User-Agent Client Hints.
navigator.userAgent.- Extension URL protocol from
runtime.getURL("").
When no signal is available, the helper returns:
{
name: BrowserName.Unknown,
family: BrowserFamily.Unknown,
source: BrowserGuessSource.Unknown
}For capability checks, prefer feature detection. Use guessBrowser() when product logic, diagnostics, or analytics truly need a browser label.
isBrowser(guess: BrowserGuess, ...names: BrowserName[]): booleanChecks whether a browser guess matches one of the provided names.
import {BrowserName, guessBrowser, isBrowser} from "@addon-core/browser";
const guess = await guessBrowser();
if (isBrowser(guess, BrowserName.Edge, BrowserName.Chrome)) {
// Chromium browser branch for Chrome or Edge
}isBrowserFamily(guess: BrowserGuess, family: BrowserFamily): booleanChecks whether a browser guess belongs to a browser family.
import {BrowserFamily, guessBrowser, isBrowserFamily} from "@addon-core/browser";
const guess = await guessBrowser();
if (isBrowserFamily(guess, BrowserFamily.Chromium)) {
// Chromium-family branch
}