Skip to main content

Overview

The patches/series file defines the order in which patches are applied to the Chromium source code. This is critical because patches must be applied in the correct sequence to avoid conflicts and ensure proper functionality.
The order of patches matters. Changing the order can cause patch application failures or runtime issues.

File Format

The file is a simple text file with one patch path per line:
path/to/patch.patch
another/patch.patch
# Comment lines start with #

# Blank lines are ignored
yet/another.patch
  • Each line specifies a patch file relative to the patches/ directory
  • Comments start with # and are ignored
  • Blank lines are ignored and can be used for organization

Patch Organization

Helium’s patches are organized into several categories:

Upstream Fixes

upstream-fixes/missing-dependencies.patch
upstream-fixes/vertical/r1568708-fix-crash-during-collapsed-tabgroup-drag.patch
upstream-fixes/vertical/r1568929-animate-cross-collection-operations.patch
# ... 46 more vertical tab patches
Backports of fixes from newer Chromium versions, particularly for vertical tab functionality. These patches:
  • Fix crashes and rendering issues
  • Improve drag-and-drop behavior
  • Enhance performance and animations
  • Are prefixed with revision numbers (e.g., r1568708)
Vertical tab patches are upstream improvements backported to ensure stable tab management.

Privacy Patchsets

Patches from privacy-focused Chromium forks:
inox-patchset/fix-building-without-safebrowsing.patch
inox-patchset/disable-autofill-download-manager.patch
inox-patchset/disable-update-pings.patch
inox-patchset/disable-rlz.patch
inox-patchset/modify-default-prefs.patch
inox-patchset/disable-battery-status-service.patch
Removes telemetry, RLZ tracking, and privacy-invasive features.

Brave Patches

brave/chrome-importer-files.patch
brave/custom-importer.patch
brave/fix-component-content-settings-store.patch
brave/tab-cycling-mru-impl.patch
Imports functionality from Brave browser:
  • Custom profile importer
  • MRU (Most Recently Used) tab cycling
  • Component content settings fixes

Debian Patches

debian/disable-google-api-warning.patch
Disables warning messages about missing Google API keys.

Helium Core Patches

Helium’s main functionality patches, organized by category:
helium/core/add-zen-importer.patch
helium/core/disable-unsupported-importers.patch
helium/core/services-prefs.patch
helium/core/override-chrome-protocol.patch
helium/core/onboarding-page.patch
helium/core/change-chromium-branding.patch
# ... more core patches
  • Zen Browser profile importer
  • Onboarding page integration
  • Branding changes
  • Native messaging host scanning
helium/core/search/restore-google.patch
helium/core/search/engine-defaults.patch
helium/core/search/fix-search-engine-icons.patch
helium/core/search/force-eu-search-features.patch
helium/core/search/omnibox-default-search-icon.patch
Search engine configuration and icon handling.
helium/core/noise/core.patch
helium/core/noise/canvas.patch
helium/core/noise/audio.patch
helium/core/noise/hardware-concurrency.patch
helium/core/reduce-accept-language-headers.patch
helium/core/disable-ad-topics-and-etc.patch
Fingerprinting protection through canvas/audio noise and reduced headers.
helium/core/ublock-setup-sources.patch
helium/core/ublock-install-as-component.patch
helium/core/ublock-reconfigure-defaults.patch
helium/core/ublock-helium-services.patch
Integrates uBlock Origin as a built-in component extension.
helium/core/flags-setup.patch
helium/core/add-low-power-framerate-flag.patch
helium/core/add-update-channel-flag.patch
helium/core/add-updater-preference.patch
helium/core/add-disable-ech-flag.patch
Custom chrome://flags entries and preferences.
helium/core/keyboard-shortcuts.patch
helium/core/update-default-browser-prefs.patch
helium/core/add-native-bangs.patch
helium/core/prefer-https-by-default.patch
helium/core/memory-saving-by-default.patch
helium/core/enable-parallel-downloading.patch
helium/core/infinite-tab-freezing.patch
Changes default behavior: HTTPS by default, memory saving, parallel downloads, etc.
helium/core/add-component-l10n-support.patch
helium/core/add-component-managed-schema-support.patch
helium/core/component-updates.patch
helium/core/fixups-component-setup.patch
Enhanced component extension system with localization and managed policies.

Helium Settings

helium/settings/setup-behavior-settings-page.patch
helium/settings/settings-page-icons.patch
helium/settings/remove-autofill.patch
helium/settings/privacy-page-tweaks.patch
helium/settings/about-page-tweaks.patch
# ... 18 settings patches
Customizes the Settings UI:
  • Removes unwanted sections (autofill, Safety Hub, translate)
  • Reorders menu items
  • Updates page icons and text
  • Adds custom options

Helium HOP (Helium Onboarding Page)

helium/hop/setup.patch
helium/hop/disable-password-manager.patch
Configures the first-run onboarding experience.

Helium UI

Extensive UI customization patches:
helium/ui/layout-constants.patch
helium/ui/layout-provider.patch
helium/ui/tabs.patch
helium/ui/toolbar.patch
helium/ui/omnibox.patch
helium/ui/app-menu-style.patch
Core layout, toolbar, tabs, and menu styling.

Patch Statistics

Total Patches

327 patches applied in sequence

Largest Category

Helium UI with 78 patches

Privacy Patches

69 patches from ungoogled-chromium, Inox, Iridium, Bromite

Upstream Fixes

47 patches backported from newer Chromium

Patch Naming Convention

Patches follow these naming patterns:
  • Upstream: rREVISION-description.patch (e.g., r1568708-fix-crash.patch)
  • Feature: add-feature-name.patch
  • Removal: remove-feature-name.patch or disable-feature-name.patch
  • Fix: fix-issue-description.patch
  • UI: component-name.patch (e.g., toolbar.patch, omnibox.patch)

Applying Patches

Patches are typically applied using the patch or git apply command:
# Apply all patches in order
while read -r patch; do
  # Skip comments and blank lines
  [[ "$patch" =~ ^#.*$ || -z "$patch" ]] && continue
  
  patch -p1 < "patches/$patch"
done < patches/series

Maintaining Patches

1

Create a new patch

Make changes to the Chromium source and create a patch:
git diff > patches/helium/core/my-new-feature.patch
2

Add to series file

Insert the patch path in the appropriate location in patches/series. Consider dependencies:
  • Place after patches it depends on
  • Place before patches that depend on it
3

Test patch application

Apply all patches from a clean Chromium source to ensure no conflicts.
4

Document the patch

Add a descriptive comment above the patch in series if needed:
# Adds support for custom protocol handlers
helium/core/custom-protocol-handlers.patch

Troubleshooting

  • Check if the patch was created against the correct Chromium version
  • Verify the patch is in unified diff format
  • Look for line ending issues (CRLF vs LF)
  • Check if a previous patch modified the same code
  • The patch may be outdated for the current Chromium version
  • Check for missing dependencies or header files
  • Review the patch for syntax errors or incomplete changes
  • Some patches may conflict at runtime even if they apply cleanly
  • Try applying patches in smaller groups to isolate the issue
  • Check patch order - some patches must be applied in sequence
  • flags.gn - Build flags that work with patches
  • deps.ini - Dependencies that may be affected by patches
  • downloads.ini - Source code that patches are applied to

Build docs developers (and LLMs) love