| 
 | 
 | 
Tor Browser looks for certain environment variables, mainly to customize the integration with the tor daemon.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
Over the years, variables and preferences have been added to the now legacy Torbutton and tor-launcher.
 | 
| 
 | 
 | 
This page includes the ones that are still valid as of Tor Browser 12.5.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
Most of the environment variables are boolean. They are parsed as numbers: `0` means false and any other number means true (including negative and decimal numbers).
 | 
| 
 | 
 | 
Any string that cannot be parsed as a number (including the empty string and values such as `true`) **means false**.
 | 
| 
 | 
 | 
A notable exception is `TOR_TRANSPROXY`, which is active whenever defined.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
Some of these variables can be made permanent by defining equivalent preferences in `about:config`.
 | 
| 
 | 
 | 
Both can be defined, but **environment variables will take precedence** when both are set.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
# Control port settings
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
These values are used both to an external tor daemon and when instancing `tor` within the browser.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
## Control port authentication
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
By default, Tor Browser spawns the tor process and it sets a random password for control port authentication.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
However, the following environment variables are useful with an external tor process:
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
- `TOR_CONTROL_PASSWD`: the password to use for the authentication in clear text.
 | 
| 
 | 
 | 
- `TOR_CONTROL_COOKIE_AUTH_FILE`: the path of the file used for the cookie authentication (tor writes some random content on a file, and the browser sends the content back when connecting; check tor's documentation for more information).
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
Both these settings work also when the tor process is started by the browser.
 | 
| 
 | 
 | 
However, the cookie file is read before starting the process, so letting tor create it **will not work**.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
## `TOR_CONTROL_IPC_PATH`
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
Path to a Unix socket to communicate to the control interface of a tor daemon.
 | 
| 
 | 
 | 
It can be an existing instance, or Tor Browser will pass this path as an argument when spawning `tor`.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
Equivalent preference: `extensions.torlauncher.control_ipc_path`.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
IPC can be enabled without explicitly setting a path when `extensions.torlauncher.control_port_use_ipc` is  set to `true`.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
IPC environment variables are checked first, and preferred if `TOR_CONTROL_HOST` and `TOR_CONTROL_PORT` are defined, even though the default behavior is to use TCP.
 | 
| 
 | 
 | 
However, if IPC is configured only through preferences but `TOR_CONTROL_HOST` **and** `TOR_CONTROL_PORT` are defined, TCP is preferred.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
IPC is not supported on Windows.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
## `TOR_CONTROL_HOST` and `TOR_CONTROL_PORT`
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
Make Tor Browser use a TCP connection to the control port. The default is `127.0.0.1:9151`
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
Equivalent preferences: `extensions.torlauncher.control_host`, `extensions.torlauncher.control_port`.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
The host is always ignored when the browser launches the tor daemon, which will always listen only on `localhost` instead.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
## `TOR_CONFIGURE_ONLY`
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
Normally, when Tor Browser launches the tor daemon, it also sends `TAKEOWNERSHIP` on the control port.
 | 
| 
 | 
 | 
As a result, `tor` exits when the connection to the control port on which this has been sent is closed (which should happen only when the browser is closed).
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
This option prevents Tor Browser from sending `TAKEOWNERSHIP`.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
The browser will never do it anyway when an external tor daemon is used.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
Equivalent preference: `extensions.torlauncher.only_configure_tor`.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
# SOCKS settings
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
For SOCKS settings, most of the control port considerations apply.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
## `TOR_TRANSPROXY`
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
Tells Tor Browser not to use a proxy, because the network is already going through tor in another way (tor-over-tor is not good).
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
**Notice: this variable is active whenever it exists, its content is never checked. So, `TOR_TRANSPROXY=0` still activates the transparent proxy functionality, you need to delete the variable if you do not want to use it.**
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
## `TOR_SOCKS_IPC_PATH`
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
Makes `tor` listen on a Unix socket for SOCKS connections.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
The equivalent preference: `extensions.torlauncher.socks_ipc_path`.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
You can enable IPC without specifying a path with the related preference `extensions.torlauncher.socks_port_use_ipc`.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
IPC is not supported on Windows.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
## `TOR_SOCKS_HOST` and `TOR_SOCKS_PORT`
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
Make `tor` listen on a TCP socket for SOCKS connections.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
If not specified, Tor Browser will ask the tor daemon to match `network.proxy.socks` and `network.proxy.socks_port`, which are Firefox's preferences to set a SOCKS proxy.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
The default host is `127.0.0.1` and port is `9150`.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
Like the control port, when Tor Browser starts a `tor` instance, the host will be ignored and the daemon will listen only on `localhost`.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
## `extensions.torlauncher.socks_port_flags`
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
Additional arguments for the SOCKS port.
 | 
| 
 | 
 | 
They will be passed directly to the tor daemon command line, so refer to `tor`'s man page.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
# Other settings
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
## `TOR_SKIP_LAUNCH`
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
It prevents Tor Browser from launching a `tor` process.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
Equivalent preference: `extensions.torlauncher.start_tor` (but with opposite logic: by default it is `true`, and the browser will launch `tor`).
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
`MOZ_BROWSER_TOOLBOX_PORT` (used for some testing automation) also implies this option.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
With this feature, you might want to set `TOR_SKIP_CONTROLPORTTEST`, otherwise `about:tor` will be the red page of death (even when connected to tor).
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
(`TOR_SKIP_CONTROLPORTTEST` is active whenver it exists, its content is never checked).
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
## File paths
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
The following paths can be customized with a preference looking like `extensions.torlauncher.${type}_path`:
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
- `tor`: the path to the `tor` binary (`tor.exe` on Windows)
 | 
| 
 | 
 | 
- `torrc`: the path of the tor configuration file
 | 
| 
 | 
 | 
- `tordatadir`: the directory where `tor` will store its data (`DataDirectory` argument of `tor`). It should have `700` permissions
 | 
| 
 | 
 | 
- `toronionauthdir`: the directory containing v3 hidden service authorization files (`ClientOnionAuthDir` argument of `tor`). It should have `700` permissions
 | 
| 
 | 
 | 
- `pt-startup-dir`: will be used as a working directory for the `tor` process, and pluggable transport binaries' paths should be relative to this directory
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
In addition to that, `$XDG_RUNTIME_DIR` (e.g., `/run/user/$UID` on Debian) will be used as a default directory to create Unix sockets in.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
## Domain isolator
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
The domain isolator is the component that associates SOCKS credentials to first party domains and allows to request new circuits.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
The other effect of the legacy `extensions.torbutton.use_nontor_proxy` is to disable isolation.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
This is useful for services that have different first-party domain but for some reason expects requests to come from the same IP address.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
## `TOR_DEFAULT_HOMEPAGE`
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
It allows customizing `browser.startup.homepage`, unless this preference has already been customized.
 | 
| 
 | 
 | 
Used by some downstream distributors.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
# Unsupported/legacy options, variables and preferences
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
## Tor Check Service
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
**Removed in 13.0.**
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
`about:tor` used to become red if it detected something wrong with tor.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
It has two mutually exclusive ways of doing so:
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
- _local test_ (default): it asked tor how to reach its SOCKS interface over the control port, and then checked that the browser configuration included at least one
 | 
| 
 | 
 | 
- _remote test_: it fetched `https://check.torproject.org/?TorButton=true` (customizable with `extensions.torbutton.test_url`, but the check will work only if the new URL follows the same structure), and the outcome of the test depended on the downloaded content
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
`TOR_SKIP_CONTROLPORTTEST` forces the remote test.
 | 
| 
 | 
 | 
Another way was setting `extensions.torbutton.local_tor_check` to `false`.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
Finally, the tor test could be completely disabled with `extensions.torbutton.test_enabled` (set to `false`) and was disabled also with the (probably legacy) preference `extensions.torbutton.use_nontor_proxy` set to `true`.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
## `TOR_FORCE_NET_CONFIG`
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
Legacy option that forced the browser to start the tor daemon with network disabled.
 | 
| 
 | 
 | 
This option is read but ignored.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
The default now is to always start tor with the network disabled and show the `about:torconnect` captive portal.
 | 
| 
 | 
 | 
The bootstrap will be done automatically only if quickstart is enabled (`torbrowser.settings.quickstart.enabled`, but also exposed in `about:torconenct` itself and in `about:preferences#connection`).
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
Previously `TOR_FORCE_NET_CONFIG` was an alias for `extensions.torlauncher.prompt_at_startup`.
 | 
| 
 | 
 | 
This preference is still used, but **it is changed automatically** by the browser whenever a bootstrap succeeds or fails (to prevent quickstart from running again if the browser is restarted after a bootstrap failed).
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
## Log levels
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
`extensions.torlauncher.loglevel` and `extensions.torlauncher.logmethod` set the log preferences for Tor Launcher.
 | 
| 
 | 
 | 
They are not followed anymore.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
The related torbutton preferences (`extensions.torbutton.loglevel`, `extensions.torbutton.logmethod`) are still valid, but they will be removed, eventually.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
## `extensions.torlauncher.prompt_for_locale`
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
Tor Browser will try to match the OS locale, if supported, or fallback to English.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
At the first start, users will be shown a button to go changing the language in the notification bar.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
Then it will always be possible to change language in `about:preferences`.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
## Development settings
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
In addition to everything listed in this page, we have some preferences that are intended only for development purposes.
 | 
| 
 | 
 | 
They are not guaranteed to work forever. | 
 | 
 | 
\ No newline at end of file |