- Notifications
You must be signed in to change notification settings - Fork2.5k
Brave browser for Android, iOS, Linux, macOS, Windows.
License
brave/brave-browser
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
This repository holds the build tools needed to build the Brave desktop browser for macOS, Windows, and Linux. In particular, it fetches and syncs code from the projects defined inpackage.json
andsrc/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 ad-block engine.
- Linked throughbrave/adblock-rust-ffi.
You canvisit our website to get the latest stable release.
Please see thecontributing guidelines.
OurWiki also has some useful technical information.
Join the Q&A community if you'd like to get more involved with Brave. You canask 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.
Help us translate Brave to your language by submitting translations athttps://explore.transifex.com/brave/brave_en/.
Follow@brave on X for important news and announcements.
Follow the instructions for your platform:
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/bravecd path-to-your-project-folder/src/bravenpm install# the Chromium source is downloaded, which has a large history (gigabytes of data)# this might take really long to finish depending on internet speednpm run init
brave-core based android builds should usenpm run init -- --target_os=android --target_arch=arm
(or whichever CPU type you want to build for)brave-core based iOS builds should usenpm 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 androidnpm config set target_arch arm
Additional parameters needed to build are documented athttps://github.com/brave/brave-browser/wiki/Build-configuration
Internal developers can find more information athttps://github.com/brave/devops/wiki/%60.env%60-config-for-Brave-Developers
The default build type is component.
# start the component build compilenpm run build
To do a release build:
# start the release compilenpm run build Release
brave-core based android builds should usenpm run build -- --target_os=android --target_arch=arm
or set the npm config variables as specified above forinit
brave-core based iOS builds should use the Xcode project found inios/brave-ios/App
. You can open this project directly or runnpm run ios_bootstrap -- --open_xcodeproj
to have it opened in Xcode. See theiOS Developer Environment for more information on iOS builds.
Running a release build withnpm 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.
To start the build:
npm start [Release|Component|Static|Debug]
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 install
on 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 dependenciesonly 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 bothChromium andbrave-core to the latest remote commit for the current brave-core branch and theChromium ref specified in brave-browser/package.json (e.g.master or74.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 bothChromium andbrave-core to the versions specified in brave-browser/package.json and force updates all dependent repos - same asnpm 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. Mimicsgclient sync -D . |
Runnpm run sync brave_core_ref
to checkout the specifiedbrave-core ref and update all dependent repos including chromium if needed.
brave-browser>cd src/bravebrave-browser/src/brave> git checkout -b branch_name
brave-browser/src/brave> git fetch originbrave-browser/src/brave> git checkout [-b] branch_namebrave-browser/src/brave> npm run sync...Updating 2 patches......Updating child dependencies......Running hooks...
brave-browser/src/brave> git pullbrave-browser/src/brave> npm run sync...Updating 2 patches......Updating child dependencies......Running hooks...
Reset to latest brave-browser master and brave-core master (viainit
, will always result in a longer build and will remove any pending changes in your brave-core working directory):
brave-browser> git checkout masterbrave-browser> git pullbrave-browser> 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):
brave-browser/src/brave> git checkout featureBbrave-browser/src/brave> git pullbrave-browser/src/brave>cd ../..brave-browser> npm run apply_patches...Applying 2 patches...
- Google Safe Browsing: Get an API key with SafeBrowsing API enabled fromhttps://console.developers.google.com/. Update the
GOOGLE_API_KEY
environment variable with your key as perhttps://www.chromium.org/developers/how-tos/api-keys to enable Google SafeBrowsing.
- Security rules from Chromium
- IPC review guidelines (in particularthis reference)
- Brave's internal security guidelines (for employees only)
- Rust usage
SeeTroubleshooting for solutions to common problems.
About
Brave browser for Android, iOS, Linux, macOS, Windows.