A clean, offline word-lookup dictionary desktop app, styled like a leather-and-gold storybook (matches the wireframe: word box, refresh/clear button, meaning box, sample sentence box). Built with Electron so it's just HTML/CSS/JS under the hood — nothing exotic to maintain.
- 111,569 words, fully offline, no internet required to look words up
- Instant search + autocomplete as you type
- "Random word" button for quick discovery
- Sample sentence for every word (see note below on how these are generated)
data/OPTED-Dictionary.csv is the OPTED dictionary (a public-domain export
based on the 1913 Webster's dictionary). It's word/definition data only —
it does not include example sentences for most words. So the app:
- Uses a real usage phrase from the dictionary when one genuinely exists in the definition text (a small number of entries have this).
- Otherwise, generates a simple example sentence from the word's part of speech (noun/verb/adjective/adverb), clearly just to demonstrate usage.
If you'd rather plug in a dataset that already has real example sentences,
drop a new CSV with the same Word,Count,POS,Definition columns into
data/OPTED-Dictionary.csv and run npm run rebuild-data.
ARCWorks Simple Dictionary/
├── main.js Electron main process (creates the window)
├── preload.js Safe bridge that lets the UI read the dictionary file
├── package.json
├── data/
│ ├── OPTED-Dictionary.csv raw source data
│ └── dictionary.json pre-built, app-ready lookup file (already built for you)
├── scripts/
│ └── build-dictionary.js regenerates dictionary.json from the CSV
├── renderer/
│ ├── index.html
│ ├── style.css
│ └── app.js all the search / UI logic
├── assets/
│ ├── icon.ico app + installer icon (placeholder — swap with your own)
│ ├── icon.png
│ └── installer_wizard.bmp / installer_small.bmp Inno Setup wizard art
└── installer/
└── setup.iss Inno Setup script
You'll need Node.js (LTS) installed. Then, in the project folder:
npm install
npm start
That opens the app in a normal window, same as it'll look when installed.
If you ever edit data/OPTED-Dictionary.csv (or swap it for a different
word list), rebuild the lookup file with:
npm run rebuild-data
npm run dist
This uses electron-builder to produce an unpacked Windows build at:
dist/win-unpacked/ARCWorks Simple Dictionary.exe
You can run that .exe directly to sanity-check the packaged build before making an installer.
- Open
installer/setup.issin Inno Setup. - Make sure step 2 above has already been run, so
dist/win-unpackedexists (the script points at it directly). - Build → Compile (or press F9 / Ctrl+F9).
- The finished installer lands in
installer/Output/ARCWorks-Simple-Dictionary-Setup.exe.
The script is already set up with:
- Program group + desktop icon option
- Your app icon for the installer and uninstaller
- Install path defaulting to
Program Files\ARCWorks\Simple Dictionary
You mentioned having your own icon and image — I generated placeholder ones (a little book-and-magnifying-glass mark) so everything works out of the box. To swap in yours:
- Replace
assets/icon.ico(multi-size .ico, used for the app + taskbar + installer) - Replace
assets/installer_wizard.bmp(164×314) andassets/installer_small.bmp(55×58) if you want custom Inno Setup wizard banners main.jsandinstaller/setup.issalready reference these exact filenames, so as long as the new files keep the same names, nothing else needs to change
Everything visual lives in renderer/style.css at the top, in the
:root block — colors, radii, and shadow "depth" are all named variables
(--cover, --gold, --page, etc.) so you can retheme it without hunting
through the file.
- Search is case-insensitive and instant (binary search over a sorted word list).
- A handful of words appear twice in the source data with different capitalization (e.g. "Form"/"form"); the app merges those automatically so you only ever see one entry per word.
- This was built and smoke-tested inside a Linux sandbox using Electron + Xvfb (no visible errors, screens verified), but final packaging/testing on your actual Windows machine is still worth doing before shipping.