Updates to Lessons, Reviews, and Extra Study




(It’s a joke, people!)

While viscerally familiar with the principle, this is the first I’ve heard of Hyrum’s law, and I don’t remember seeing that particular XKCD. I’ve always referred to the principle as “no feature, intended or otherwise, goes unpunished.”

1 Like

I did already submit a feature request for this last year - but I can do so again linking to this thread if you think that’ll make any difference.

I totally understand that features need to be prioritised to follow internal plans, but it does seem like a very obvious (and I imagine not overly complicated?) feature to be missing - especially if you’re making changes that will make it impossible for scripts to implement. Especially as, imo, not having the randomness will mean “overfitting” to one voice/pronunciation, making it much harder to later recognize the same word in the real world when it’s not said in exactly the same tone/pronunciation.
The ideal would be to have even more voice variations - obviously I’m not asking for that huge time/effort investment, but, as WaniKani does already have at least these two voices, it really does seem a waste to force the user to choose only one and not allow random alternating.

Again, really appreciate your openness with these changes! :smiley:

1 Like

I have just deployed an updated version of the header where the height of the header is no longer fixed.

To mitigate the header height jumping about I made all font sizes the same (as opposed to Kanji and Radicals being one font size, and Vocabulary being another). I may still tweak the sizes further and welcome your feedback

@Rrwrex, @HotAirGun Does this help resolve the issue you had with the header height?


I just had a look in our feature request backlog, and we have a similar request about a year ago. I have linked to your feedback in the feature request.
No need to send another request.


I’ve had no issues since you implemented the auto scroll behavior.

(Though I still wish the most important info, meanings/readings, wasn’t literally the lowest contrast text in the expanded section. :slight_smile: )

1 Like

Just making sure you saw this.

1 Like

I see the answer is that you can specify as many lessons as you want in the URL and that it’s for a single batch. So that answers these questions.

@tofugu-scott Can you answer this question though? This will greatly influence how I rewrite my script (or if I bother at all). Right now I modify the list of lessons after the lesson page has loaded by manipulating the jStorage data. I need to know if there’s a way to do something similar (even if just for a single batch at a time) after page load or if I need to directly call a custom URL for the specific lessons I want. I tried doing custom URLs and that did work, though only with an actual page load. Just doing history.pushState didn’t have an effect (not surprisingly).

In your other post you mentioned a lot of events and HTML-based data for the quiz portion, but is there anything similar for the lesson portion?

I have just released WaniKani Queue Manipulator 0.7 which adds lesson queue manipulation. It’s not well tested, but it should be somewhat usable. You can add your filter at any time (while on the lesson page, but also while on any other page – in that case your filter will be applied immediately before visiting the lesson page in case the user is navigating from a Turbo page):

let fiveKanjiFilter = wkQueue.on(`lesson`).addFilter(q => q.filter(i => i.subject.subject_category === `Kanji`).slice(0, 5), {subject: true});

Currently, the lesson queue reordering has a wkof dependency. I plan to remove it at some point in the future.

EDIT: Oh, and you can change the lesson batch size with

wkQueue.lessonBatchSize = 15;
1 Like

Like literally any page or just any Turbo page? Does it just remember all past filters or does it reset somehow?

The contents of the addFilter delegate is just for a single batch, right? The current version of Lesson Filter does a filter once for the whole set, which would certainly be the preference.

Same with the wkQueue.lessonBatchSize. Does it remember that or does the change just apply to the current lesson batch or set of lessons?

How do you plan to remove that? Just by doing the API call yourself or somehow completely remove the dependency on the API?

The way lessons currently work is that each subject has their own URL e.g. /subjects/<id>/lesson, so once you are on that page there is no changing the current subject without visiting a new URL. The queue parameter is used to set the next and previous links (which is just standard links with an href) on the first and last slides where appropriate. The location hash is used to select the intermediate slides within in the subject. i.e. next link on a slide will have a hash href or an href that points to the next subject. The beauty of this, is that reloading a page puts you back on the same subject and the same slide for that subject. The queue is also used to create a list of subject links you see at the bottom of each lesson page, e.g. ?queue=1-2-3-4-5 will show 5 subjects in that order as I have mentioned above. If you want a different order then the easiest way is to navigate to a new page (or the same page) but with a different queue.

You probably don’t want to play around with history.pushState as you will not set the appropriate data that is used in restoration visits. It is really worth reading the documentation for Turbo, but if I was to reorder the lessons I would probably take the approach of determining the lesson order and then using Turbo.visit(newLocation) (see Application Visits). If you visit the same subject id with a different queue the user might not even notice the queue changed, unless they were on the wrong first subject, in which case you will need to inject a link somewhere else so the user navigates to wherever you want them to go.

Hopefully that is helpful and gets you on your way. I am not sure reordering lessons makes as much sense when you can just construct a URL that gives you lessons for subjects in which ever order you want and for which ever batch size you need (although I may not understand completely what it is you are trying to do, so please excuse my ignorance). You may want to use the API to determine the list of subjects available for lessons, here is the relevant section


Thanks for the detailed explanation!

It might just be a matter of what page is easiest to work with. Users of my script are used to specifying what lessons to do on the lesson page itself. Though as you suggested, I may change that and just work with pure URLs.


I just realized I missed this. It serves as a way to know how you’re doing yourself, and a way to know what content from this review you need to take care of. The problem wit seeing that elsewhere is that it’s mixed with previous mistakes, which have had, already some time to simmer in my memory or might be close to a new review. The one you just failed can be “practiced” without getting in the way of the spaced repetition.


Thanks for the feedback. If I understand you correctly these sound like great ideas to improve extra study which is one of the thoughts for the future.

Well, yes, you can always put it elsewhere. It’s just that I think belongs here. It’s the summary of a review session. It gives you time to understand how you did, where are your problems and what you need to practice. I wouldn’t put it in an “extra” category. I would put it as a normal step of study. Do review, see how you did, know what you need to work on. It also improves the “gamification” of the system, I’m sure there’s other people, like me, who like to keep those percentages up, and use it as incentive to keep trying harder.


Just to add, the userbase for my Lesson Filter script largely consists of people who don’t like doing long runs of kanji lessons or long runs of vocab lessons all at once. For some, this allows them to start on a new level’s kanji while doing the previous level’s vocab in order to level up more consistently. For others (including me), this allows mixing easier items (vocab) in with harder items (kanji) to avoid being overwhelmed. Back when I first built it, this was basically the thing that stopped me from quitting and allowed me to actually finish WaniKani. Every day I would do 12 lessons, broken down into 3 kanji lessons and 9 vocab lessons.

Do you think WaniKani would ever consider making this a native feature? Basically, still allow the default option of “just do whatever’s next”, but with an advanced option of “do a set of lessons with the following number of radicals, kanji, and vocab”.


Just for clarity I was talking about the extra study section on the dashboard.

We will take your feedback onboard.

I don’t want to speculate to much here as I have a responsibility to not promise anything that may not happen. What I would suggest is, if you haven’t already, please submit your ideas as a feature request to hello@wanikani.com. This way they will be logged and dealt with accordingly.

The preview site is looking good however I came across an issue when testing yesterday:

Shift +Space isn’t working as expected when you view the information sheet for a failed item during reviews. This is new behaviour for the preview site compared to the current live version.


  1. Start reviews on preview site (https://preview.wanikani.com/subjects/review)
  2. Answer the first question incorrectly.
  3. Press F to show the information sheet.
  4. Reduce window height so that the vertical scrollbar is active.
  5. Press Space to ensure that the view isn’t at the top of the page.
  6. Press Shift +Space to try and scroll up the page.
1 Like

Thanks very much for the bug report. I have now fixed this issue and you should be able to test it out on preview.