Firefox Source Tree Documentation
Welcome! This is the documentation for the Firefox source tree, written by and for the people who build Firefox. It covers how Firefox and Gecko are put together, how to build and test them, and how to get a patch landed.
New here? Start with the setup guide to get a build going, then read the contributor quick reference to make your first contribution. The documentation lives next to the code in mozilla-firefox/firefox.
Overview
Getting Started
Working On Firefox
- Working on Firefox
- Firefox Contributors’ Quick Reference
- Working with stack of patches Quick Reference
- Making a patch series reviewable
- Phabricator vs GitHub
- Pocket Guide: Shipping Firefox
- Editor / IDE integration
- Getting reviews
- Levelling up
- How to submit a patch
- Data Collection
- Data Review
- Searchfox
- Firefox AI Coding Policy
- Introduction to Jujutsu
- Git Tricks
- Code Review FAQ
- Reviewer Checklist
- Debugging Firefox
- Configure Development Certificate
- Signing Local macOS Builds
- Firefox Source Code Directory Structure
- Understanding Artifact Builds
- Firefox for Mobile Devices
- Working with ESR115
- Engineering Show and Tell
- Filing good bugs
- Helpful error messages for web developers
- Bug Handling
- Firefox Crash Reporting
Firefox User Guide
Source Code Documentation
- Governance
- Firefox Front-end
- How-To’s
- Address Bar and Search Bars
- Browser Usage Telemetry
- Frontend Code Review Best Practices
- Command Line Parameters
- Browser Startup
- Category manager indirection (callModulesFromCategory)
- Distribution Customizations (distribution.ini)
- CustomizableUI Component
- Enterprise Policies
- Web Apps in Firefox
- Form Autofill
- Firefox Home (New Tab)
- Firefox Welcome Experience (about:welcome)
- Installer
- Installation Attribution
- Default Browser Agent
- Migration
- Mini Window
- PageDataService
- Places
- Messaging System
- Search UI
- Session Restore
- Tabbed Browser
- Touch Bar
- UITour
- Firefox Branding
- Storybook for Firefox
- Reusable UI widgets
- Other types of UI Widgets
- Lit
- XUL and HTML
- Figma Code Connect
- Typography
- Design Tokens
- Backup Component
- Sidebar
- moz-cached-ohttp Protocol
- Desktop Launcher app
- Private Browsing Proxy
- Installation Directory Layout
- DOM
- Handling shadow DOM in the various tree kinds
- DOM IPC
- DOM Navigation
- Push
- Script Security
- Xray Vision
- DOM Workers & Storage
- Web IDL bindings
- IOUtils Migration Guide
- Federated Credential Management
- Implementing specifications using WHATWG Streams API
- Microtask Reordering
- Use Counters
- Logging native keyboard and IME event handler behavior
- Editor
- Style system (CSS) & Layout
- Graphics
- Processes, Threads and IPC
- Firefox DevTools Contributor Docs
- Toolkit
- Profiles Service
- JavaScript Logging
- Add-on Manager
- Autocomplete
- Background Task Mode
- Crash Manager
- Downloads
- Crash Reporter
- Internal URLs
- Search Service
- IP Protection
- Shield Recipe Client
- Nimbus
- Messaging System Schemas
- Picture-in-Picture
- Prompts
- Subprocess Module
- Telemetry
- Firefox on Glean (FOG)
- Toolkit Modules
- Toolkit Widgets
- Fingerprinting Resistance
- WebExtensions API Development
- Managing the built-in en-US dictionary
- DMG Install
- Application Update
- Anti-Tracking
- Translations
- Session Store
- PictureInPictureChildVideoWrapper Reference
- Firefox’s CAPTCHA Detection
- Content Relevancy
- Push notification helper
- SpiderMonkey
- Building and testing SpiderMonkey
- Running Automated JavaScript Tests
- Hacking Tips
- SavedFrame
- JavaScript Language Feature Checklist
- So You Want to Add a Bytecode Op
- Adding Use Counter Telemetry to the JS Engine
- How SpiderMonkey Optimizes
- Inline caches / CacheIR
- Engine Constraints
- Debugger API
- Components of SpiderMonkey
- JS Loader
- GeckoView
- Fenix
- Acronym Dictionary
- Addressing a performance regression
- Architecture Decisions
- Architecture Overview
- Crash Monitoring
- Creating a release branch
- Data practises
- Development Test Plan
- Fennec Legacy: Migration
- Firebase Cloud Messaging for WebPush
- Firefox for Android Team Processes
- Home
- Implementing Telemetry
- Implementing a Nimbus Experiment
- List of Fenix Threads
- Logging Crash Information
- Metric Feature Tags
- Debug settings menu instructions
- Overwrite secret settings from
local.properties - Tabs Tray Item Animations
- Tech Principles
- Telemetry - Implementation, Reviews, Renewals
- Test Telemetry Pings
- Working with Strings
- Adjust
- Certificates
- Crash Reporting
- Experiments
- Manual Testing
- Metrics Definitions
- Release Checklist
- Startup Performance
- Substituting Local GeckoView
- Sync Integration Tests
- Telemetry
- UI Tests
- Focus for Android
- Architecture Decisions
- Battery Debugging
- Content blocking
- Crash Reporting with Sentry
- Development Custom GeckoView
- Feature & Issue workflow
- Running GeckoView in a debug environment
- Home
- Homescreen Tips
- Multisession architecture
- Recommended pre-push hook
- Release Process
- Release tracks
- Removing strings
- Sprint Process
- Telemetry
- UI Test
- WebIDL
- libpref
- Networking
- Remote Protocols
- Services
- Permissions
- File Handling
- Widget
- Firefox on macOS
- Firefox on Windows
- Firefox AI Runtime
- Page Extractor
- Accessibility
- Media Playback
- Code quality
- Writing Rust Code
- Rust Components
- Gecko Profiler
- Performance
- Database bindings (SQLite, KV, …)
- XPCOM
- NSPR
- Network Security Services (NSS)
- Web Security Checks in Gecko
- RLBox sandboxing
The Firefox Build System
Testing & Test Infrastructure
- Automated Testing
- Understanding Treeherder Results
- Sheriffed intermittent failures
- Turning on Firefox tests for a new configuration
- Avoiding intermittent tests
- Debugging Intermittent Test Failures
- Testing Policy
- Configuration Changes
- Browser chrome mochitests
- Chrome Tests
- geckodriver
- Test Verification
- WebRender Tests
- Mochitest
- XPCShell tests
- TPS
- web-platform-tests
- GTest
- Fuzzing
- Sanitizer
- Performance Testing
- Code coverage
- Testing & Debugging Rust Code
AI Agent Tools
Releases & Updates
Localization & Internationalization
Firefox and Python
Metrics Collected in Firefox