Skip to content
Ward

--user-data-dir separates almost everything, and not the network

Separate profile directories give separate cookies, storage, cache and extensions. Chromium's network state is keyed by site, and no flag splits it.

4 min readDivyansh Singh

Updated

The foundation of every profile manager is one Chromium switch. Give the browser its own --user-data-dir and it gets its own everything: its own cookie database, its own local storage, its own IndexedDB, its own cache, its own service worker registrations, its own extensions, its own history, its own saved passwords.

That is a lot, it is genuinely complete, and it is the part of this product that has no caveats attached to it. It is also not everything, and the gap is worth knowing about because nobody in this category mentions it.

What the directory covers

Everything a page can write and read back later, in one tree on disk.

Kind of stateSeparated by a profile directory
CookiesYes
Local storage and session storageYes
IndexedDB and Cache StorageYes
Service worker registrationsYes
HTTP cacheYes
Extensions and their storageYes
History, saved passwords, autofillYes
Permissions granted to sitesYes

Two profiles signed into the same site do not see each other's session. That is the whole job, and it is done.

What it does not cover

Chromium keeps a body of state that is keyed by site rather than by profile directory, and it is not partitioned by the switch. The clearest examples are the ones that make the browser fast: how a host was reached last time, which protocol it negotiated, which alternative services it advertised, what the DNS layer already knows.

None of that is a cookie, none of it survives in a form a page can read directly, and none of it identifies a user by itself. But it is shared across the profiles running on one machine, and there is no flag that separates it. This is a property of where the state lives in the browser, not a configuration anybody has failed to switch on.

The practical consequence is narrow but real: two profiles on one machine are not network-isolated from each other in the way they are storage-isolated. If your threat model includes an adversary correlating connection-level behaviour rather than page level state, the profile directory is not the boundary you were hoping for.

Why say this at all

Because the alternative is letting people believe that separate directories mean separate machines, and then discovering the gap at the point where it costs something.

There is a stronger version of this argument that is worth making explicitly. Most of what is sold in this category is described in terms of what is separated. Almost none of it is described in terms of what is not. That asymmetry is the whole marketing strategy of the category, and it works because the unseparated things are exactly the ones a customer cannot check.

The three that matter, in the order they will affect you:

  1. The network stack is shared. Described above. Not fixable with a flag.
  2. The graphics stack is shared. There is one card in the machine and every profile renders on it. A renderer string can be reported per profile, and a readback can be perturbed per profile on the way out, but neither of those is a second graphics stack, and the distinction between changing a label, shifting a result and doing the work somewhere else is the one to hold on to.
  3. The font set is shared. The fonts installed on Windows are the fonts every profile sees. Virtualising them per profile is not something any tool that launches an unmodified browser does.

What follows from it

The right response is not despair, and it is not a different tool. It is knowing which boundary you have.

For keeping accounts from being linked through stored state - cookies, tokens, storage, cache, the things sites actually use to recognise a returning visitor - a profile directory per account is complete and correct. That is what it is for and it does it without qualification.

For everything below that layer, the boundary that actually separates two identities is a different machine, or a virtual machine, or hardware you do not share. That is a larger commitment and it is sometimes the right one. A profile manager is what you use when it is not.

The reason to write this down is that the distinction is invisible from inside any product in this category, including this one. You cannot check it by looking at the screen. You can only be told, and most people in this market will not tell you.

How this post was checked

Data source
The contents of the profile directories Chrome 151 creates under a Ward profile on Windows 11, read directly off the disk, set against Chromium's documented handling of the network state it keys by site rather than by profile
Measured with
Direct inspection of the profile directories Ward creates, and the launch path that gives each profile its own user data directory and nothing more
The claim
Two profiles on one machine are isolated in storage and not in network state, and there is no switch that changes the second half.

Divyansh Singh

Builds Ward at Digital Heroes

Divyansh Singh builds Ward, a Windows manager for many isolated browser profiles, at Digital Heroes. Most of his week is spent in the Chromium command line, the DevTools Protocol and Windows process behaviour. Every measurement quoted in these posts was taken on the machine Ward is built and tested on, with the browser or tool version written down beside the result, and the ones that contradicted what the documentation said are the ones that became posts.

Last reviewed . Corrections and bug reports: support@digitalheroes.co.in.

Ward is the desktop application these measurements came out of

Many browser profiles on one PC, each with its own proxy and its own device identity. Free plan, free account, nothing to buy today.

Related