bautaDocs

How Personas Work

A persona is one identity kept as data, and bauta answers a page from it instead of from the machine it runs on.

A persona is one identity: its device, its locale and timezone, its proxy and its storage. Every WebAPI call a page makes passes one point inside the engine, and bauta answers it from the persona instead of from the machine it runs on.

Identity as data

A persona file is JSON that states a device's facts: its OS, hardware, screen, GPU and the noise its readbacks get. bauta loads it at launch and compiles it into everything a site can read: the User-Agent and Client Hints on every request, navigator in the page and in its workers, the screen as script and CSS see it, and WebGL.

Changing a persona needs no rebuild: edit the file and relaunch. The persona file format lists every field.

Coherent

OS, platform, User-Agent, User-Agent Client Hints, GPU, CPU, memory and screen change together, so they never contradict each other. A Windows User-Agent never sits beside a Linux GPU, and the HTTP headers, the page and its workers all report the same one.

A persona that contradicts itself is refused: the page then sees the real machine, and bauta says why on stderr. Refused personas lists the contradictions.

Stationary

A persona's noise is derived from its name and your license's secret. The same persona reads byte-identical across relaunches and across your machines. Different personas, or the same persona under another license, read differently.

Signing in or out can give a machine's personas new fingerprints. When the machine has personas, bauta login and bauta logout ask before they go ahead. Signing up for a new account from the free session keeps them.

Truthful when off

With no persona loaded, bauta answers what its own Chromium answers and invents nothing.

No injected JavaScript

Answers are substituted inside the engine's binding layer, so a page still sees Chromium's own native getters and functions. Every bundled persona answers navigator.webdriver with false, so an automated launch does not announce itself.

Fonts

A persona presents its OS's font set, whatever OS the browser runs on: a Windows persona on Linux or macOS, a Linux or macOS persona on Windows, a Windows or Linux persona on macOS.

When you launch the browser yourself, pair the persona with the matching font environment. On Linux, FONTCONFIG_FILE names it, such as personas/fonts/win.conf for a Windows persona.

Built-in personas

bauta carries built-in personas, which you can name in place of a persona file: win-intel and win-nvidia for Windows, mac-arm (macOS 15 on Apple M2), and the Linux hardware-only linux-intel, linux-nvidia and linux-amd.

bauta persona new shop --from win-intel

When you launch the browser yourself, BAUTA_ROTATE=<name> picks one. The Python and Node.js packages can also draw a desktop device from bauta's built-in pool; see packages.

personas/win-intel.json in the bauta-browser repository is a complete example of a persona file: a Windows 11 laptop with Intel UHD 630 graphics.

Making a persona

bauta persona new makes a persona from a built-in persona's name or from a persona file, and prints its directory, ~/.bauta/personas/<name>:

bauta persona new shop --from win-intel                  # a built-in persona
bauta persona new crawl --from personas/win-intel.json   # a persona file
bauta persona ls                                         # the personas on this machine
bauta persona rm crawl

bauta persona set <name> --from ... gives a persona its settings anew and keeps its profile. A browser running it keeps the old ones until it closes: a persona never changes under a page.

Storage

A persona keeps its own profile, so cookies and storage are there on the next connection. While it is away, its profile is written out and unloaded. A persona with "ephemeral": true keeps nothing between sessions.

Moving a persona between machines

What a persona's profile keeps, such as cookies and passwords, is encrypted with your license's key, not the machine's. Copy ~/.bauta/personas/<name> to another of your machines, on any OS, and it opens with what its profile kept. Another license's browser cannot open it.

The identity is fixed

Under the gateway, a client that sets its own User-Agent, viewport, locale or timezone is answered as if it had, but the page keeps the persona's.

Native plugins

Beyond what a persona file declares, a native plugin can rewrite any call at native speed: a library built against one C header, on Linux, Windows and macOS, with the sandbox on. A persona names it, through the gateway or the packages. See plugins.

Next

On this page