# Using Firefox/Advanced
## about:config

In Gecko-based browsers, such as Firefox, SeaMonkey, and their derivatives, about:config is a powerful way to tweak preferences in ways that are not normally accessible through the Preferences page (earlier, the Options window).
As in the Firfeox user interface, preferences in about:config apply only to the active browser profile. Different user profiles can have different preferences; though most settings are the same across profiles.
Type about:config into the Firefox address bar, press Enter/Return, and you might first be shown a page to warn you, that these are advanced settings, and changing some of them might break how Firefox works. There is a 'Continue' button and a checkbox not to show the warning page again. After clicking the 'Continue' button, you are then taken to about:config settings.
At the top is is a search bar to allow finding the right preference by filtering the list. Copying and pasting a preference name into the search bar makes it easy to find the right one.
A user is presented with a table-based list of preferences, showing their name, status, type, and value in their respective columns. The list can be sorted in ascending and descending order by clicking on each column's header. One can move around in the list by single-clicking a setting to move cursor focus into the list, and then using the keyboard navigation keys (Up, Down; PgUp, PgDn; Home, End).
Most about:config preferences are built-in and displayed. Some preferences are hidden, and must be added by the user. Other preferences are created by an installed extension, such as NoScript.
A preference status can be one of the following:
* default
* modified — if changed from their default value, the entire line is shown in boldface
* locked — shown in italics. This status is rare and is meant to prevent a preference from being trivially changed. A setting is typically locked by a Linux distribution (to prevent telemetry, for example) or by a system administrator (usually in a corporate environment).
A preference type can be one of the following:
* a boolean — a true/false setting;
* an integer — full numbers from 0 to something large. The numbered values can and do have different units;
* a string — This can be any form of text or numbers, though each string of text usually has its own syntax, as required by each preference.
Changes can be made by double-clicking one of the available options, or selecting them and pressing the Return/Enter key.
That way, via double-click or Enter, the booleans are toggled, as they have only a single value of true or false, and are thus the simplest to change. Other preference types are modified, in which case an input box appears for numbers (integers) or text (strings).
Note: In some preference cases, a string type preference can contain or may require a simple integer number instead of text. Therefore, when changing a respective preference's value, pay attention to its type and documentation.
When right-clicking a preference, a context menu appears with the following commands:
* Modify/Toggle;
* Copy — copy the preference name and value separated by a semicolon. It is pasted as preference.name;value
* Copy Name — copies only the preference name for easy pasting and searching
* Copy Value — copies only the preference value. Very useful, if the value is a long string of text and extends well outside the display area.
* New > — Create a new preference that is not listed: a string, integer, or a boolean.
* Reset — resets the preference value to the default pre-set by the browser or an installed extension. This is useful, should anything go wrong.
A more complete list of about:config settings can be found here, with descriptions and which values the preference will take (where applicable).

### Example preferences

* browser.block.target_new_window — if set to true, links that normally force a new window to open will open in the current window instead.
* browser.xul.error_pages.enabled — if set to true, Firefox displays an error page similar to IE instead of a message box if loading a page fails. This is an older and deprecated preference, as Firefox now uses error or message pages.
* layout.frames.force_resizability — if set to true, allows the user to resize frames on any web site that uses them.

### Optimise resource usage

Setting some of the settings one or another way is either imperative or recommended for memory-limited devices, such as those with 1 GB or less RAM, especially in a liveCD condition, as liveCD environments might not be able to use swap — specifically with computers that have Windows, where a Linux swap partition does not exist on the hard drive.
Computers with 1 GB RAM or less must have that setting on to reduce memory and resource consumption.
Devices with 1.5–2 GB RAM in a liveCD setting are able to handle greater resource requirements, but not by too much. At this point, the value that is imperative for 1 GB RAM, is only recommended for computers and devices with 2 GB RAM memory.
| Name | Type | imperative at =< 1GB RAM | ok at 2GB RAM | Notes |
| app.update.auto | boolean | false | true or false | If set to false, Firefox will not auto-update itself. This preference does not affect extension and search updates. |
| app.update.enabled | boolean | false | true or false | If set to false, the browser's self-update function is off. Usually set to true on Windows to keep Firefox up-to-date and secure. In some Linux distributions, the preference is set to false and locked, as the browser is updated through the distribution's package manager. This preference does not affect extension and search updates. |
| app.update.interval | integer | 604800 | | Sets the interval in seconds for the browser update check. The default is 86400 seconds (one day); 604800 seconds is one week. |
| browser.tabs.remote.autostart | boolean | false | false | Switch off multi-process for each tab. Also known as Electrolysis (e10s), which puts each tab in its own browser process for better security. |
| dom.ipc.processCount | integer | 1 | | this seems to count, too. |
| browser.sessionhistory.max_entries | integer | 25 | 25 to 50 | Go back and forward in window/tab history for up to 25 pages instead of the default 50. |
| browser.sessionhistory.max_total_viewers | integer | 0 | 0 to 4 | Quick back-and-forward browsing based on the number of pages stored for quick access. The default is -1 (aka "everything"). When the value is 0, each page is requested again from the server, with increased page load times, but should take less device resources overall. |
| browser.sessionstore.interval | integer | 90000 | 90000 | the default is something low, but increase it to 90000 to prevent heavy storage media requests every now and then. |
| browser.sessionstore.max_tabs_undo | integer | 3 | 7 to 10 | This can also be set to 0 with very memory-limited devices, but then a user would lose all work, if Firefox crashes, or is force-closed. The default value is 10. |
| extensions.pocket.enabled | boolean | false | false | Disables Pocket for those that do not use it (that's most people) |
| general.smoothScroll | boolean | false | false or true | Disable smooth scrolling. At 2 Gb RAM and greater, set per taste. |
| browser.search.suggest.enabled | boolean | false | false/true | Disable instant search suggestions from the address bar. |
| browser.search.update.interval | integer | 90000 | 90000 | Increase the time to check updates to search engines. Default is lower. |
| extensions.blocklist.interval | integer | 90000 | 90000 | Increase interval to 90000 from the lower default. |
| extensions.update.interval | integer | 90000 | 90000 | Increase interval time to check for extension updates. In about:addons, switch off automatic update checking from the gear icon. |
| privacy.sanitize.sanitizeOnShutdown | boolean | true | true | Before setting that to 'true', set only browser cache to be deleted on exit in the browser Preferences user interface. Other items can also be set to be deleted, but in no-swap conditions (a LiveCD), deleting browser cache on exit is important. |
| privacy.donottrackheader.enabled | boolean | true | true | This is an optional privacy setting that adds a "Do Not Track" header to the web request. Most websites do not honor the header, and this preference might be set to be deprecated in the future. |
| privacy.trackingprotection.enabled | boolean | true | true | This sometimes helps, but can break news and like sites that want to show embeds from social networks. This can be disabled per-site from the shield icon to the left of the site URL in the address bar. |
| browser.startup.homepage | string | about:blank | | When about:blank is set as a homepage, then it increases browser startup speeds. |
| services.sync | boolean | false | true or false | Firefox Sync synchronises all browsing data with the Mozilla cloud for easy access on other devices. false switches Sync off, if a user does not use Sync. This option must be added separately, and it might not work, as it's not supported by all versions of Firefox. The preference is often seen in Firefox derivatives. |
| accessibility.typeaheadfind.enablesound | boolean | false | true or false | false disables playing a sound when using the keyboard to quickly search for text or links without Ctrl+F. |
| devtools.screenshot.audio.enabled | boolean | false | true or false | false disables playing a sound when making screenshots. |
| narrate.enabled | boolean | false | default | false disables screen narration. |
| toolkit.cosmeticAnimations.enabled | boolean | false | | false disables browser user interface animations. (This does not always work with page load progress bars on Android.) |
| Name | Type | imperative at =< 1GB | ok at 2GB RAM | Notes |

#### Disable media

All media functionality is disabled: this includes playback, media capture (audio and video recording), and screen sharing.
Optional, or not required, if computer RAM memory is 2 Gb or greater.
| Name | Type | imperative at =< 1GB | Notes |
| media.autoplay.enabled | boolean | false | Autoplay is disabled with false. Might not automatically play back YouTube videos. |
| media.autoplay.enabled | boolean | false | Autoplay is disabled with false. Might not automatically play back YouTube videos. |
| media.encoder.webm.enabled | boolean | false | WebM codec (encoding). |
| media.ffmpeg.enabled | boolean | false | Access ffmpeg component to play back video |
| media.ffvpx.enabled | boolean | false | |
| media.flac.enabled | boolean | false | FLAC codec |
| media.getusermedia.screensharing.enabled | boolean | false | Screen-sharing |
| media.gmp-provider.enabled | boolean | false | |
| media.gmp-widevinecdm.enabled | boolean | false | WideVine Content Decryption Module. This module is designed to decrypt DRM content. |
| media.gmp-widevinecdm.visible | boolean | false | WideVine Content Decryption Module |
| media.mediasource.enabled | boolean | false | |
| media.mediasource.mp4.enabled | boolean | false | |
| media.mediasource.webm.audio.enabled | boolean | false | |
| media.mediasource.webm.enabled | boolean | false | |
| media.mp4.enabled | boolean | false | MP4 container (typically for H.264/AV1 video) |
| media.navigator.enabled | boolean | false | |
| media.navigator.video.enabled | boolean | false | |
| media.ogg.enabled | boolean | false | Ogg Vorbis codec |
| media.ogg.flac.enabled | boolean | false | FLAC codec |
| media.ondevicechange.enabled | boolean | false | |
| media.opus.enabled | boolean | false | Opus codec |
| media.peerconnection.dtmf.enabled | boolean | false | |
| media.peerconnection.enabled | boolean | false | |
| media.peerconnection.identity.enabled | boolean | false | |
| media.peerconnection.rtpsourcesapi.enabled | boolean | false | |
| media.peerconnection.simulcast | boolean | false | |
| media.peerconnection.use_document_iceservers | boolean | false | |
| media.peerconnection.video.enabled | boolean | false | |
| media.peerconnection.video.vp9_enabled | boolean | false | |
| media.play-stand-alone | boolean | false | Play stand-alone media file in its own tab. |
| media.resume-bkgnd-video-on-tabhover | boolean | false | 'Resume background video on tab hover' |
| media.video_stats.enabled | boolean | false | Video statistics |
| media.wave.enabled | boolean | false | Wave codec. Often used by media-heavy web applications for notifications. |
| media.webm.enabled | boolean | false | WebM codec. WebM is used by YouTube for most content. |
| Name | Type | imperative at =< 1GB | Notes |

### Optional

| Name | Type | imperative at =< 1GB | recommended at 2GB | Notes |
| browser.tabs.loadInBackground | boolean | false | false | Switches to a new tab as and when a link is opened in a new tab. Otherwise, the original tab is displayed, and the newly-opened tab is shown only loading in the background until a user switches to it. |

### Speed up network access

The following changes can be made to speed up network access.
Usually, the preferences related to network speeds do not need to be changed, unless you know exactly what you want to do with these settings.
Changing these preferences may speed up browsing, but in most cases, the difference is negligible. Some of these settings have also been deprecated in modern Firefox versions.
General browsing speed can be improved through extensions by using an adblocker (such as Adblock Plus or uBlock Origin) and/or a scriptblocker, such as NoScript. As they variously block content, page rendering speeds improve, and network requests to advertisements and trackers are also reduced.

#### Pipelining

Normally, the browser will make one request to a web page at a time. When you enable pipelining, it will make several requests at a time, which usually speeds up page loading. Make these changes to enable pipelining:
Set "network.http.pipelining" to "true"
Set "network.http.proxy.pipelining" to "true"
[Tip: If your browser is set to connect to an optional http proxy, you can leave "network.http.pipelining" as "false", then add the domains of websites that do not work with pipelining (like images.google.com) to the proxy exclude list.]
Set "network.http.pipelining.maxrequests" to 8. — This means, that Firefox will make up to 8 requests at once rather than the default 4. This is only an advantage if you have a fast and reliable internet connection.

#### Maximum number of connections

For broadband users:
Set "network.http.max-connections-per-server" to 14. Many guides recommend setting this figure to 100, but this can have undesirable effects upon webservers.
Set "network.http.max-connections" to 48

### Rendering

Right-click anywhere and select New-> Integer. Name it "nglayout.initialpaint.delay" and set its value to "0".
This preference sets the amount of time the browser waits before it acts on information it receives, but it will increase the total time taken to render the page. While this option is more suitable for a faster computer, setting the value to something low, or "0" works better with slow connections.
The default vaue is "250". Try a value of "100", if "0" causes problems.

## User agent strings
### Introduction

A user agent string (UA string) is a string of text with a specific syntax identifying the user agent — usually that of a web browser — which is sent to a website or domain when making a request to download a page or fetch information. Some other user agents are screen readers for blind people, download managers, webcrawlers, indexers, and archivers, each of which send their own unique UA string.
Some sites require specific versions of browser, or a specific browser and operating system combination in order for a web application to offer specific features, or to function at all.
For most sites, user agent strings do not require modification. Such modification is also called user agent spoofing.
There are use cases, where user agent strings do need to be more specific:
* A particular site requires a specific browser;
* A user wants their web client to identify as a mobile, tablet, or desktop browser for certain domains and use cases;
* A user has a legacy browser that needs to identify itself as a newer one for certain sites;
* A user wants their browser to have the most generic user agent for privacy purposes;
* Conversely, some people want a very specific user agent string in order to demonstrate to sites the existence of their favourite browser, or a particular OS, or that a certain operating system version is still in use.
The latter example most often applies to people who might use a Firefox derivative (such as GNU IceCat or WaterFox), or who might use older versions of Firefox, or if their operating system is Linux, or if they use a legacy version of Android.
The reason for featuring a specific UA string is to nudge site developers to take note of which configurations visit their site, which browsers and operating systems they should keep testing against, and which they ought to keep supporting.
Thus, promoting a non-generic UA string causes these users to also have a dilemma with regard to having a privacy trade-off, because a very specific user agent string is very unique, and therefore much easier to identify for sites that use browser fingerprinting.
Comparably, the default web browser in many versions of Android even sends the device make and model in their user agent string, while the UA string of Firefox for Android typically contains less information, and has also in past cases been less accurate.
Nevertheles, desktop Firefox alone has become a minority browser — with its usage share greatly overshadowed by Google Chrome, and Firefox for Android being an even greater minority on phones and tablets. Each Firefox version is therefore more unique, and each version of a Firefox derivative even more unique.
It should be noted, though, that if they wish to do so, advanced users are usually aware of how to properly anonymise the browsing traffic that runs from their computer through the wider Internet.
    To find out what kind of information web sites can collect about the browser you use and the device you're on, visit the Electronic Frontier Foundation's Panopticlick site at https://panopticlick.eff.org

### Modifying

In desktop Firefox, changing the user agent string in about:config preferences does not work, while it works admirably in Firefox for Android.
To change the user agent string in desktop Firefox, one must use extensions.
* UAControl is a legacy XUL extension for Firefox 56.0 and earlier. It supports user-agent spoofing for specific domains, leaving the default user agent string for all other sites, though it does not have a pre-set list of UA strings (these can be picked up from the web). UAControl requires the User-Agent JS Fixer add-on to work.
* Custom UserAgent String is a WebExtension that is similarly versatile in employing per-domain user-agent spoofing, but has a clunky user interface. It's available for Firefox 48.0 and greater.

## Editing the userChrome.css File

userChrome.css is a file that allows you to change the appearance of Firefox with CSS rules. The actual browser window (i.e., not the webpage, but everything else) is called the "chrome". The file userChrome.css overrides default settings to allow for more customization.
userChrome.css is not created by default. It should be created in your profile folder, which can be found in the following places:
In all cases, the profile is randomly named, with 8 characters followed by .default. Inside that folder is another named "chrome". Inside the chrome folder is where userChrome.css needs to be created.

## Editing the userContent.css File

The UserContent.css file allows a user to change the general appearance of web pages. This requires knowledge of Cascading Style Sheets (CSS).
Changing the web pages' appearance through this file can be relatively cumbersome, and is limited to CSS only. Using the GreaseMonkey or Stylish extensions is recommended, as each provides a user interface to doing the same things, and are therefore easier to use.
The GreaseMonkey extension is more advanced, as it allows adding JavaScript to downloaded web pages to make a webpage or site function better. With some extra effort, this also includes adorning pages with CSS.
Comparatively, Stylish allows adding only CSS-based modifications to downloaded pages, and unlike GreaseMonkey, Stylish also runs on all versions of Firefox for Android.
Note, that while these extensions only change the appearance of web pages downloaded into the browser; the extensions do not change the pages' and sites' appearance on the web server.

## Tips

* Allowing extension downloads from mozilla.org instead of www.mozilla.org will match all subdomains of mozilla.org, just as blocking cookies from doubleclick.net instead of www.doubleclick.net will allow blocking of all doubleclick.net subdomains. Allowing "www.mozilla.org" would not allow "addons.mozilla.org". However, as a security measure, when whitelisting sites for extensions, the most specific domain available should be used (i.e., addons.mozilla.org instead of mozilla.org) to prevent potentially malicious installs from other subdomains on a site.
* To get Firefox on a computer without an internet connection, or where internet downloads are blocked, one can download the installer as normal from another computer (usually you can do this at a public library), and then put the *.exe file on some removable media and transfer it to the first computer. Another option is to download Firefox portable on a USB stick or memory card, and run the portable Firefox off external storage.

## References

* ↑ "app.update.auto". MozillaZine Knowledge Base. MozillaZine. 2010-12-10. Retrieved 2019-08-23.
* ↑ "app.update.enabled". MozillaZine Knowledge Base. MozillaZine. 2011-07-08. Retrieved 2019-08-23.
* ↑ "app.update.interval". MozillaZine Knowledge Base. MozillaZine. 2010-11-22. Retrieved 2019-08-23.