The New And Improved List Of API and Third Party Apps

Nah, just let it be outdated.

I am thinking of writing a script / web app, for sorter; so that anyone can use.

Discourse (WaniKani Community) has an API to output JSON - No webscraping - The New And Improved List Of API and Third Party Apps I am not sure about authorization part, though.

Thanks for helping maintain the list!

I already did this for most scripts when I cleaned up the list a couple of months ago :eyes: Though I kept WKOF as Wanikani Open Framework because I felt like “Wanikani” was very much part of its identity


I agree. Alphabetic at least makes it easier to find, and in my opinion easier to peruse as well


If so, WaniKani/WK should be removed, in order to easily sort alphabetically.

If something is not sorted, like WKOF, why bother removing WaniKani/WK?

Broken scripts should be replaced, or removed if no actual script can be found. If buggy scripts (have unfixed bug reports) are somehow kept, there should be some notice.

Found it. It exists after all and my memories did not betray me. It’s KunOn+ and is in the “outdated Scripts” section, which is why it didn’t catch my eye initially.


Curious on whether you’ve got it to work or any bug reports?

Anyway, I’ve come to agree that scripts should be sorted alphabetically, and WK/WaniKani removed, unless WK/WaniKani is a part of its identity (and WKOF isn’t not the only such name).

Nonetheless, for Outdated sections, anything with unfixed bug reports should be moved down; and having users, despite some tolerable bugs, should be moved up.

1 Like

Yep, it works. I was not happy with how the script forgot to concatinate the strings to say 部首の名前 and just says 名前. I edited the script to add the の and to concatinate the string so it says the full thing:

Script editied to say the whole thing
// ==UserScript==
// @name        WK Custom Review Question (KunOn+)
// @namespace   WK_CustomQuestion
// @description Changes the text of the Review or Lesson Quiz question. Specifies ON or KUN reading for Kanji. Options to have the text in English or Japanese.
// @author      hoovard
// @include*
// @include*
// @include*
// @include*
// @version     0.4.3
// @license     Do what you want with it (Preferably improve it).
// @grant       none
// ==/UserScript==
// Version 0.4.3 applies to Reviews and Lesson Quizzes.

// Language options
// English "en", Japanese "ja"
var strLang = "ja";

// Tested on the following:
// Firefox 35.0.1 and Chrome 39.0.2171.95 (64-bit), Linux Mint 17.1 Cinnamon 64-bit
// Firefox 35.0.1 and Chrome 40.0.2214.115 m, Windows 8.1 64-bit

// Thanks to Rui Pinheiro (LordGravewish) for the original script 
// and to Ethan for the idea to use MutationObserver to detect changes in the DOM.

// Vars to compose the replacement question string
var strKanji;
var strRadical;
var strVocab;
var strMeaning;
var strReading;
var strVocabReading;
var strOn;
var strKun;
var strName;

// Translations
switch (strLang)
	case "en":
		strKanji = "Kanji";
		strRadical = "Radical";
		strVocab = "Vocabulary";
		strMeaning = "Meaning";
		strReading = "yomi";
		strVocabReading = "Reading";
		strOn = "on'";
		strKun = "kun'";
		strName = "Name";
	case "ja":
		strKanji = "漢字の";
		strRadical = "部首の";
		strVocab = "単語の";
		strMeaning = "意味";
		strReading = "読み";
		strVocabReading = "読み";
		strOn = "音";
		strKun = "訓";
		strName = "名前";

// Variable to save and check against the previous contents of the jStorage item
var objSavedCurrentItem;

// Review or Lesson Quiz. jStorage objects are different.
bIsReview = ($(location).attr('href').indexOf("review") != -1);

// Code from Stack Overflow to detect changes in the DOM. 
// (
var observeDOM = (function(){
    var MutationObserver = window.MutationObserver || window.WebKitMutationObserver || window.MozMutationObserver,
        eventListenerSupported = window.addEventListener;

    return function(obj, callback){
        if( MutationObserver ){
            // define a new observer
            var obs = new MutationObserver(function(mutations, observer){
                if( mutations[0].addedNodes.length || mutations[0].removedNodes.length )
            // have the observer observe for changes in children
            obs.observe( obj, { childList:true, subtree:true });
        else if( eventListenerSupported ){
            obj.addEventListener('DOMNodeInserted', callback, false);
            obj.addEventListener('DOMNodeRemoved', callback, false);

// Callback function observing the 'question-type' div 'h1' element
var observeMe = $('#question-type h1')[0];
observeDOM( observeMe ,function(){ 
    var objCurItem;
    if (bIsReview) {
		objCurItem = $.jStorage.get("currentItem");
	} else {
		objCurItem = $.jStorage.get("l/currentQuizItem");
    // Make sure that the currentItem has changed before updating. 
    // Otherwise you will respond to your own DOM changes.
    if (objCurItem != objSavedCurrentItem) {
		objSavedCurrentItem = objCurItem;
		var strQuestionType;
		if (bIsReview) {
			strQuestionType = $.jStorage.get("questionType");
		} else {
			strQuestionType = $.jStorage.get("l/questionType");
		var strItemType = "";
		var strReadingType = "Reading";
		// Compose the string elements to be sent into the h1 element
		if ("kan" in objCurItem)
			// Kanji
			strItemType = strKanji;
			if (strQuestionType == "reading") {
				if(objCurItem.emph == "onyomi")
					strReadingType = strKanji + strOn + strReading;
					strReadingType = strKanji + strKun + strReading;
			} else {
				strReadingType = strKanji + strMeaning;
		else if ("voc" in objCurItem)
			// Vocabulary
			strItemType = strVocab;
			if (strQuestionType == "reading") {			
					strReadingType = strVocab + strVocabReading;
			} else {
				strReadingType = strVocab + strMeaning;
		else if ("rad" in objCurItem)
			// Radical
			strItemType = strRadical;
			strReadingType = strRadical + strName;
		// replace the contents of #question-type h1
		switch (strLang)
			case "en":
				$('#question-type h1').html(strItemType + ' <strong>' + strReadingType + '</strong>');
			case "ja":
				$('#question-type h1').html(strReadingType);

So in itself, the script always ran perfectly fine, it just wasn’t fully finished I think. This script version as posted by a commenter however doesn’t work at all. The script as provided on , perfectly fine.

1 Like

Created a GitHub write-up for the fixed script and released it on Greasyfork for convenience.

1 Like

Hi guys! I haven’t used Wanikani in a reeeeaally long time, and I’m picking it up again. I’ve noticed that some scripts that I used to have are now outdated.

I’m specifically looking for the one where you’re allowed to make mistakes/typos and still get through. Is there a similar script? I tried looking through the list, but I didn’t see one. Maybe I missed it…


1 Like

You want Double Check


Thank you Kumi! Reliable as always~

1 Like


I think you can add the Python CLI client I made.

It works for both reviews and lessons. I have been using it a lot.

I use it mostly that way.

wanikani-cli reviews --hard --mnemonics --autoplay
1 Like

You can add it yourself where you see fit, anyone can edit the first post

1 Like

Thanks. I added a CLI section under computer apps. Since technically it should run with any computers that can run python 3.9.


Is there a script that lets me see item information on the dashboard just by hovering over it? It’s a feature in the custom immersion script, but I can’t use that one since it’s not compatible with all the other dashboard scripts I’m using.


1 Like

have you tried

1 Like

Oh snap! Didn’t know that was a feature when I was reading it’s description! Thanks so much ! This is why you’re the GOAT here.
Last question: Do you know if there’s a review re-order script that lets me review all radical/kanji first across all levels and then Vocab?

I explained the issue I was having here if you cared to see why (because maybe there’s another solution):

This script allows you to create highly customizable reordering presets. For your requirement, the following preset should do what you asked for:

{"preset":{"name":"Radicals+Kanji before Vocab","selected_action":"0","available_on":{"reviews":true,"lessons":false,"extra_study":true,"self_study":false},"actions":[{"name":"First all radicals and kanji","type":"filter","filter":{"filter":"item_type","item_type":{"radical":true,"kanji":true,"vocabulary":false}}},{"name":"Then all vocab","type":"freeze & restore"}]}}

You can copy and paste this preset into the Reorder Omega settings dialog (in the tab “Presets”, click on an entry in the “Presets List” and then hit CTRL+V). During reviews, you can then select the “Radicals+Kanji before Vocab” preset in the bottom left.


I’m not sure how Reorder Omega handles the active queue. Since WaniKani randomizes which of the ten reviews in the active queue it shows, I expect that in the worst case you might still get asked 9 kanji/radical reviews after the first vocab review comes up (but maybe Reorder Omega already prevents this – I don’t know). If you want to avoid this, you could instead use the following preset to just get the radicals and kanji:

{"preset":{"name":"Radicals+Kanji","selected_action":0,"available_on":{"reviews":true,"lessons":false,"extra_study":true,"self_study":false},"actions":[{"name":"Only radicals and kanji","type":"filter","filter":{"filter":"item_type","item_type":{"radical":true,"kanji":true,"vocabulary":false}}}]}}

After finishing this review session, you should be left with a queue full of vocabulary items (unless you got new kanji/radical reviews in the meantime). Just start a new review session and select “None” as preset to go through all vocabulary reviews.

1 Like

Try Item Inspector Not only it displays information by hovering over items but you can customize both the information displayed and the item list.

Wait a second, this script is GODLY, omg.

Of course @Kumirei made it xD

Unfortunately I only have 0 Rad 5 Kanji 40 Vocab in queue now but later tonight I’ll have a lot more, to be able to test how it works with the active queue! I can update you when I find out in case you’re curious (Which I’m assuming probably not since Kumirei made it and didn’t discuss that conflict anywhere from the little I’ve seen so far). 1 last question… since I now know that this godly script exists…

Is there a way to add an ADDITIONAL filter so that it prioritizes Kanji/Radicals of the current level first (and then the rest in descending order)? And then restoring the rest of the vocab?
Or it could be a modification to the second one you created in case there is an issue interacting with the active queue
Just so I can always prioritize reviews that’ll help me level up first in case I’m short of time: I am trying to get to 60 ASAP (or at least 30-40 so reading can be a lot easier). Since I have a long way to go, something like that would help a LOT over the next few months- only reason I’m asking for help since I’d hate to ask someone to do more work than needed for me :sob: Much appreciation though!

Maybe other people who are also trying to prioritize leveling up as fast as possible could also use that preset !

I am aware that this could also lead to a backlog of overdue reviews, but I don’t mind spending pockets of hours throughout the week when I do have time to knock it out. I just work a lot on random days >.<

Sorry I’m still newish with scripts here and can’t contribute myself yet. The community here is definitely great though!

1 Like

Oh wow, this script is a lot more involved and has more features than the dashboard plus!
I have a question (since I’m a math geek and looked at the leach value formula)

If hypothetically, I got an item wrong 15 times in a row at App. 1, will it continue to be a leach until it’s burned? I’m still learning terminologies here. But definitely think I’ll consider using yours in conjunction with leach trainer eventually.


Edit: As long as it doesn’t interfere with any of the other dashboard scripts I’m using. Unfortunately had to stop using the immersion one for that reason >.<

I’m assuming this will replace my dashboard plus