SetHighlightedElement
This change migrates from `SetHighlightedButton` to `SetHighlightedElement`, which expects an element id. Chromium changes: https://chromium.googlesource.com/chromium/src/+/b382a3d424be203195b983b3d37b258786c839f8 https://chromium.googlesource.com/chromium/src/+/5c61647fa6331ad61b0173fb2780e3ce732445dd commit b382a3d424be203195b983b3d37b258786c839f8 Author: Maks Orlovich <morlovich@chromium.org> Date: Fri Apr 24 11:59:39 2026 -0700 Finish SetHighlightedButton->Element migration. The final user (the CrOS input overlay for games) was working around a bug in SetAnchorView not updating the highlight unless it also changed the widget (or was being set for the first time). So testcase + fix that bug, and remove the now unneeded call. With that done, the now unused SetHighlightedButton and corresponding code are also removed, as is some of the necessary state. The ability to highlight views::Buttons is still around, however, since they may be the anchor. Bug: 489349570 Change-Id: I48f49ce05f07379db8dbf3b6614b85a66a2b165a Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/7789255 Reviewed-by: Dana Fried <dfried@chromium.org> Commit-Queue: Maks Orlovich <morlovich@chromium.org> Reviewed-by: Cici Ruan <cuicuiruan@google.com> Cr-Commit-Position: refs/heads/main@{#1620373} commit 5c61647fa6331ad61b0173fb2780e3ce732445dd Author: Maks Orlovich <morlovich@chromium.org> Date: Tue Mar 10 15:57:49 2026 -0700 Migrate ContentSettingsImageView to SetHighlightedElement. This required giving all of them an ElementIdentifier, which we will need for the WebUI impl anyway. To support multiple implementations the naming was placed in the Model, and the view made to use it consistently. Loosely inspired by caraitto@'s https://chromium-review.googlesource.com/c/chromium/src/+/7591203 Bug: 489349570 Change-Id: I6993f6acd2edd1d20a12ec951a4a2e2dfee4a625 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/7649608 Reviewed-by: Andy Paicu <andypaicu@chromium.org> Reviewed-by: Kaan Alsan <alsan@chromium.org> Commit-Queue: Maks Orlovich <morlovich@chromium.org> Cr-Commit-Position: refs/heads/main@{#1597382}
Brave Core
Brave Core is a set of changes, APIs, and scripts used for customizing Chromium to make the Brave browser. Please also check https://github.com/brave/brave-browser which only holds the issues, releases and the wiki.
Overview
This repository holds the build tools needed to build the Brave desktop browser for all platforms. In particular, it fetches and syncs code from the projects defined in package.json and src/brave/DEPS:
- Chromium
- Fetches code via
depot_tools. - Sets the branch for Chromium (ex: 65.0.3325.181).
- Fetches code via
- brave-core
- Mounted at
src/brave. - Maintains patches for 3rd party Chromium code.
- Mounted at
- adblock-rust
- Implements Brave's adblock engine.
- Linked through brave/adblock-rust-ffi.
Resources
Downloads
You can visit our website to get the latest stable release.
Contributing
Please see the contributing guidelines.
Our Wiki also has some useful technical information, especially about setting the development environment.
Security Policy
Please see the security policy.
Community
Join the Q&A community if you'd like to get more involved with Brave. You can ask for help, discuss features you'd like to see, and a lot more. We'd love to have your help so that we can continue improving Brave.
You can also ask questions and interact in the community-guest channel on Brave Software's Slack.
Help us translate Brave to your language by submitting translations at https://explore.transifex.com/brave/brave_en/.
Follow @brave on X for important news and announcements.
Install prerequisites
Follow the instructions for your platform:
Clone and initialize
Once you have the prerequisites installed, you can get the code and initialize the build environment.
git clone git@github.com:brave/brave-core.git path-to-your-project-folder/src/brave
cd path-to-your-project-folder/src/brave
npm install
# the Chromium source is downloaded, which has a large history (gigabytes of data)
# this might take really long to finish depending on internet speed
npm run init
brave-core based android builds should use npm run init -- --target_os=android --target_arch=arm (or whichever CPU type you want to build for)
brave-core based iOS builds should use npm run init -- --target_os=ios
You can also set the target_os and target_arch for init and build using:
npm config set target_os android
npm config set target_arch arm
Additional config needed to build are documented at https://github.com/brave/brave-browser/wiki/Build-configuration
Internal developers can find more information at https://github.com/brave/internal/wiki/Build-configuration
Build Brave
The default build type is component.
# start the component build compile
npm run build
To do a release build:
# start the release compile
npm run build Release
brave-core based android builds should use npm run build -- --target_os=android --target_arch=arm or set the npm config variables as specified above for init
brave-core based iOS builds should use the Xcode project found in ios/brave-ios/App. You can open this project directly or run npm run ios_bootstrap -- --open_xcodeproj to have it opened in Xcode. See the iOS Developer Environment for more information on iOS builds.
Build Configurations
Running a release build with npm run build Release can be very slow and use a lot of RAM, especially on Linux with the Gold LLVM plugin.
To run a statically linked build (takes longer to build, but starts faster):
npm run build -- Static
To run a debug build (Component build with is_debug=true):
npm run build -- Debug
NOTE: the build will take a while to complete. Depending on your processor and memory, it could potentially take a few hours.
Run Brave
To start the build:
npm start [Release|Component|Static|Debug]
Update Brave
npm run sync -- [--force] [--init] [--create] [brave_core_ref]
This will attempt to stash your local changes in brave-core, but it's safer to commit local changes before running this
npm run sync will (depending on the below flags):
- 📥 Update sub-projects (chromium, brave-core) to latest commit of a git ref (e.g. tag or branch)
- 🤕 Apply patches
- 🔄 Update gclient DEPS dependencies
- ⏩ Run hooks (e.g. to perform
npm installon child projects)
| flag | Description |
|---|---|
[no flags] |
updates chromium if needed and re-applies patches. If the chromium version did not change, it will only re-apply patches that have changed. Will update child dependencies only if any project needed updating during this script run. **Use this if you want the script to manage keeping you up to date instead of pulling or switching branches manually. ** |
--force |
updates both Chromium and brave-core to the latest remote commit for the current brave-core branch and the Chromium ref specified in brave-core/package.json (e.g. master or 74.0.0.103). Will re-apply all patches. Will force update all child dependencies. **Use this if you're having trouble and want to force the branches back to a known state. ** |
--init |
force update both Chromium and brave-core to the versions specified in brave-core/package.json and force updates all dependent repos - same as npm run init |
--sync_chromium (true/false) |
Will force or skip the chromium version update when applicable. Useful if you want to avoid a minor update when not ready for the larger build time a chromium update may result in. A warning will be output about the current code state expecting a different chromium version. Your build may fail as a result. |
-D, --delete_unused_deps |
Will delete from the working copy any dependencies that have been removed since the last sync. Mimics gclient sync -D. |
Run npm run sync brave_core_ref to checkout the specified brave-core ref and update all dependent repos including chromium if needed.
Scenarios
Create a new branch:
> cd src/brave
src/brave> git checkout -b branch_name
Checkout an existing branch or tag:
src/brave> git fetch origin
src/brave> git checkout [-b] branch_name
src/brave> npm run sync
...Updating 2 patches...
...Updating child dependencies...
...Running hooks...
Update the current branch to the latest remote:
src/brave> git pull
src/brave> npm run sync
...Updating 2 patches...
...Updating child dependencies...
...Running hooks...
Reset to latest brave-core master (via init, will always result in a longer build and will remove any pending changes in your brave-core working directory):
src/brave> git checkout master
src/brave> git pull
src/brave> npm run sync -- --init
When you know that DEPS didn't change, but .patch files did (quickest attempt to perform a mini-sync before a build):
src/brave> git checkout featureB
src/brave> git pull
src/brave> npm run apply_patches
...Applying 2 patches...
Enabling third-party APIs
- Google Safe Browsing: Get an API key with SafeBrowsing API enabled from https://console.developers.google.com/. Update the
GOOGLE_API_KEYenvironment variable with your key as per https://www.chromium.org/developers/how-tos/api-keys to enable Google SafeBrowsing.
Development
- Security rules from Chromium
- IPC review guidelines (in particular this reference)
- Brave's internal security guidelines (for employees only)
- Rust usage
Troubleshooting
See Troubleshooting for solutions to common problems.