Skip to main content

An interactive TUI to search the Tor network for .onion links by keyword.

Project description

🧅 chopped onions

Search the Tor network for .onion links — right from your terminal.

A fast, colorful TUI that scrapes multiple onion search engines in parallel over Tor, ranks the results against your query, and copies any link to your clipboard with a single keypress. Privacy-first by design: every request is forced through Tor, with a fresh circuit per search.

License: MIT Python 3.11+ Built with Textual Powered by Tor PRs welcome

chopped onions in action

✨ Features

  • 🔎 Parallel onion search — queries Torch, Tordex, Tor66 and OnionLand Search at once, then merges, de-duplicates and ranks the hits.
  • 🧅 100% over Tor — fail-closed networking: if traffic can't be routed through Tor, it refuses to run rather than leaking to the clearnet.
  • 🔁 Fresh circuit per search — stream isolation gives each search its own unlinkable Tor circuit.
  • 🕵️ Anti-fingerprinting — sends stock Tor-Browser-style headers, no cookies, no Referer, nothing identifying.
  • ⌨️ Keyboard-driven — type, hit Enter, arrow up/down to pick, Enter to copy the address to your clipboard.
  • 🧠 Smart query syntaxAND, OR, "exact phrases" and -exclusions.
  • 🎨 5 themesonion, matrix, amber, synthwave, ice.
  • ⚙️ Configurable — proxy, timeouts, engines, colors, clipboard behavior, all in one TOML file.
  • 🛡️ Built-in safety self-testchopped-onions --check confirms you're actually exiting through Tor.

🎨 Themes

synthwave matrix

📦 Installation

Prerequisite: you need Tor running locally with a SOCKS proxy on 127.0.0.1:9050. See Setting up Tor below.

Option 1 — pipx (recommended)

pipx installs the app into its own isolated environment and puts the command on your PATH:

pipx install git+https://github.com/Thatkidtk/chopped-onions
chopped-onions

Option 2 — pip

pip install git+https://github.com/Thatkidtk/chopped-onions
chopped-onions

Option 3 — from source

git clone https://github.com/Thatkidtk/chopped-onions
cd chopped-onions
python3 -m venv .venv
.venv/bin/pip install -e .
.venv/bin/chopped-onions

Or just run the bundled launcher, which will start Tor for you if it isn't already up:

./onions

🧅 Setting up Tor

chopped onions talks to Tor's SOCKS proxy — it does not ship or embed Tor itself.

macOS (Homebrew)

brew install tor
brew services start tor          # runs Tor in the background on 127.0.0.1:9050

Debian / Ubuntu

sudo apt install tor
sudo systemctl enable --now tor

Arch

sudo pacman -S tor
sudo systemctl enable --now tor

Already have Tor Browser? It exposes a SOCKS proxy on port 9150 while open. Set port = 9150 in your config and you're good to go.

Verify everything is wired up correctly:

chopped-onions --check
# ✓ Tor OK — exit node 185.220.101.25

🚀 Usage

Launch the app, type a query, press Enter:

chopped-onions
Key Action
type + Enter run the search
(in search bar) jump into the results list
/ move the selection
Enter (on a result) copy the .onion link to clipboard
Ctrl+O open the selected link in a browser (if configured)
Esc return to the search bar
Ctrl+L clear
Ctrl+R re-check the Tor connection
Ctrl+C quit

Search syntax

Mix these freely. The cleaned words are sent to the engines; the operators filter and rank the results locally:

Pattern Meaning
email privacy AND — both words boost a result
"secure email" exact phrase (required)
email OR mail either (also email|mail)
market -scam exclude results containing scam

Example: "secure email" privacy OR anonymity -scam


🛡️ Staying safe & anonymous

chopped onions is built to be safe by default, but anonymity is a practice, not a checkbox. Read this.

What the tool does for you

  • Fail-closed routing. Every request goes through the Tor SOCKS proxy using socks5h (remote DNS), so .onion names — and all lookups — are resolved by Tor, never your local resolver. If the proxy is missing or misconfigured, the app refuses to make the request instead of silently falling back to a direct, deanonymizing connection.
  • Per-search circuit isolation. Each search uses random SOCKS credentials, so Tor builds a fresh, unlinkable circuit every time. One search can't be trivially correlated with the next.
  • A low-information fingerprint. Requests carry stock Tor-Browser-style headers. No cookies are stored, no Referer is sent, no custom headers identify you, and $HTTP_PROXY/system proxy env vars are ignored so routing is exactly what you configured.
  • No history on disk. Your queries and results are never written to a log or history file. The only file the app writes is the config you control.

What you are responsible for

🔒 Tor hides where you connect from. It does not make you anonymous if you give yourself away.

  • Browse .onion results in the Tor Browser, not a normal browser. Copying a link is safe; opening it in Chrome/Safari is not — it leaks your real IP and a rich browser fingerprint. The clipboard-copy workflow exists precisely so you can paste into Tor Browser.
  • Never enter real personal info (name, email, phone, reused passwords) on hidden services. Treat everything as hostile.
  • Don't log in to clearnet accounts over Tor in a way that links your identity to your Tor activity.
  • Assume search results are untrusted. Onion indexes contain spam, scams, phishing clones and worse. A result appearing here is not an endorsement — verify addresses out-of-band before trusting them.
  • Keep your system updated, and prefer running from a privacy-focused OS like Tails or Whonix if your threat model calls for it.
  • Mind your metadata. Time-of-use patterns, writing style, and unique queries can all be de-anonymizing over time.
  • Consider a bridge (obfs4) if simply connecting to Tor is sensitive where you are.

Verify it's working

Before trusting it, run the self-test — it confirms your traffic is actually exiting through the Tor network:

chopped-onions --check

You can also press Ctrl+R inside the app at any time.


⚙️ Configuration

A documented config file is created on first run at ~/.config/chopped-onions/config.toml:

theme = "onion"          # onion | matrix | amber | synthwave | ice

[tor]
host = "127.0.0.1"
port = 9050              # use 9150 for Tor Browser's proxy
timeout = 45
isolate_circuits = true  # fresh, unlinkable circuit per search (recommended)

[search]
max_results = 200
per_engine_limit = 100
dedupe = true

[behaviour]
copy = "url"             # "url" copies full link, "host" copies only the .onion host
open_command = ""        # e.g. "open -a 'Tor Browser' {url}" to also launch a browser
confirm_quit = false

[[engines]]              # add / disable / update engines here
name = "torch"
url = "http://torchdeedp3i2jigzjdmfpn5ttjhthh5wbmda2rr3jvqjg5p77c54dqd.onion/search?query={q}"
enabled = true
# … and tordex, tor66, onionland

💡 Onion addresses change over time. If an engine goes dark, update its address (or add your own) in the [[engines]] section — {q} is the URL-encoded query.


⚖️ Disclaimer

chopped onions is a research / OSINT / privacy tool. It only queries public onion search indexes — it does not crawl, host, or fetch content from the sites it lists, and indexing a link is not an endorsement of it. You are solely responsible for how you use it and for complying with the laws of your jurisdiction. Provided as-is, without warranty. See LICENSE.

🤝 Contributing

Issues and PRs welcome — new engines, themes, parsers, and packaging improvements especially. Please keep the fail-closed, Tor-only safety guarantees intact in any networking change.

📄 License

MIT © Thatkidtk

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

chopped_onions-0.1.0.tar.gz (32.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

chopped_onions-0.1.0-py3-none-any.whl (18.9 kB view details)

Uploaded Python 3

File details

Details for the file chopped_onions-0.1.0.tar.gz.

File metadata

  • Download URL: chopped_onions-0.1.0.tar.gz
  • Upload date:
  • Size: 32.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.5

File hashes

Hashes for chopped_onions-0.1.0.tar.gz
Algorithm Hash digest
SHA256 9d9d65dd1f14be0c24f2a4d53959c2bff0d8d3cc1ae67cdb77a9227a4963871c
MD5 5e0bc87916abdeada9b0f9ff44dc2b9b
BLAKE2b-256 2803483e8d07870d557d38b434583e07fbe9401ac3b8b5e3b5fdae946c8def97

See more details on using hashes here.

File details

Details for the file chopped_onions-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: chopped_onions-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 18.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.5

File hashes

Hashes for chopped_onions-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 c98e7d1d11479cf744dc751b3eb5aef7eb2e1ee9afc07bd9aa72358ddee0a0a8
MD5 818099f1486b716c2ffb94b0e75f0432
BLAKE2b-256 bad725dc52cacb390bc4b1ffd53e5ca46cea927b1d63409247a23746ad5b2853

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page