OpenWiki local-first Wikipedia engine
BOOT · STARTING
/commands · enter to search · scroll for more results
© 2026 webXOS · OpenWiki v1.2 · ☕ donate

OpenWiki — local-first Wikipedia engine

A free, local-first engine for Wikipedia. Search across Wikipedia's own APIs with scroll-triggered infinite scroll, cache every article you touch in IndexedDB, and rank results by fusing JEV determinization (a lightweight JSON Entity Vector) with a local MiniLM embedder. Nothing leaves your browser. No account. No tracking. No closed model endpoints. Just your machine, Wikipedia's public APIs, and a cache that gets sharper every time you use it.

The pipeline

Search fans out to Wikipedia's action=query&list=search (paginated via continue for infinite scroll) and action=opensearch, then batches REST summary fetches for every page. Results are deduped, JEV-scored, and — when the embedder is on — re-ranked by a hybrid JEV + MiniLM score. Everything is cached in IndexedDB under openwiki-v1.

Expand fetches the full action=query&prop=extracts body, the article's prop=categories, and its prop=links — cached the same way. Nothing is re-fetched twice.

JEV — JSON Entity Vector

JEV is a 512-dimension float vector computed deterministically from a text: unigrams with position weighting, bigrams, trigrams, and character 3-grams of longer tokens — all hashed into a shared space, weighted, and L2-normalized. Two JEV vectors compare with a single dot product, so ranking thousands of cached articles against a query is instant and requires no model, no download, no server. MiniLM, when on, is fused with JEV via a hybrid score (0.35·JEV + 0.65·MiniLM) — never as a replacement.

Infinite scroll & data export

Results stream in pages of 20 as you scroll. Loading is strictly scroll-triggered — the next page loads when a sentinel at the bottom of the results enters the viewport (with a 400px margin), and there is no auto-fill and no auto-load. A soft guard (default 1000 loaded results) keeps the DOM responsive; raise it with /limit <n> (or /limit 0 for unlimited). Use /loadall to pull the whole result set at once, then /export results json, csv, tsv, html, txt, or md to siphon everything out. /export all json dumps current results and saved articles in one file.

Saved = your history

Every article you SAVE lands in IndexedDB and appears in the SAVED modal, newest-first. That modal is the single source of truth for saved articles and the only history log OpenWiki keeps — no separate search-history store, no duplicate concept. Export it from the modal (MD/JSON/CSV/HTML/TXT) or with /export saved <fmt>. Dedup is by title key, so re-saving an article refreshes its timestamp instead of creating a duplicate.

Commands

/search <query>     fan-out search across Wikipedia APIs (or just type a query)
/more               load the next page of results (also triggered by scrolling)
/loadall            keep loading pages until exhausted or the guard is reached
/limit <n>          set the loaded-results guard (0 = unlimited)
/random             fetch 5 random articles
/expand <n>         expand the result at index n (fetches full extract + categories + links)
/save <n>           save result at index n to local store
/auto               related articles for the first current result
/saved              open saved articles modal
/export results <fmt>   export all currently loaded results (md|json|csv|tsv|html|txt)
/export saved <fmt>     export saved articles
/export all <fmt>       export everything (json recommended)
/stats              local cache statistics
/seed               pre-fetch a starter corpus (~20 articles)
/embed [on|off|status]   toggle MiniLM embedder
/clear              clear the console
/reset              reset session (keeps cache)
/about              open the about page

Privacy

There is no server. The only outbound traffic is to en.wikipedia.org (Wikipedia's public read-only APIs) and, when you enable it, cdn.jsdelivr.net for the MiniLM model weights. Those weights are cached by the browser after the first load and run entirely on-device via transformers.js. No query text, no article text, and no model I/O ever leaves your machine. No OpenAI, Anthropic, or Google endpoints are ever contacted. Saved articles and cached extracts live in IndexedDB and are yours to export or clear at any time.

Rate limits

Wikipedia's read APIs are generous but not unlimited. OpenWiki batches its calls, dedupes aggressively, and caches every response. If you hit a rate limit, wait a few seconds — the console will tell you. There is no hidden queue and no background polling.

The OWL family

knOOgle
local-first meta-search across keyless public APIs
agentowl.netlify.app/knoogle ↗
owl: arcr
prompt architect — Action → Role → Context → Response
agentowl.netlify.app/arcr ↗
OpenWiki
local-first Wikipedia engine with JEV + MiniLM hybrid retrieval
this page

Donate

OpenWiki is a free tool from webXOS. If it saves you time, you can buy the developer a coffee: buymeacoffee.com/webxos ☕. Donations are optional and never unlock anything extra — the tool is and stays free.