github bee-san/hachidori 0.2.3
Hachidori 0.2.3

7 hours ago

🐦 Hachidori 0.2.3

Large libraries take far less memory, more dictionaries import, and the popup behaves the way Yomitan users expect. This release cuts the engine's resident memory by up to 90%, imports ZIPs from streaming writers such as 小学逨 ζ—₯ζœ¬ε€§η™Ύη§‘ε…¨ζ›ΈοΌˆγƒ‹γƒƒγƒγƒ‹γ‚«οΌ‰, makes MDX dictionaries and long entries standard features, and fixes several popup problems reported on Discord: the header now follows the entry you are reading, you can move between entries with Alt+wheel, and the lookup count no longer shifts the frequency tags.

🧠 Much less memory for big libraries

With Jitendex and Pixiv Full installed (measured on Chrome 152, macOS arm64):

  • Dictionary entries are paged from disk on OPFS. The engine heap after a restart drops from 698 MB to 68 MB. Lookups return identical results, import speed is unchanged, and a lookup's median round trip rises by only 0.4 ms. Settings β†’ Advanced β†’ Memory β†’ Dictionary entries lets you choose Automatic, Read from disk or Keep in memory. Automatic is the default and needs no reimport. (#475)
  • Disabled dictionaries no longer occupy memory. Hachidori still checks them at startup, but reads their entries on demand, so disabling Pixiv Full drops the heap after a restart from 604 MB to 121 MB. (#478)
  • IndexedDB hosts no longer duplicate every dictionary file. On GameSentenceMiner/Electron, and on Chrome without OPFS, large files stay as Blobs instead of being copied into JavaScript: 591 MB β†’ 3 MB outside the engine. (#480)
  • The single-thread engine runs in its own worker. Without shared memory, lookups and imports no longer block the document that plays audio and talks to Anki. (#481)

πŸ“š Importing dictionaries

  • Imports ZIPs that store entry sizes after the data. Archives from streaming ZIP writers, such as the Nipponica encyclopaedia shared on Discord, failed with archive entry sizes disagree between headers. They now import, and archives that are actually forged are still refused. (#494)
  • Large imports recover and explain failures. An out-of-memory failure while staging a dictionary no longer appears as a bare WASM exception. The error names the file, the stage that failed, and what to try (memory, storage quota or access). One failed file no longer stops the rest of the batch. (#476)
  • MDX dictionaries and long dictionary entries are standard features. Add dictionaries always accepts .mdx with its .mdd files. Proverbs, titles and other entries longer than the scan length are always found, and dictionaries without long keys behave as before. Both leave Experimental features. (#483)
  • Import from a linked browser. A browser linked through Settings β†’ Sharing can install a dictionary ZIP on the host. SubMiner and GSM character dictionaries no longer need a manual import on the host every time. (#479)

πŸ“– A popup that follows your reading

  • The header follows the entry you're reading. As you scroll or move with Alt+↓, the pinned headword and reading switch to that entry, for example from 明ζ—₯/γ‚γ—γŸ to 明ζ—₯/あす. The Anki, audio and Note buttons in the header act on that entry too. (#493)
  • Alt+wheel moves between entries. Holding Alt and scrolling over the popup steps one entry at a time, as in Yomitan. Both bindings can be changed in Keybinds. (#489)
  • The lookup count no longer moves the frequency tags. "Looked up N times" has its own place, so the frequency tags and definitions stay still when the count arrives. (#492)
  • A clearer header setting. Toolbar position is now Headword and toolbar position, and its hint says that Automatic puts the headword at the bottom when the popup opens above the word. Choose Top to keep it at the top. (#487)
  • Definitions in dictionary order by score. In Jitendex, 青タン now lists "bruise" before the hanafuda meaning, as Yomitan does. (#473)

🎨 Bee's theme

  • Even spacing for Anki, audio, Note and custom buttons; long dictionary names are truncated with the full name in a tooltip; Back sits at the upper left with a visible focus ring. (#466, #471)
  • Frequency metadata wraps on its own line, All comes before saved dictionary groups, and More actions closes on Escape and returns focus to the button that opened it. (#471)

πŸƒ Anki

  • {frequencies} writes a Yomitan-style list (one <li> per value, with dictionary aliases), so note types that expect that format show it correctly. (#470)
  • {popup-selection-text} keeps line breaks when you select several definitions. (#465)
  • NHK pitch tables are no longer clipped on the left. (#470)

πŸ› οΈ Under the hood

  • Removed the obsolete owner-only accessibility review gate; accessibility labels, contrast checks and screenshots remain part of every popup change. (#467, #468)

Full changelog: 0.2.2...0.2.3

Packages

  • *-chrome.zip: the Chrome package, also submitted to the Chrome Web Store.
  • *-source.zip and *-SHA256SUMS.txt: the matching complete source and the
    checksums of every package above.

Don't miss a new hachidori release

NewReleases is sending notifications on new releases.