LexiPop is an instant, in-browser dictionary for Firefox. Whenever you come across an unfamiliar word online, simply double-click it to see its definitions, pronunciation, and an option to learn more, without having to leave the page.
This is a personal fork of Lexigo (itself derived from Dictionary-Anywhere). The original project stopped receiving updates, so this fork continues its development. The dictionary source was also switched to English Wiktionary, which is maintained and covers essentially every English word.
Build it from source and load the packaged XPI, or run straight from this repository:
- In Firefox, open about:debugging#/runtime/this-firefox.
- Click Load Temporary Add-on…: point it at this repository folder, or at the XPI from
web-ext-artifacts/.
For a permanent install, build the XPI (npm run build) and load it via about:addons; for development, npm run dev
launches Firefox with the extension and auto-reloads on save.
- Instant lookups: double-click any word to get a popup with up to eight definitions per part of speech (twenty in total), grouped by part of speech, with example sentences where available. Longer entries — "run" carries a hundred senses — say so with a "+N more definitions" note instead of hiding senses silently.
- Headword resolution: an inflected form whose Wiktionary page only declares its base form ("ran" → "run") shows the base form's entry, with a note naming the declared relationship.
- Right-click lookup: select a word and pick "Look up … in LexiPop" in the context menu — same popup, right where the word is.
- Toolbar search: click the LexiPop toolbar button to open a search box next to the address bar and type any word; results appear as you type.
- Pronunciation: phonetic transcription plus a speaker icon that plays a recorded pronunciation, falling back to your browser's text-to-speech when no recording exists.
- Nested lookups: double-click a word inside a popup to look that up too.
- Trigger key: optionally require holding Ctrl, Alt, or Shift (Command on macOS) while double-clicking, so popups only appear when you want them.
- Word history: optionally store every word you look up, view the count in the options page, and export it as CSV.
- Learn more: every popup links to the full Wiktionary article for the word.
- Dark mode: the popup and options page follow your system color scheme.
- Double-click a word on any page (holding your configured trigger key, if set) — or select a word, right-click and choose "Look up … in LexiPop". You can also click the toolbar button and type a word into the search box.
- Click the speaker icon to hear the word, or "Learn more »" for a full search.
- Click anywhere outside the popup, or its × button, to dismiss it.
Settings live under the extension's options page (Add-ons Manager → LexiPop → Preferences): language, trigger key, and word history (including CSV download and clearing).
Definitions come from English Wiktionary — a free, collaboratively edited dictionary (Wikimedia project) whose rendered HTML is stable and semantic, so the parser can reliably extract the word's IPA transcription, a recorded pronunciation, and part-of-speech-grouped definitions for essentially every English word. The free Dictionary API answers the same lookup in parallel: it fills in a missing IPA transcription or recording, and carries the lookup when Wiktionary has no page for the word. Inflected forms get their own Wiktionary pages that only declare their base form ("plural of cat", "simple past of run"); when those declarations outnumber a page's own senses, LexiPop follows the one-hop link the page itself names and shows the relationship in the popup — no stemming, no guessing, so "training" and "compute" keep their own entries. Requests are sent only to those services, and only when you trigger them; the extension collects no data (word history is stored locally in your browser and never leaves it).
This is the exact build that produces the submitted add-on.
Requirements
- Node.js
>= 20.19.0(tested with v26.x) — install from https://nodejs.org ornvm install 26 - npm
>= 8.0.0(bundled with Node.js) - Firefox (only for
npm run dev, not fornpm run build)
Steps
git clone https://github.com/Chroma01/LexiPop.git
cd LexiPop
npm install # installs devDependencies (web-ext, eslint, prettier, @floating-ui/*)
npm run vendor # copies the pinned floating-ui 1.8.0 UMD bundles into content/vendor/
npm run build # runs vendor, then packages web-ext-artifacts/lexipop-3.4.0.zipnpm run build already invokes the vendor step, so the minimal path is just
npm install && npm run build.
What the build does
scripts/vendor.mjscopies the pre-built, minified UMD bundlesnode_modules/@floating-ui/core/dist/floating-ui.core.umd.min.jsandnode_modules/@floating-ui/dom/dist/floating-ui.dom.umd.min.jsintocontent/vendor/. These are the exact npm-published bundles for the pinned versions@floating-ui/core@1.8.0and@floating-ui/dom@1.8.0(pinned without carets inpackage.json). No bundler, no transpilation of our own code is involved:background/background.js,content/lexipop.js,content/popup.html,content/popup.cssandoptions/options.htmlship exactly as written in this repository.web-ext build(config:web-ext.config.mjs) then zips the extension root intoweb-ext-artifacts/. It does not transform any source files.
So the only machine-generated files in the add-on are the two floating-ui
UMD bundles, and they are byte-for-byte the files published by the upstream
npm packages — verifiable at any time with npm install && npm run vendor
(diffs only ever differ by trailing line-ending style, never by content).
Verify
npm run lint:check # eslint, no fixes
npm run format:check # prettier
npm run lint:ext # web-ext lint (addons-linter, same checks as AMO)npm run dev # launch Firefox with the extension, auto-reloading on saveOriginal work by meetDeveloper (Dictionary-Anywhere), continued by Jort van Leenen (Lexigo). Forked and maintained by Chroma01.
GPLv3 license. See LICENSE file for details.
This add-on is signed via AMO self-distribution (unlisted). Publishing a new version:
- Bump
versioninmanifest.json(andweb-ext.config.mjsoutput if needed). npm run build→web-ext-artifacts/lexipop-<ver>.zip.- Submit that zip in the AMO Developer Hub (same add-on → new version → "On your own").
- When it is signed, download the signed
.xpifrom the Developer Hub. - Create GitHub release
v<ver>and upload the signed.xpiaslexipop-<ver>.xpi. - Point
update.jsonat the new release asset and push — Firefox picks the update up automatically.
Signed releases live in the GitHub Releases section; the current signed
build is the v3.4.0 release asset: English Wiktionary became the primary
dictionary source — dictionaryapi.dev answers the same lookup in
parallel, filling missing IPA transcriptions and audio — and inflected
forms whose Wiktionary page only declares their base form ("cats",
"ran") resolve to that headword with the relationship shown in the
popup. v3.3.0 reworked the icon identity: a tile-less book glyph —
royal-gradient cover, dark navy spine, white pages with a faint neutral
edge, gold notched bookmark. No app-style frame, no letter mark; a
single master icon.svg renders every size 16–128 with no separate
tiers; the old popup-card sources icon-bold.svg and
icon-bold-16.svg are deleted.