[Android] Flaming Durtles - Android app with offline support

I saw your mock-up, and in that form I’m not going to put it in. The idea is okay, but it’s not very obvious that the number is tappable to start a session. There would have to be something extra to indicate the ‘clickability’ I think. I’ll keep it in the back of my head (and my suggestions list), but as is, that’s a no I’m afraid.

Well spotted :wink: It’s sorted by unlock date instead of burned date, to be precise. I have no idea why I built it that way, since that doesn’t make any sense… It’ll be fixed in 1.5.0.

It is, but I’ve been hesitant because I don’t want the app to slurp precious data allowances or battery power unasked. Currently, while the app can finish syncing in the background, it’ll only start it when the app is opened, i.e. when the user actively interacts with it. I’ve put it on the list.

Hm, kinda silly it’s not in there already… Sure, it’s on the list.

When I tested it a few days ago, the site didn’t do the toast when going (for example) Guru I → Guru II, only Apprentice → Guru and similar. It’s easy to do either way, but I thought I was replicating the site’s behaviour :slight_smile:. Maybe I wasn’t paying attention… The toast that’s in there now is what I could whip up real quick before 1.4.0. I’ll work on it some more, including your suggestions.

When syncing your lesson/review results, Flaming Durtles will report the time you completed the item, i.e. the moment you correctly answered the last question for that item. The app remembers that timestamp and uses it for the sync. Exception: if the sync happens within 5 minutes of completing the item, then the app doesn’t specify a timestamp at all, and tells the API “just use what you think the current time is”. This is a workaround for when your device’s time is a bit out of sync with the API servers, since the API doesn’t accept reviews with a timestamp in the future.

Yep, 'fraid so…

Great app, I’ve been using it a lot lately. Is there a way to add an option to resurrect the burn item from self study quiz if the quiz is failed?

No, not right now. The reason is that the API right now doesn’t have an endpoint for resurrecting items. It’s only possible by asking the user for username+password and then simulating a web login and going from there. And I really don’t want to go that route :slight_smile:

If the WaniKani devs decide to add new endpoints to the API, I will certainly look into using them.


thank you for this great app! i will be using it exclusively from now on. one wierd thing i noticed: when i try to type using the japanese input it does not show any suggestions and i cannot convert to katakana.
ofc i could use the normal input but it would be really cool to have the japanese one too.

The app doesn’t try to force a specific type of keyboard on you, so it’ll just give you whatever keyboard you have configured. The only thing I do is specify that the answer input field should not allow auto-suggest or auto-correct, and should not store any history. This is to make sure that the keyboard doesn’t end up accidentally giving you inappropriate hints. If that’s the only thing that gets in the way for you, then you can disable that in settings: “Allow keyboard auto-correct for lessons/reviews”.


I don’t suppose there’s an easy way to add pitch info for vocab :thinking: like this userscript:
[Userscript] WaniKani Pitch Info

It’s the only thing I miss from the web version. If you make the code open source at some point, I’d be happy to contribute to it.

1 Like

Hi, Pixel3 user here. love it and love quiz mode!

yep, that was it. now i can practice the japanese input. thank you!

Thank you very much for making this app and for taking into account user feedback that well!

I am very much in favour of keeping with your philosophy of a simple and clear design. I really like it so far. The amount of customization available in the settings is great and it has all worked perfectly so far.
This is really a huge improvement over what we had on Android until now.

Keep up the great work!

1 Like

I’ve been using the app for a few days now - I really like it! Being able to do reviews offline is so useful for me. I’m also loving the snappy performance and all the extra script-inspired features you put in!

I’ve had a few occasions where I’ve done reviews on my laptop and the app doesn’t always realise. So, I’ll get notifications for reviews I did hours and hours ago, or sometimes in review sessions I’ll get presented with already completed reviews mixed in with new reviews I need to do. When I then get those already completed reviews correct, the app then tells me I’ve burned them, regardless of which SRS level they’re actually at. This is nothing that isn’t fixed by manually forcing the app to sync, but it’s a little annoying. I’ve told the app it can access network whenever (using data or wifi) so I just expected that it wouldn’t need any intervention or thought from me to keep in sync! I don’t know if there’s anything that can be done about this on my side or yours?

One small request: the app shows 答え in the input box for all reviews, whether it’s asking for a reading or meaning. WK only has 答え in the input box when it’s asking for a reading, and something like “Your Response” when it’s asking for a meaning, so the language they’re using matches the language they want us to respond in. Any chance of changing the app to match WK here? I keep having to retype answers because I see 答え and automatically write out the reading, even when I’m being asked for the meaning :sweat_smile:

Thanks for all your hard work and sharing this with us!

In the next update (1.6.0) there will be a feature for background syncing. That should cover situations where you do reviews somewhere else and a while later you open the app.

However, if you go from your laptop to the app in less than an hour, this will still be an issue, since syncing is only done once per hour unless you specifically tell it to sync now. This is not something that I can fix because I can’t listen for push notifications from the API to tell me that you have done reviews elsewhere. So the app can be an hour behind at any time.

The background sync can help a bit here, but if you go from laptop to app in a short period of time, you’ll have to do a quick sync manually.

Will do. I must have missed this since I don’t do reviews on the site much at all anymore…

1 Like

Is there also an easy way to be able to add synonyms during reviews or after? Atm I have to switch to browser to do that, and it’s a bit inconvenient.

Whenever you’re looking at a specific subject (in lessons, reviews, self-study or just browsing the subject database), you can tap “My notes…” in the menu. There you can see and modify your own study materials for the subject, i.e. meaning note, reading note, and synonyms. They’ll be synced to WK automatically.

1 Like

Super :+1: just what I needed. Thanks.

In the mean time, Google has approved release 1.5.0. Next is 1.6.0, which will have background sync and some UI implementation improvements which should make the UI snappier and more responsive on older/slower/cheaper devices.

It turns out that the notifications are annoying a couple of people since they apparently don’t stop making noise when Do Not Disturb is turned on… For now I have added an option to set the notification priority from “default” to “low”, which should shut them up completely. For the proper, definitive fix I need to do more experimentation and testing, since so far I am unable to reproduce the problem on my devices. Hopefully I’ll have a solution in place for 1.6.0. One thing I’m testing now is to give the notifications the category “recommendation” instead of “reminder”, maybe that will help with DND.

Version 1.5.0, 2019-08-27:

  • Sort recently burned items by burned date instead of unlock date.
  • Redo level progress bars to be faster and more accurate (for items that drop back down to Apprentice after passing).
  • Also show SRS stage up/downgrade toast for changes within Apprentice or within Guru.
  • Improve looks of the SRS stage up/downgrade toast.
  • Improved SRS stage up/downgrade logic to match server-side logic better.
  • Improved level-up handling (for real this time, I hope…).
  • Add setting for low-priority (silent) notifications.
  • Add optional SRS indicator during reviews.
  • Add subject level to subject info dump.
  • When choosing the next question in a session, increase the chances of choosing an item that has already had at least one question answered. This keeps the number of items to go when wrapping up a session low.

When wrapping up and one has answered both questions for all the items (I use 1x1 mode) and have not yet answered the current item, can you make it so that it just finishes? Right now you have to do the one extra item.


expect me to give u lots of feature requests in the near future. this is like the only thing i missed from iOS. maybe this time i dont get in the dislikings of the app developer by actually behaving myself

anyway: please add jitai support please
and i would also love to just be remined of the correct intonation after being quizzed a word. should be able to be inspired by this script: [Userscript] WaniKani Pitch Info
might want to prefetch them for offline support tho

also about the background tasks. i saw the flushing option and that it deletes made progress? does that mean that you only keep any updates in memory? i have used offline apps before on long mountain hiking tours and without a permanent storage of progress this would probably mean that my phone would go empty or else. so please make syncing independent of the perseverance of background tasks. also why are there so many background tasks even before i enter my api key?

also i might prefer it if you give me some updates about how the syncing is progressing. it took my phone 5 minutes before anything happened at all

1 Like

When I built it I had a very good reason for building it that way, i.e., that is deliberate, but I don’t remember what that reason was… But a lot has happened in the code since then, I’ll see if I can change that.


This one depends on what fonts I can include in the app legally. Android doesn’t do the whole ‘system-wide font installation location’ thing, so if I want to support other fonts I need to include them in the app and they must come with a free license that allows me to do so. This is easier said than done, font licensing is historically a bloody nightmare.

So, I’m putting the question back to you: do you know of a useful set of Japanese fonts that are free to use and free to redistribute as part of an app? If I can get those, this will be (reasonably) easy to do.

It’s on the list, but as you say, I have to be able to do proper offline support, I don’t want to have partial offline support that suddenly leaves out details compared to online. So that’ll take a while.

No, all progress is kept in a database in device storage, including records of all background tasks that need to be executed when the device comes back online. So if the app crashes, is force-stopped, or if your device restarts you lose nothing. The app will just continue where you left off, as if nothing happened. What the flushing option does is just remove all of those records of background tasks from the database. So if you still have un-synced review results, they will then be lost.

I’m not sure what you mean by this? If you are online and there are tasks to do, you see the ‘## background tasks’ in the app bar that should be steadily counting down. And if there is an error while syncing, you should see a big red thing on the dashboard that tells you so. For each individual task in that background queue, there is not a lot I can do to report progress, I think.

1 Like

That’s because it has to do an initial sync that pulls in a complete database of subjects and your complete assignment record. When it starts for the first time, the app knows nothing about any of the WK subjects or your history with them, so right from the start it will schedule a few background tasks to get that going. Those tasks take extra long because it’s a lot of data to process, but it’s necessary for offline support. Once this is done, only incremental updates are pulled in, and that is a lot faster. That’s why on that initial sync I put a “please wait, this will take a while” message, but that’s only once.