helium://setup.
The onboarding experience is designed to be transparent about privacy choices and put users in control from the start.
Architecture
The onboarding system is a standalone web application built separately from the browser:Separate Repository
Built Artifact
Compiled and packaged as tarball
Downloaded at Build
Fetched during Helium build process
Component Integration
Integrated into browser as internal page
Build Integration
The onboarding page is managed throughdeps.ini:
deps.ini
~/workspace/source/deps.ini:9-14
URL Scheme
The onboarding page is accessible via the custom URL scheme:chrome://settingschrome://extensionschrome://flags
Onboarding Flow
HOP (Helium Opinionated Policies) Integration
The onboarding system integrates with Helium’s policy system:What is HOP?
What is HOP?
HOP (Helium Opinionated Policies) is a custom policy provider that sets privacy-focused defaults and enforces security settings.Key features:
- Highest priority policy source (overrides enterprise policies)
- Sets privacy-first defaults
- Configures password manager behavior
- Manages WebRTC privacy settings
~/workspace/source/patches/helium/hop/setup.patchPolicy Provider Architecture
~/workspace/source/patches/helium/hop/setup.patch:15-19
Policy Priority
Helium’s policy system has a defined priority order:| Priority | Source | Can Override? |
|---|---|---|
| Highest | Helium Opinionated Policy (HOP) | Everything |
| High | Restricted Managed Guest Session | Everything below |
| Medium | Platform/Enterprise Policies | Everything below |
| Low | Cloud Policies | Everything below |
| Lowest | Default Values | Nothing |
~/workspace/source/patches/helium/hop/setup.patch:160-162
Service Consent
The onboarding flow explicitly asks for consent to enable Helium services:What Users See
Services Explanation
Services Explanation
During onboarding, users see:
- What Helium services are: Anonymous web services for additional functionality
- What they provide: Extension updates, browser updates, filter lists, spellcheck
- Privacy guarantee: No tracking, no telemetry, self-hostable
- Opt-in choice: Services are disabled by default until user consents
Preference Storage
Consent is stored in user preferences:helium.services.consented: Has user seen the consent screen?helium.services.enabled: Are services currently enabled?helium.did_onboarding: Has user completed onboarding?
Development
Running Locally
During development, you can work on the onboarding page separately:Integration Testing
To test onboarding integration in Helium:Debugging
You can open DevTools on the onboarding page:- Navigate to
helium://setup - Right-click → Inspect
- DevTools opens for the onboarding page
The onboarding page runs in a standard WebContents, so all Chrome DevTools features work.
Onboarding vs Settings
Understanding the relationship:- Onboarding (helium://setup)
- Settings (chrome://settings)
Purpose: First-run experience and initial consentWhen shown:
- First launch of Helium
- User hasn’t completed onboarding
- Can be manually accessed anytime
- Introduction to Helium
- Service consent flow
- Initial configuration
- Welcome experience
Localization
The onboarding page supports internationalization:- Translations managed in onboarding repository
- Matches Helium’s supported languages
- Uses browser’s language preference
- Fallback to English if translation unavailable
Version Tracking
The version number indeps.ini follows the format:
202601021937 = January 2nd, 2026, 19:37 UTC
This timestamp-based versioning ensures:
- Clear chronological ordering
- Easy identification of build time
- No semantic versioning confusion
Schema Change Notifications
When Helium services schema changes, users who already completed onboarding see notifications:
This ensures users who enabled services during onboarding are informed of any behavior changes.
See: Helium Services - Schema Versioning for details on the schema versioning system
Technical Details
Build System Integration
Build System Integration
The onboarding component is downloaded and integrated during the Chromium build process:
- Build script reads
deps.ini - Downloads tarball from GitHub releases
- Verifies SHA256 checksum
- Extracts to
components/helium_onboarding/ - GN build system includes the component
- Assets are embedded in the binary
Custom URL Handler
Custom URL Handler
The
helium://setup URL is registered as a custom scheme:- Handled by Chromium’s URL routing system
- Serves static files from embedded component
- No network requests required
- Works offline
Preference Initialization
Preference Initialization
First-run preferences are initialized before onboarding:After onboarding completes:
helium.did_onboarding→truehelium.services.consented→true(if user enabled services)- Other preferences set based on user choices
Communication with Browser
Communication with Browser
The onboarding page communicates with the browser via:
- Chrome APIs:
chrome.settingsPrivatefor preference management - Message passing: JavaScript ↔ C++ communication
- WebUI handlers: Backend handlers process onboarding completion
Future Enhancements
Planned improvements to the onboarding system:- Profile import: Import bookmarks/settings from other browsers
- Search engine selection: Choose default search engine during setup
- Theme preview: Preview and select color themes
- Extension recommendations: Suggest privacy-focused extensions
Next Steps
Architecture Overview
See how onboarding fits into Helium’s architecture
Helium Services
Learn what services users consent to during onboarding