The problem
Plenty of language learners review vocabulary in Anki and read or watch in Migaku. Migaku tracks which words you know, so it can highlight the new ones, but it can’t see the years of progress sitting in your Anki decks. Getting it across meant marking words by hand, thousands of them.
Migaku has no public API for this. The only way in was the one its own app uses.
Mapping a private protocol
I used LLMs to work through Migaku’s obfuscated JavaScript, then confirmed what I found against its network traffic until I had the whole sync protocol mapped:
- Auth: Firebase sign-in, with the token refreshed as it expires
- Identity: the device IDs Migaku expects each client to send
- Payloads: LZO-compressed, in the shape the server accepts
- Versioning: a handshake that rejects a write made against stale data
How it works
The extension reads your cards through AnkiConnect and decides each word’s status from its review history: KNOWN once its interval reaches 21 days, LEARNING before that. It then pushes them to Migaku in batches of 2,000. One click, and a word list that took years to build is there.
Built for the failure cases
Syncing into a service you don’t control means it has to cope when things go wrong, without damaging anyone’s data:
- Token refresh, and retry with backoff when a request fails
- Recovery from version conflicts, by re-reading and re-applying
- A resumable cache, so an interrupted sync picks up where it stopped
- A decompression check on every payload before it’s sent, so nothing malformed reaches the server
It’s on the Chrome Web Store and used by more than 200 people.