Comparison
Where the session actually lives
What the word separation covers
Storage is not one thing. Cookies, local storage, databases, service workers and the cache share one jar, and a page can write to any of them.
So a tool either gives an account a jar of its own or it does not. Emptying a jar afterwards is a different job from keeping two jars apart.
One jar for everything
Every tab of the browser reads and writes the same set.
A jar for the window
A set that exists while a window is open and goes with it.
A jar per account
A set that stays on disk between launches and belongs to one login.
A jar on other hardware
A set kept apart because the machine under it is a different machine.
Eight ways on one axis
Rows are the approaches and columns are the questions this axis asks. An empty cell means the question does not apply rather than that the answer is bad.
The last row is ours. Every cell in it comes from the launch path in the app, not from a brochure.
| Where the session is kept | Left after the window closes | Separate sets on one machine | Travels to another machine | |
|---|---|---|---|---|
| Ordinary browser, as it is | One set for the whole browser | Yes | One | By copying the folder yourself |
| Incognito window | A set held for the window | – | One at a time | |
| Browser profiles or containers | A set per profile | Yes | As many as you create | By copying the folder yourself |
| Spoofing extension | In the browser underneath | Yes | One | |
| VPN | In the browser, untouched | Yes | One | |
| Virtual machine per account | Inside the guest system | Yes | One per machine you run | Move the disk image |
| Separate device per account | On that device | Yes | One per device | Carry the device |
| Browser with the engine patched | A data directory per profile | Yes | One per profile | Encrypted file or a synced folder |
What a directory of its own buys
Every profile is started in a data directory named after it, so its cookies and storage never meet another profile's. That directory is the whole of the separation.
The engine creates that directory closed to other people on macOS and Linux, and closes it again on every launch. On Windows permissions live in access lists the app cannot set, so we claim no such lock there.
Cookies and logins
Written into that directory by the browser and read back only from it.
Storage and databases
Local storage, databases and service workers sit beside them.
The cache
Kept there too, and left behind when the session travels.
Browser preferences
The profile keeps its own settings file in that directory too.
What the directory does not cover
Profiles are processes on your own system and they share it with each other and with you. Anything running under your user account can read those directories.
The browser keeps its own key rather than borrowing one from the system, because a profile has to open on the machine you move it to. On macOS and Linux the directory permissions do the real work.
When a session moves house
A session travels either as one encrypted file or through a folder you already sync. Both carry the settings with the browser data, so the account stays signed in on the second machine.
The caches are left out on purpose, and so are the service worker and a few site stores beside them. What keeps the account signed in travels: cookies, saved logins and local storage.
Sealed with a password
A wrong password gives a plain refusal instead of damaged data.
The profile identity travels
The same profile describes the same machine on the second computer.
An open profile is skipped
Copying live databases would deliver a session that does not open.
Both sides changed means a question
Two machines worked since the last sync, so neither copy is overwritten quietly.
What deleting really erases
Deleting a profile moves it to the recycle bin, and its browser data waits there with it. Emptying the bin removes the data directory itself rather than only the row in the list.
What this comparison does not claim
- It does not claim that separate storage keeps accounts apart on its own. Storage is one channel of three, and the device readings and the exit address are the others.
- It does not claim that a profile is isolated from you. Profiles run under your own user account, and anything else running there can read their directories.
- It does not describe any particular product other than ours. The rows are categories of approach, and the cells say what each can do by its nature.
- It does not claim that deletion is instant. A deleted profile waits in the recycle bin with its data, and only emptying the bin removes the directory.
- It does not claim that a transfer file carries everything. The caches and the service worker stores are left behind on purpose, and a profile open at that moment is skipped rather than copied.
- It does not claim that every failure reaches the screen. If the copy in the sync folder refuses to go, nothing in the window says so.
How to check
Each line names the file that decides the behaviour and the stand that fails the build when it stops being true.
- Each profile is launched into a data directory of its own, closed to other people on macOS and Linux
- apps/desktop/src/lib/forkEngine.js · apps/desktop/test/secrets-on-disk.js
- Emptying the recycle bin removes that directory, and a failed erase on this computer is shown
- apps/desktop/src/main/main.js · apps/desktop/test/purge-honesty.js
- A transfer file carries the session, leaves the caches behind, and refuses a wrong password
- apps/desktop/src/lib/bundle.js · apps/desktop/test/profile-bundle.js
- A session travels through an ordinary synced folder, and a conflict is handed to the person
- apps/desktop/src/lib/sessionSync.js · apps/desktop/test/session-sync-folder.js
Questions
- Can one profile read another profile's cookies?
- Not through the browser. Each profile is launched into its own data directory and never receives the path of another, so no page in one profile can reach the jar of another.
- Does a proxy change anything about storage?
- No. An address decides where traffic comes out and has no opinion about what is written to disk, so the two questions are separate pages here.
- Is the transfer file readable without its password?
- No. It is sealed with a key stretched from the password, and a wrong password ends in a refusal rather than in data that looks almost right.
- Does the sync folder hold the password too?
- No. The password stays on the machine, beside the app's own data.
- Why not put every account in a virtual machine instead?
- Because the wall is thicker and the bill is larger. A guest system costs memory, disk and a boot before the first click.
Read next
The exit address
The other axis: how the exit is set and what happens to the clock.
Profile isolation
The term itself, and what it does and does not separate.
Cookie jar
What the jar holds and who is allowed to open it.
Profiles in the app
Folders, tags, templates and the busy lock on a shared list.
Session transfer
Moving a signed in account to a second computer.
What your own browser hands over
The fingerprint check reads 12 values in your browser and sends nothing anywhere.