
Engineering service
Brave extension development
Brave installs extensions from the Chrome Web Store, so the work is making your Chrome extension behave under Brave's defaults: Shields blocking, Brave Wallet, fingerprinting protection and the Google services Brave leaves out. We test in Brave with its default settings, fix what breaks, and build the extension first if you don't have one.
- 11+ years of experience
- 300+ projects delivered
- Remote team, clients worldwide
- NDA on request
Overview
What it is and when it fits
Brave installs extensions from the Chrome Web Store and has no store of its own, so a Brave extension is a Chrome extension. What differs is what Brave changes around it. Shields blocks ads, trackers and some scripts on pages. Brave Wallet injects its own Ethereum provider. Fingerprinting protection adds small random changes to canvas, WebGL and audio output. Google services such as account sign-in and push messaging are also missing or off by default.
Each of these can break a feature that works in Chrome. We test your extension in Brave with its default settings, trace each failure to its cause and fix it in the same codebase, so there is still one package for Chrome and Brave.
Who this is for
- Teams whose Chrome extension misbehaves in Brave and who need to know why.
- Wallet and Web3 products that have to work next to Brave Wallet.
- Teams whose extension uses Google sign-in, push messages or canvas-based device checks.
- Teams whose extension depends on scripts, requests or page features that Brave blocks by default.
How it works
Architecture at a glance
A Chrome extension running in Brave
Popup, side panel, options
The interface users see. Talks to the background through messages.
Service worker (background)
The same Manifest V3 service worker as in Chrome. Brave stops it when idle, so state must live in storage.
Content script
Runs inside pages you choose. Can read and change the page, in an isolated JavaScript world.
Chromium extension APIs
The Chrome set, minus Google services: identity.getAuthToken does not work, and gcm push messages are off by default.
Web page, after Brave
Shields may have removed scripts and requests, Brave Wallet may inject window.ethereum, and canvas, WebGL and audio output carry random noise.
What we offer
What's included
Shields compatibility
Features fixed so they keep working with Shields on, including for users who choose aggressive blocking.
Google sign-in that works in Brave
Sign-in rebuilt so users can log in with Google, or with your own accounts, in Brave as well as Chrome.
Wallets next to Brave Wallet
Wallet extensions that dapps can find and users can choose, even with Brave Wallet turned on.
Canvas, WebGL and audio features
Device checks and other features that read these outputs, reworked so Brave's fingerprinting protection does not break them.
Push messages without Google
Real-time updates that keep arriving in Brave, where Google's push service is off by default.
Brave-specific code paths
Separate handling for Brave only where it is needed, detected reliably even though Brave reports Chrome's user agent.
Deliverables
What you get
- 01
Brave test report
Pass and fail results for every feature in Brave, with default and aggressive Shields, and the cause of each failure.
- 02
Fixes in your existing codebase
Code changes merged into your Chrome extension, not a separate Brave fork. One package still serves both browsers.
- 03
Wallet test matrix
For wallet products: results with each Brave default-wallet setting and next to other wallet extensions.
- 04
Brave checks in your test suite
Test cases added to your regression suite, so future releases are checked in Brave as well as Chrome.
- 05
Help-center article
A short page for your users on the Brave settings that affect the extension, such as per-site Shields and the default wallet.
- 06
Chrome Web Store release
The fixed version published to the Chrome Web Store, which is where Brave users get their updates.
Compare
Brave-specific checks
These are the places where a working Chrome extension most often breaks in Brave, and what we change.
| Area | What goes wrong in Brave | What we do |
|---|---|---|
| Shields blocking | Shields removes ads, trackers and some scripts from pages, including scripts your content script injects from a blocked domain. | We test with default and aggressive Shields, find what is blocked, and bundle the script, change how it loads or add a fallback. |
| Google sign-in | chrome.identity.getAuthToken does not work, so "Sign in with Google" fails. | We move sign-in to chrome.identity.launchWebAuthFlow or your own OAuth flow, which works in Brave, Chrome and other Chromium browsers. |
| Wallet provider | Brave Wallet and your extension both want window.ethereum. Brave's default-wallet setting decides which one pages get. | We add EIP-6963 provider announcements so dapps can list both wallets, and stop assuming your provider owns window.ethereum. |
| Fingerprinting protection | Canvas, WebGL and audio output get small changes that differ per site and per session, so hashes of them keep changing. | We replace those reads with an ID the extension stores itself, or make the feature tolerate the variation. |
| Push messages | chrome.gcm relies on Google's push service, which Brave turns off by default. | We move real-time updates to a connection your backend controls, or to scheduled checks with alarms. |
| Browser detection | Brave sends the same user agent as Chrome, so code that sniffs the user agent cannot tell them apart. | Where the extension needs Brave-specific handling, we detect Brave with navigator.brave.isBrave(). |
Why it matters
What this gives you
Works with Shields left on
Your users keep Brave's protections, and the extension still works. Lowering Shields is never the fix we hand them.
Sign-in that works in more browsers
Moving off getAuthToken fixes Google sign-in in Brave and in other Chromium browsers that lack Google's account services.
A wallet users can actually pick
Dapps list your wallet next to Brave Wallet, so users who chose your wallet are not routed to Brave's.
Brave support you can stand behind
You can list Brave as a supported browser, backed by a test report rather than an assumption that "it is Chromium, so it works".
Our approach
How a Brave compatibility project runs
Baseline in Brave
We install your extension in a clean Brave profile with default settings and record how each feature behaves.
You get: A pass and fail list
Trace the causes
For each failure we find whether Shields, Brave Wallet, fingerprinting protection, a missing Google service or something else is responsible.
You get: Root causes for each issue
Adjust the extension
We change the extension so it works with Brave's defaults instead of asking users to turn protections off.
You get: Code fixes and fallbacks
Retest and document
We rerun the tests with default and aggressive Shields, add Brave to your regression checks, and write down results and known limits.
You get: A test report and support notes
When this is not the right fit
- Your extension already works in Brave and does not use Google sign-in, push messages, a wallet or canvas-based checks. Chrome extension development is the place to start.
- You want the fix to be "turn Shields off". We work with Brave's defaults, not against them.
- You want Brave itself changed, with built-in features. That is Brave browser development, a separate service.
Tech stack
Technologies we use
The engines, APIs and tools we use on this service.
FAQ
Common questions
No. Brave installs extensions from the Chrome Web Store, so a Brave extension is a Chrome extension that has been tested and adjusted for Brave. One package serves both browsers.
Brave does not include Google's account services, so chrome.identity.getAuthToken does not work there. chrome.identity.launchWebAuthFlow, or your own OAuth flow, works in Brave, Chrome and other Chromium browsers. Your backend then handles the token exchange and refresh.
Support EIP-6963, the standard that lets several wallets announce themselves to a dapp instead of competing for window.ethereum. Brave Wallet supports it. Users can also choose a default in Brave's wallet settings, so your support docs should explain that setting.
Shields blocks ads, trackers and some scripts on the pages users visit, based on filter lists. If your content script loads a script from a blocked domain, or relies on a page script that Shields removed, that feature fails. We find the blocked request, then bundle the script inside the extension, change how it loads or add a fallback.
Brave's fingerprinting protection adds small random changes to canvas, WebGL and audio output, and the changes differ per site and per session. Anything that hashes those values, for example to recognize a device, gets a different answer each time. We switch such features to an ID the extension stores, or make them tolerate the change.
Yes. If the extension does not exist yet, we build it as a Manifest V3 Chrome extension under our Chrome extension development service and include Brave in the test matrix from the start.
Related reading
Our services
Related services

Start a project
Make your extension work in Brave
Tell us what the extension does. We will test it against Shields, Brave Wallet, sign-in and fingerprinting protection, and fix what breaks.

