Environment Variables
The environment variables that bauta, its browser, its installer, its packages and its Docker image read.
These are the environment variables that bauta and its browser, installer, packages and Docker image read, grouped by what reads them.
bauta and the gateway
| variable | what it does | default |
|---|---|---|
BAUTA_HOME | Holds personas/, license and fonts/. | ~/.bauta |
BAUTA_CHROME | The browser. | chrome beside bauta |
BAUTA_SERVER | Our server, for activation, sign-in, bauta status and license renewal. | https://api.bauta.dev |
BAUTA_LICENSE_KEY | A license key that wins over the key kept on this machine. Set it in Docker and CI. | unset |
BAUTA_IP_ECHO | The IP echo bauta serve asks through a persona's proxy, to place where the proxy exits when the persona states no timezone or locale. | https://api.ipify.org |
While BAUTA_LICENSE_KEY is set, it still wins over the key bauta login keeps, and bauta logout refuses until you
unset it.
On Linux, bauta serve --hidden opens its windows on a virtual display, whatever DISPLAY says.
The browser, when you launch it yourself
| variable | what it does |
|---|---|
BAUTA_LICENSE | The license file the browser checks at launch, such as ~/.bauta/license, which bauta setup writes. |
BAUTA_PLUGIN_CONFIG | The persona file the browser loads at launch, by its absolute path. |
BAUTA_ROTATE | A built-in persona the browser loads, by name: win-intel, win-nvidia, mac-arm, linux-intel, linux-nvidia or linux-amd. |
FONTCONFIG_FILE | On Linux, the font environment that pairs with the persona, such as personas/fonts/win.conf for a Windows persona. |
TZ | The browser's timezone. |
LANGUAGE, LANG | The browser's locale, such as en_US and en_US.UTF-8. |
CHROME_DEVEL_SANDBOX | A SUID sandbox helper, for the sandbox on Ubuntu 24.04. Stock Chrome's /opt/google/chrome/chrome-sandbox works. |
BAUTA_LICENSE=~/.bauta/license \
BAUTA_PLUGIN_CONFIG=$PWD/personas/win-intel.json \
FONTCONFIG_FILE=$PWD/personas/fonts/win.conf \
/path/to/bauta/chrome --user-data-dir="$(mktemp -d)" https://example.comThe browser checks the license and reads the persona once, at launch.
Timezone and locale come from V8 and ICU, outside the binding layer. The gateway sets them from a persona's
timezone and locale; when you launch the browser yourself, set TZ, LANGUAGE and LANG.
On Ubuntu 24.04, AppArmor stops a Chrome it does not know from using unprivileged user namespaces. Point
CHROME_DEVEL_SANDBOX at a SUID sandbox helper, or launch with --no-sandbox. A persona applies either way.
The Unix installer
install.sh, the installer for Linux and macOS, reads these:
| variable | what it does |
|---|---|
BAUTA_HOME | Install under here instead of ~/.bauta. The binary goes in BAUTA_HOME/bin. |
BAUTA_VERSION | A specific release, as vX.Y.Z, instead of the latest. |
BAUTA_RELEASE_BASE | A URL that replaces the whole release URL prefix: a directory of assets (file:// in CI). |
BAUTA_REQUIRE_SIGNATURE | 1: refuse to install unless the signature was actually checked, which needs OpenSSL 3. |
BAUTA_NO_MODIFY_PATH | 1: do not touch any shell rc file. |
BAUTA_NO_PROMPT, CI | Never prompt: run bauta setup --non-interactive. |
BAUTA_INSTALL_LIB | Set when sourcing the script, as BAUTA_INSTALL_LIB=1 . ./install.sh: it then defines its download-and-verify functions without installing anything. |
curl -fsSL https://bauta.dev/install.sh | BAUTA_VERSION=vX.Y.Z bashOn a stock Mac without OpenSSL 3, the installer prints one line saying the signature was not checked and why, and
the checksums still come over HTTPS. BAUTA_REQUIRE_SIGNATURE=1 refuses that case.
The Python and Node.js packages
| variable | what it does |
|---|---|
BAUTA_BIN | A bauta you already have, used instead of the one the first launch() downloads into ~/.bauta/bin. |
BAUTA_GATEWAY | A gateway that runs elsewhere, such as a container's, whose personas you make there. The same as the gateway option, such as http://127.0.0.1:9222. |
BAUTA_NO_PROMPT, CI | Never prompt: the first launch() activates the free plan without asking. |
The installer and the packages never prompt when stdin or stdout is not a terminal, CI is set, /.dockerenv exists
or BAUTA_NO_PROMPT=1. They then activate the free plan, one session, without asking.
The Docker image
| variable | what it does |
|---|---|
BAUTA_LICENSE_KEY | Optional: your license key. Without it, the container runs the free plan, one session. |
BAUTA_PERSONAS | The personas to make at start, if they are missing, each name=<built-in or file>, such as shop=win-intel. |
docker run -d --name bauta --init --cap-add=SYS_ADMIN -p 127.0.0.1:9222:9222 -v bauta:/data \
-e BAUTA_PERSONAS="shop=win-intel" ghcr.io/bautabrowser/bautaWithout BAUTA_LICENSE_KEY, put a license file at /data/license. In CI or with many containers, set a key, or keep
/data on a volume so the container keeps its install id: the server limits new free activations per IP.
Next
- The bauta CLI: every command and flag.
- Docker: the gateway in a container.
- Packages: launching from Python or Node.js.