Firefox on FreeBSD: Web Browser Review
Firefox is the default web browser recommendation for FreeBSD. It is open source, actively maintained, available as a binary package, and works well on both X11 and Wayland. Mozilla does not officially support FreeBSD, but the FreeBSD ports maintainers keep the browser current and patch it for platform-specific issues.
This review covers installation, configuration for best performance, Wayland vs X11 differences, hardware acceleration, WebRTC, and an honest comparison with Chromium on FreeBSD.
Installation
sh# Install Firefox pkg install firefox # Check the installed version firefox --version
The FreeBSD package tracks Firefox ESR (Extended Support Release) by default. If you want the latest release channel:
sh# Latest release (non-ESR) pkg install firefox # Note: check `pkg search firefox` to see available versions # The main firefox package typically tracks the latest stable release
First Launch
sh# Launch Firefox firefox &
On first launch, Firefox creates a profile in ~/.mozilla/firefox/. The default configuration works but is not optimized for FreeBSD. The sections below cover the tweaks that matter.
Wayland vs X11
Firefox supports both display protocols on FreeBSD. The choice depends on your compositor.
Running Under Wayland
sh# Set the environment variable before launching export MOZ_ENABLE_WAYLAND=1 firefox &
To make this permanent, add to ~/.profile or ~/.zprofile:
shexport MOZ_ENABLE_WAYLAND=1
Benefits of Wayland mode:
- No screen tearing
- Proper per-monitor DPI scaling on HiDPI displays
- Smoother scrolling with compositor integration
- Better touchpad gesture support
Drawbacks:
- Screen sharing in video calls is less reliable (PipeWire dependency)
- Some extensions that interact with window management may behave differently
Running Under X11
Firefox under X11 is the more tested configuration on FreeBSD. No special environment variables are needed.
sh# Just launch it firefox &
To verify which display protocol Firefox is using, navigate to about:support and check the "Window Protocol" field. It will show "wayland" or "x11".
Hardware Acceleration
Hardware acceleration offloads video decoding and rendering to the GPU, reducing CPU usage and improving battery life on laptops.
GPU Driver Prerequisite
sh# Ensure drm-kmod is installed and loaded pkg install drm-kmod # For Intel: sysrc kld_list+="i915kms" kldload i915kms # For AMD: sysrc kld_list+="amdgpu" kldload amdgpu
Enabling Hardware Video Decoding
Navigate to about:config in Firefox and set:
shellmedia.ffmpeg.vaapi.enabled = true media.hardware-video-decoding.enabled = true media.hardware-video-decoding.force-enabled = true
Install VA-API support:
sh# For Intel GPUs pkg install libva-intel-driver # Or for newer Intel (Gen 8+): pkg install intel-media-driver # For AMD GPUs pkg install libva-mesa-driver # Verify VA-API works pkg install libva-utils vainfo
Enabling WebRender
WebRender is Firefox's GPU-accelerated rendering engine. It should be enabled by default on supported hardware, but verify:
In about:config:
shellgfx.webrender.all = true
Check about:support -- under "Compositing", it should say "WebRender".
Verifying Hardware Acceleration
Navigate to about:support and look for:
- Compositing: Should say "WebRender" (not "Basic")
- WebGL 1/2 Renderer: Should show your GPU name
- Hardware Video Decoding: Should show supported codecs
Test with a 4K YouTube video. Check CPU usage:
sh# In another terminal, watch CPU usage while playing video top -P
If hardware decoding is working, CPU usage for a 4K VP9 video should be under 20% on modern hardware. Without hardware decoding, expect 60-100%.
Performance Tweaks
Memory and Cache
In about:config:
shell# Increase content process limit (default is 8) dom.ipc.processCount = 8 # Adjust disk cache size (in KB, -1 for automatic) browser.cache.disk.capacity = 1048576 # Disable session restore for faster startup browser.sessionstore.resume_from_crash = false
Network Performance
shell# Enable HTTP/3 (QUIC) network.http.http3.enable = true # DNS over HTTPS (if desired) network.trr.mode = 2 network.trr.uri = https://mozilla.cloudflare-dns.com/dns-query
Smooth Scrolling
shell# Fine-tune scrolling behavior general.smoothScroll = true general.smoothScroll.msdPhysics.enabled = true mousewheel.min_line_scroll_amount = 30
Disable Telemetry
Firefox sends telemetry data by default. On FreeBSD, there is no reason to keep this enabled:
shell# In about:config toolkit.telemetry.enabled = false toolkit.telemetry.unified = false datareporting.healthreport.uploadEnabled = false datareporting.policy.dataSubmissionEnabled = false
Or from the GUI: Settings > Privacy & Security > Firefox Data Collection and Use -- uncheck everything.
WebRTC and Video Calls
WebRTC for video conferencing (Google Meet, Jitsi, etc.) works on FreeBSD with some caveats.
Audio
sh# FreeBSD uses OSS by default. Firefox expects PulseAudio or PipeWire. # Install PulseAudio: pkg install pulseaudio # Or PipeWire (newer, recommended for Wayland): pkg install pipewire pipewire-pulse # Start PipeWire (add to your compositor's autostart) pipewire & pipewire-pulse &
Camera
USB webcams using the webcamd driver work with Firefox:
sh# Install webcam support pkg install webcamd sysrc webcamd_enable="YES" service devd restart service webcamd start # Add your user to the webcamd group pw groupmod webcamd -m yourusername
Screen Sharing
Under X11, screen sharing works directly (Firefox can capture the X11 root window).
Under Wayland, screen sharing requires PipeWire and the appropriate xdg-desktop-portal:
sh# For Sway: pkg install xdg-desktop-portal-wlr # For Hyprland: pkg install xdg-desktop-portal-hyprland # For GNOME: pkg install xdg-desktop-portal-gnome
Screen sharing under Wayland on FreeBSD is functional but less reliable than on Linux. If video calls are critical, consider running Firefox under XWayland.
Profile Management
Firefox profiles allow separate configurations for different use cases:
sh# List profiles firefox --ProfileManager # Create a new profile from command line firefox -CreateProfile "work" # Launch with a specific profile firefox -P work & # Launch a temporary profile (useful for testing) firefox --profile /tmp/firefox-test --no-remote &
Useful about: Pages
shellabout:config -- All configuration options about:support -- Troubleshooting information (GPU, compositing, etc.) about:memory -- Memory usage breakdown about:networking -- Network connection details about:processes -- Per-tab CPU and memory usage about:performance -- Tab performance metrics
Firefox vs Chromium on FreeBSD
This is the key comparison for FreeBSD web browser choice.
| Aspect | Firefox | Chromium |
|--------|---------|----------|
| Package availability | pkg install firefox | pkg install chromium |
| Update frequency | Regular, well-maintained | Regular, well-maintained |
| Wayland support | Good (MOZ_ENABLE_WAYLAND=1) | Good (--ozone-platform=wayland) |
| Hardware video decoding | VA-API (requires config) | VA-API (requires flags) |
| Sandboxing on FreeBSD | Content process isolation | Limited (no seccomp on FreeBSD) |
| Memory usage (10 tabs) | ~800 MB | ~1.1 GB |
| Memory usage (50 tabs) | ~2.5 GB | ~4 GB |
| JavaScript performance | Competitive (SpiderMonkey) | Slightly faster (V8) |
| Extension ecosystem | Large (WebExtensions) | Large (Chrome Web Store) |
| Privacy defaults | Better (Enhanced Tracking Protection) | Minimal |
| DRM (Netflix, etc.) | Widevine CDM works | Widevine CDM works |
| Developer tools | Excellent | Excellent |
| Open source | Fully | Mostly (minus Google services) |
Choose Firefox if: You care about privacy, lower memory usage, or want a browser backed by a non-profit rather than an advertising company.
Choose Chromium if: You need maximum JavaScript performance, better compatibility with certain web applications that target Chrome, or prefer Chrome DevTools.
For most FreeBSD users, Firefox is the better default choice. It uses less memory, has better privacy defaults, and its sandboxing is not weakened by the FreeBSD platform in the way Chromium's is.
Troubleshooting
Firefox Crashes on Startup
sh# Launch from terminal to see error output firefox --safe-mode # Reset the profile if needed mv ~/.mozilla/firefox ~/.mozilla/firefox.bak firefox # Creates a new profile
No Sound
sh# Check if PulseAudio or PipeWire is running pgrep pulseaudio || pgrep pipewire # Test audio pkg install pulseaudio-utils paplay /usr/local/share/sounds/freedesktop/stereo/bell.oga # In about:config, verify: # media.cubeb.backend should be "pulse" or "oss"
High CPU Usage on Video Playback
Hardware acceleration is probably not working. Check:
sh# Verify VA-API vainfo # Check Firefox compositing in about:support # If "Compositing" shows "Basic", WebRender is not active
Fonts Look Wrong
sh# Install common fonts pkg install noto dejavu webfonts # Rebuild font cache fc-cache -fv
Firefox Is Slow
sh# Check if Firefox is swapping top -o res # Sort by resident memory # Reduce content process count if low on RAM # about:config: dom.ipc.processCount = 4 # Disable unused features # about:config: accessibility.force_disabled = 1 # about:config: reader.parse-on-load.enabled = false
Recommended about:config Settings for FreeBSD
A consolidated list of settings optimized for FreeBSD:
shell# Hardware acceleration gfx.webrender.all = true media.ffmpeg.vaapi.enabled = true media.hardware-video-decoding.enabled = true # Performance dom.ipc.processCount = 8 network.http.http3.enable = true # Privacy toolkit.telemetry.enabled = false datareporting.healthreport.uploadEnabled = false privacy.trackingprotection.enabled = true # Wayland (if using Wayland) widget.use-xdg-desktop-portal.file-picker = 1
FAQ
Is Firefox the best browser for FreeBSD?
For most users, yes. Firefox is well-maintained on FreeBSD, uses less memory than Chromium, has better privacy defaults, and does not suffer from the sandboxing limitations that affect Chromium on FreeBSD.
Does Netflix work in Firefox on FreeBSD?
Yes. Widevine CDM (Content Decryption Module) works on FreeBSD. DRM-protected content on Netflix, Disney+, and other streaming services plays correctly. Enable DRM in Firefox settings under General > Digital Rights Management (DRM) Content.
How do I enable Wayland support in Firefox?
Set the environment variable MOZ_ENABLE_WAYLAND=1 before launching Firefox. Add it to your ~/.profile to make it permanent. Verify by checking about:support -- the "Window Protocol" field should show "wayland".
Why is Firefox using so much CPU?
Check if hardware video decoding is enabled (see the hardware acceleration section above). Without VA-API, video playback is software-decoded and uses significant CPU. Also check for misbehaving web pages using about:processes.
Can I use Firefox ESR on FreeBSD?
Yes. The FreeBSD package repository typically provides both Firefox (latest release) and Firefox ESR. ESR receives security updates for about a year before requiring a major version jump.
How do I sync Firefox settings across devices?
Firefox Sync works identically on FreeBSD as on any other platform. Sign in with your Firefox Account in Settings > Sync. Bookmarks, history, passwords, and open tabs sync across all your devices.
Does WebGL work on FreeBSD?
Yes, with working GPU drivers (drm-kmod). Check about:support for the "WebGL 1 Driver" and "WebGL 2 Driver" fields. If they show your GPU name, WebGL is working.