Nikitas Tsiris270 downloadsShow word definitions in a popup when you select or Ctrl-hover a word, powered by Wiktionary across many languages.
An Obsidian plugin that shows a word's definition in a small popup when you select a word or Ctrl-hover it. Definitions come from Wiktionary, so it works across a very large number of languages.

Intl.Segmenter,
so even scripts without spaces between words (Chinese, Japanese, Thai, Khmer, …)
are handled. Definitions are returned grouped by language.For each lookup the plugin calls the Wiktionary REST API:
https://<edition>.wiktionary.org/api/rest_v1/page/definition/<word>
The response is an object keyed by language code; each language has parts of speech
and HTML definitions. This page/definition endpoint is only implemented for the
English edition (en) — other editions return HTTP 501, so en is effectively
the only usable value. That's not a real limitation in practice: the English edition
defines words from thousands of languages (French, Greek, Japanese, …), with the
glosses written in English. To focus on one or more source languages, use the
"Show only these languages" allow-list rather than changing the edition.
Definitions are © Wiktionary contributors, licensed CC BY-SA. The popup links back to the source page.
This plugin ships as TypeScript source and must be compiled once. You need Node.js 18 or newer.
npm install # install dev dependencies
npm run build # type-check and bundle to main.js
For active development use npm run dev, which rebuilds main.js on every change.
A dev container is included, so you don't have to install Node on your host — only Docker.
VS Code: open the folder and choose Dev Containers: Reopen in Container. The
container (mcr.microsoft.com/devcontainers/javascript-node) runs npm install
automatically; then run npm run build or npm run dev in its terminal.
Plain Docker: from the project folder,
docker run --rm -u node \
-v "$PWD":/workspaces/app -w /workspaces/app \
node:20-bookworm-slim \
bash -lc "npm install && npm run build"
main.js is written back to the project folder via the bind mount, ready to copy
into your vault.
In Obsidian: Settings → Community plugins → Browse, search for Popup Dictionary, install, and enable it.
Copy these three files into your vault:
<your-vault>/.obsidian/plugins/popup-dictionary/
├── main.js
├── manifest.json
└── styles.css
Then in Obsidian: Settings → Community plugins, reload, and enable Popup Dictionary. (During development you can instead symlink the project folder to that location so rebuilds are picked up automatically.)
| Setting | Default | Description |
|---|---|---|
| Wiktionary edition | en |
Wiki to query. Only en is supported — Wiktionary's definition API is not implemented for other editions (they return HTTP 501). The English edition still covers thousands of languages. |
| Show only these languages | (all) | Comma-separated language codes to display (e.g. en, el, ja). Empty shows everything. |
| Selection trigger | Command / hotkey | Whether selecting a word looks it up automatically or only on command. |
| Enable hover lookup | on | Show definitions on hover (desktop only). |
| Hover modifier key | Ctrl / Cmd | Key to hold while hovering. None triggers on hover alone. |
| Hover delay | 300 ms | How long to rest on a word before lookup. |
| Show examples | on | Include example sentences when available. |
| Max definitions per part of speech | 5 | Cap the number of senses shown. |
To fetch definitions, the plugin sends the word you look up (and your chosen Wiktionary
edition) over HTTPS to Wikimedia's Wiktionary REST API at
https://<edition>.wiktionary.org. Nothing else is collected, stored remotely, or sent
anywhere; results are cached only in memory for the current session, and lookups fail
gracefully when you are offline.
page/definition
REST endpoint is only implemented for the English edition, so non-English editions
return HTTP 501. The English edition still covers thousands of source languages —
see the roadmap below.src/
├── main.ts plugin lifecycle, event wiring, command, orchestration
├── settings.ts settings interface, defaults, settings tab UI
├── dictionary.ts Wiktionary client: fetch, parse, in-memory cache
├── wordDetection.ts caret/selection → word, via Intl.Segmenter
└── popup.ts floating popup: render, position, dismiss
MIT