Reference
Everything Unweb does, and what it can’t do. For a first look, the quick start is shorter.
Windows and Strangers
A window has the bar at the top and one to four strangers below it: one, two or three in a row, four as two by two. Each stranger is a strip and a page, with a store of its own.
On Windows and Linux a stranger’s store is a folder of its own, which the engine uses for cookies, storage, its cache, service workers and everything else a site can leave. On macOS each stranger gets its own WKWebView data store that keeps nothing on disk. No two strangers share anything, whether they are side by side or in separate windows.
The Bar
| Part | What it does |
|---|---|
| Back, Forward, Reload | Act on every stranger in the window. They use the engine’s own calls, so a page can’t catch or block them. |
| Address | Opens what you type in every stranger in the window. example.com becomes https://example.com/. Only http and https addresses open; words aren’t sent to a search engine. |
| Setups | Save the window’s strangers as a setup, open a setup in a new window, or delete one. |
| Compare | Screenshots of every stranger in the window, side by side, in a window of their own. |
| Side by side | Adds a stranger to the window, up to four, at the address you last typed in the bar. |
| New stranger | Opens another window with one stranger. |
A new stranger opens the address you last typed, never the address the others are on now. A site can put an identifier in its own address, and a new stranger opening it would carry that identifier in.
The Strip
| Part | What it shows |
|---|---|
| Language | Windows only. The stranger’s language, sent in its requests and seen by pages in navigator.language. |
| Location | Direct, or the proxy the stranger goes through. |
| Cookie count | “5 cookies from example.com, 2 from 1 other site”: every cookie in the stranger’s store, including the ones scripts can’t see, counted against the site it shows. Updated every two seconds and on every page load. Unweb reads only names and domains, never values. |
| × | Closes this stranger and deletes what it collected. Shown when the window has more than one. |
Language and location are set before a stranger’s first request, so changing either opens a new stranger in its place, at the address you last typed, and closes the old one with everything it collected.
On Linux and macOS the language menu is off: WebKitGTK applies its language setting to every stranger at once, and WKWebView takes one language for the whole app.
Locations
A location is a proxy you have: socks5://host:port, http://host:port, or host:port for an HTTP proxy. The host is a name or an IPv4 address and the port is required. Proxies that need a user name and password, and IPv6 proxy addresses, aren’t supported yet.
With a location:
- Everything the stranger loads goes through the proxy: pages, images, calls, frames, WebSockets, workers. On Windows and Linux that includes addresses on your own computer such as
127.0.0.1. - Names are looked up by the proxy, not by your computer.
- When the proxy can’t be reached, the stranger loads nothing. On Windows and Linux it never goes direct instead.
- WebRTC is turned off, because it can reach the network around a proxy.
On macOS two things differ. Requests to your own computer (127.0.0.1, localhost) skip the proxy, which the system does and an app can’t change; that traffic never leaves your computer. And when a stranger’s proxy is down, macOS sends its requests direct, from your own address. Unweb tried turning that off and putting a relay of its own in front of the proxy, and macOS went direct either way. On a Mac, check that your proxy works before relying on a location. A location on macOS needs macOS 14 or later.
The proxy sees everything the stranger does. A location also doesn’t change the stranger’s time zone, which is your computer’s, or its language unless you set one.
Setups
A setup is a name and, for each stranger, its language and location. It holds no address, cookie or anything a stranger saw. Opening a setup gives a new window of new strangers at the start page.
Setups are the only thing Unweb keeps, and only once you save one. They live in one file:
| System | File |
|---|---|
| Windows | %APPDATA%\org.unweb.app\setups.json |
| macOS | ~/Library/Application Support/org.unweb.app/setups.json |
| Linux | ~/.config/org.unweb.app/setups.json |
Deleting the last setup deletes the file. Names are up to 60 characters; Unweb keeps up to 50 setups of up to four strangers each. A file Unweb can’t read is renamed setups.json.bad-<time> and left for you. A setup with a location Unweb doesn’t take, in a file edited by hand, won’t open, so no stranger of it goes direct by mistake.
Compare
Compare asks each stranger’s engine for a screenshot of what its page shows and lays them out side by side, each under a caption: its number, language, location, cookie count and address. The address leaves out the part after ?, where sites usually put identifiers; one a site puts in the path still shows.
Save image writes the strip as one PNG to your Downloads folder (your home folder when there isn’t one), named unweb-compare-<date>-<time>.png, never over an existing file. The compare window has a small store of its own, deleted when it closes, and the screenshots go with it.
Command Line
unweb [address]
unweb --selftest <folder>
unweb example.com opens a stranger at that address. --selftest runs the end-to-end self-test and writes its results to the folder.
When a Stranger Closes
Unweb deletes the stranger’s folder and checks that it stays deleted. On Linux it first tells the engine to clear the stranger’s data, waits until the engine has stopped writing to the folder, deletes it, and watches it for ten seconds in case anything writes it back. On macOS it clears the stranger’s in-memory store before the window goes, which also stops its service workers. When the last stranger closes, Unweb waits for these deletions before it quits.
Each running copy of Unweb keeps its strangers in a run folder of its own. If Unweb crashes or is killed, the next copy that starts deletes what was left. A second copy started while the first is running leaves the first one’s strangers alone.
Unweb also turns off what the engine would otherwise keep outside a stranger’s folder: WebView2’s GPU shader cache on Windows, the shared Mesa and NVIDIA shader caches on Linux, and on Linux the offer to save sign-in passwords in the system keyring.
What Unweb Can’t Hide
- Your IP address, unless the stranger has a location. On macOS, a stranger whose proxy is down shows your own address.
- Your device. All strangers on one computer share its screen size, fonts and hardware, so a site that fingerprints devices could link them.
- It’s not a sandbox for dangerous sites. A stranger runs on the same system engine as everything else.
- Graphics driver caches on Windows and macOS. The driver can keep compiled shaders in a cache shared by every program, which Unweb can’t turn off.
- A forced close. Killing Unweb skips the careful wipe; what’s left is deleted the next time Unweb starts.
- Memory on Linux. A closed stranger’s network process stays in memory (about 55 MB) until Unweb quits, a limitation in Tauri. Its data is already gone.
- Being in Unweb. A page can tell it runs inside a Tauri app; its calls to the app are refused.
- Downloads. Unweb refuses them for now, because a downloaded file would outlive the stranger.
Self-Test
unweb --selftest runs the real app against small servers on your own computer and judges every check by what the servers logged, never by what Unweb says about itself. It covers traces a site can leave, strangers side by side, locations through local HTTP and SOCKS5 test proxies, setups, Compare, the bar, and that nothing is left on disk afterwards. How it was tested walks through it, and the recorded results are on GitHub.