Skip to content
Tim Flynn edited this page Oct 27, 2022 · 19 revisions

Welcome to the Rebel browser!

Rebel aims to be an easily brandable fork of Chromium.

To brand Chromium today, there are thousands of source and build configuration changes to be made. Rebel's goal is to serve as an intermediate fork of Chromium, allowing downstream forks to create a fully branded browser with only a handful of build arguments.

Building Rebel

Building Rebel works much the same as building upstream Chromium, as outlined in //docs.

Rebel, however, has an extra build dependency upon Node.js. Rebel's New Tab Page is a React application. The repository for the New Tab Page is synced as a third-party dependency and built as a gclient hook, which requires Node.js.

Further, instead of cloning Google's depot_tools repository, clone the fork of depot_tools from the Rebel repository. Then use that fork to fetch Rebel:

mkdir rebel && cd rebel
git clone https://github.com/RebelBrowser/depot_tools

# Add /path/to/rebel/depot_tools to your $PATH.

fetch rebel

The invocation to fetch will take some time to complete, as it also syncs third-party dependencies. Once complete, Rebel may be compiled similar to upstream Chromium with autoninja. A platform-agnostic rebel_all target has been added to build the chrome target and Rebel tests.

cd src
gn args out/Default # See your platform's build instructions in //docs for applicable build arguments.
autoninja -C out/Default rebel_all

Branding

Rebranding of the Rebel browser is performed through GN arguments, all of which are listed in the //rebel/rebel.gni configuration file. These may be overridden via args.gn or any other valid GN argument method.

Argument Description
rebel_browser_name The full product name of your browser.
rebel_browser_name_path_component The path-component name of your browser which corresponds to the path under //rebel/branding containing assets for your fork1.
rebel_browser_company The full name of your company.
rebel_browser_company_path_component The path-component name of your company, used to create directories on disk2.
rebel_browser_schema The URL schema to use for internal pages3.
rebel_package The application package name, used for e.g. Android applications and macOS bundles.
rebel_new_tab_page_url The remote URL of your New Tab Page4.
rebel_default_sites_url The remote URL containing the default set of New Tab Page tiles to display.

1 These are analogous to the resources under //chrome/app/theme/chromium. This path must contain the same image assets as the existing //rebel/branding/rebel directory (it is a TODO to generate most of these images, see #15).

The rebel_browser_name_path_component argument is also used to brand some Chromium paths on disk. Therefore, best practice is for this value to be all lowercase and contain no spaces (hyphens and underscores are fine).

2 For example, the user's profile path will be under this path. It is typically convenient for this value to contain no spaces.

3 This schema is created as an alias to the chrome:// schema. That is, the chrome:// schema will still work and can be used for navigation. However, URLs will always be displayed to the user with the value of this argument.

4 For details on how the NTP is created for all platforms, see the New Tab Page page.

Features

Details on how Rebel has implemented brandability of Chromium is available on the following pages:

Clone this wiki locally