Use Tor like a VPN with a country of your choice as the exit — from a terminal, on macOS.
Strictly, Tor is not a VPN: your traffic hops through three onion relays run
by strangers instead of one tunnel run by a company you pay. Slower, but no
single operator sees both you and your destination. oignon makes that feel
like a VPN anyway: one command routes your Wi-Fi through Tor, e picks the
exit country live, and the header shows your verified exit IP. Quitting
cleans up — Tor stopped, proxy off.
None. No tor on PATH? oignon offers to download the official
Tor Expert Bundle (pinned
version, checksum-verified) into ~/.local/share/oignon/ — the bundle also
ships the GeoIP data, so relay countries just work. No torrc needed either —
without one, oignon starts Tor with sane defaults:
SOCKSPort 9050
ControlPort 9051
CookieAuthentication 1
If ~/.config/tor/torrc exists it is used instead; it must expose the same
control port. For relay countries you also want Tor's GeoIP databases — some
packagings ship them, Nix's does not. Setup details:
docs/configuration.md.
brew tap abosnjakovic/oignon https://github.com/abosnjakovic/oignon
brew install oignon
or
cargo install oignon
oi # starts Tor if needed, adopts it if running
oi de # same, requesting exits in Germany
(the installed command is oi; use cargo run / cargo run de from a checkout)
Quitting oignon stops Tor and disables the Wi-Fi SOCKS proxy. A Tor found already running at launch is adopted and owned — quit stops it too.
| Key | Action |
|---|---|
q / Esc |
quit (stops Tor, proxy off) |
e |
choose exit country |
n |
new circuit (SIGNAL NEWNYM) |
p |
toggle the Wi-Fi SOCKS proxy |
s |
toggle StrictNodes |
t |
start / stop Tor |
? |
help overlay (any key closes) |
In the country picker: type to filter, Up/Down to move, Enter to apply, Esc to cancel.
The header's exit: is the relay your traffic actually leaves through,
derived from live circuit and stream events; want: is what you asked for;
ip: is the exit IP verified through Tor itself via check.torproject.org.
By default StrictNodes is off: if the chosen country has no usable exit, Tor
silently falls back to another. Press s to fail instead of falling back.
| Page | Covers |
|---|---|
| Architecture | Module layout, data flow, state model, testing philosophy |
| Tor lifecycle | Process ownership, stop paths, proxy follow, verified exit IP, CLI |
| Control protocol | Reply framing, handshake, events, geo lookups, exit switching |
| Configuration | torrc, GeoIP setup, macOS proxy, demo recordings |


