TreeMap
A free, open-source disk-space visualizer. Squarified treemap, duplicate hunting, disk-full forecasting, and cleanup that only ever moves files to the Trash.
A private, on-device search router that divides your query and sends it to the right search destination without tracking.
ProductivityHTML · TypeScriptGitHub @bradflaugherOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Divide the search. Conquer the results.
Translation pending
Taken from the repository README
Loading the full README. The saved excerpt is shown below.
Private, on-device search routing.
divid3 is a meta-search router that runs entirely in your browser. It uses a small local ML model to read your intent, then sends you to whichever search engine you've decided handles that kind of query best — without a server, an account, or a middleman.Read the full README ↗Private, on-device search routing.
divid3 is a meta-search router that runs entirely in your browser. It uses a small local ML model to read your intent, then sends you to whichever search engine you've decided handles that kind of query best — without a server, an account, or a middleman.
Try the hosted instance at divid3.com
all-MiniLM-L6-v2 model embeds your query and picks the best-matching destination from your configured set.!yt, !eb, !m, …) that always win over the semantic router.github.com) and localhost:3000 route directly. Low-memory phones get a deterministic keyword router instead of the model.?q= URLs. No 4-second countdown. On mobile and on any link with a query string (e.g. browser-bar searches), the router shows you the top match plus the ranked alternatives and waits for you to tap. Desktop typing still routes immediately because the live score chips already let you click any destination.divid3 is built for people who want a search bar they actually trust — even when the destination itself isn't end-to-end private. The threat model is:
scripts/generate_search_embeddings.py) — there is no remote inference./api/route to intercept.scripts/search_phrases.json and it's gone everywhere, including from the on-device classifier.You're welcome to ship a fork that points only at Kagi, Brave, SearXNG, your own engine, or anything else. Same code, your engines.
!yt, !eb, etc. Always wins.github.com) and localhost:port detection.near me, pictures of, music video, used, …) add a small, capped boost on top (0.03 per keyword point, max 5 points), so an unambiguous cue isn't outvoted by a fuzzy semantic neighbor.?lite=1), a deterministic weighted-keyword scorer takes over.Routing quality is measured by scripts/eval_routing.py against a held-out benchmark of 582 labeled real-world queries (scripts/routing_benchmark.json — the validator enforces that no benchmark query is ever copied into the training phrases):
| Router | Accuracy |
|---|---|
| Semantic (top-3 cosine + keyword boost) | 98.8% |
Keyword (?lite=1) | 98.1% |
Run it yourself after any corpus edit:
python3 scripts/eval_routing.py # full report + misroute analysis
python3 scripts/eval_routing.py --query "best ramen" # probe a single query
The misroute report names the exact phrase that "won" each wrong routing, which makes corpus debugging mechanical: find the hijacking phrase, sharpen or remove it, re-run.
The router decides what kind of search a query is. Destinations (footer link, or press D) lets each person choose which site that kind opens. The defaults are below: every one works without an account, and they're spread across different companies rather than one. Every route offers alternatives such as ChatGPT, Claude, Lumo, Duck.ai or Perplexity for AI answers, X, Reddit, Bluesky or Google News for news, DuckDuckGo, Brave, Startpage or Google for web, Google Maps or Apple Maps for maps, and Amazon, Walmart, Target, Best Buy, Costco or Facebook Marketplace for shopping. Picks are saved in the browser's localStorage, never sent anywhere, and only when they differ from the defaults. The full list lives in destinations in scripts/search_phrases.json.
| Route | Used for | Default | Route bangs (follow your pick) |
|---|---|---|---|
ai | Explainers, research, writing, reviews, advice | Brave Ask | !ai, !l, !g, !gr, !p, !px |
x | Breaking news, live events, opinions, "what are people saying" | AP News | !news, !n |
ddg | Generic web search, quick facts, "best X" product research; fallback for anything ambiguous | DuckDuckGo (html) | !web |
maps | Locations, "near me", directions | OpenStreetMap | !m, !map |
images | Image queries | Bing Images | !i, !img |
youtube | Music, video, tutorials | YouTube | !v, !video |
ebay | Shopping: buying something ("buy a…", "deals on…", "where to buy"), plus used / vintage / parts / collectibles | eBay | !shop, !used |
Every site also has its own bang that reaches it whatever you picked: !yt, !eb, !x, !ddg, !lumo, !claude, !gpt, !pplx, !osm, !reddit, !ap and so on. The panel shows each site's bangs.
Plus the direct virtual engine, which opens a typed URL (github.com) literally instead of searching for it.
Add as a custom search engine:
https://divid3.com/?q=%s
Setup instructions for Chrome, Firefox, Safari, and Arc live at divid3.com/setup.html.
Keyboard shortcuts: / focus search · ↑/↓ change destination (while typing, or on the routing overlay) · Enter route to selection · Esc close overlay / revert selection · D destinations · T toggle theme · ? help.
# install deps (Playwright + serve + ESLint + TypeScript)
npm ci
# local dev server
npm run serve
# end-to-end tests (Chromium / Firefox / WebKit / mobile Safari)
npm test
# routing unit tests (config checks, keyword + semantic routing examples,
# benchmark accuracy floors). Semantic tests need the Python deps:
pip install -r scripts/requirements.txt
npm run test:unit
# lint everything (ESLint + TypeScript + Ruff + JSON config validator)
npm run lint
Everything is driven by one file: scripts/search_phrases.json. That file is the source of truth for engines, bangs, keyword fallback rules, and the training phrases that build the semantic index. The Python script reads it and emits two runtime artifacts:
search-config.json — small lookup tables the page loads at bootsearch-embeddings.json — L2-normalized phrase vectors for the ML router{
"engines": {
"my_engine": {
"name": "My Custom Search",
"urlTemplate": "https://example.com/?q={q}" // {q} is the URL-encoded query
}
},
"bangs": {
"my": "my_engine" // !my → my_engine
},
"keywordRules": [
{ "engine": "my_engine", "weight": 5, "kw": ["custom topic", "thing i want here"] }
],
"_routes": [
{
"key": "my_engine",
"label": "Display label for the index",
"phrases": [
"search for my custom topic",
"lookup something on my search engine"
]
}
]
}
Notes:
name and urlTemplate. No other fields are accepted — the validator rejects strays (including color, which the UI no longer uses).direct engine is special: its urlTemplate is "{q}" and it opens a literal URL the user typed._routes entry must be declared in engines. The validator and the generator both enforce this.ddg must exist; it's the universal fallback when nothing else is confident.ddg fallback route. Under nearest-neighbor pooling a bare word (buy, music, guide) becomes a universal attractor that hijacks unrelated queries — removing them was worth ~10 points of measured accuracy.scripts/routing_benchmark.json into the corpus; the benchmark must stay held-out (also enforced).# 1. Edit scripts/search_phrases.json — add engines, tweak bangs, drop phrases.
$EDITOR scripts/search_phrases.json
# 2. Measure the change against the routing benchmark.
python3 scripts/eval_routing.py
# 3. Regenerate the runtime artifacts.
python3 scripts/generate_search_embeddings.py
# 4. Bump EMBEDDINGS_VERSION in index.html so caches invalidate atomically.
# (search the file for EMBEDDINGS_VERSION = '...')
# 5. Sanity-check the change locally.
npm run lint # validates schema + corpus rules + drift with search-config.json
npm run test:unit # routing examples + accuracy floors
npm run serve
npm test
That's it — no JS edits required.
Every PR runs:
<script> blocks in index.html and setup.html (via eslint-plugin-html), and TypeScript (strict) over the Playwright specs.scripts/ and tests/unit/.scripts/validate_config.py). It catches missing engines, broken bang references, urlTemplates without {q}, and drift between search_phrases.json and the generated search-config.json.tests/unit/test_routing.py). They run the keyword and semantic routers against example tables and the held-out benchmark, and fail below the accuracy floors (97% semantic, 95% keyword)..github/workflows/search-tests.yml) on Chromium, Firefox, WebKit and mobile Safari.package.json is dev tooling only, and npm audit signatures verifies every package's registry signature in CI.permissions. Python deps are pinned too._site/), from a production environment._headers sets HSTS, frame-ancestors 'none', nosniff, no-referrer and a restrictive Permissions-Policy.Security issues: see SECURITY.md. Contributing: see CONTRIBUTING.md.
Code: MIT · Bundled model weights: Apache 2.0 (see models/).