Export WaniKani kanji list in order?

Hi all!

I’m loving Wani Kani so far, been doing it for a month or two, it’s fantastic for learning to recognize kanji and remember readings.

That said, I also like knowing how to write kanji, and for that I’m using an Android app called “Kanji study” which is pretty great. But I’d like to sync the kanji I’m learning there with the kanji I’m learning on WaniKani.

Kanji Study lets you import ordered lists of kanji from a text file. So I wonder if it’s possible somewhere to export the ordered list of kanji used in WaniKani so I can import them and practice writing in this other app?

Thanks very much!


afaik, Anki has a wanikani deck. You could check if this app might import it.


I use the app called Ringotan, it’s nice, because it supports WK by default

If you have WKOF installed (if not, go to here), you can just open up your developer console (Ctrl+Shift+I on chrome), and paste in the following piece of code:

wkof.ready("ItemData").then(() => {
    wkof.ItemData.get_items({wk_items: {filters: {item_type: "kan"}}}).then((kanji) =>
        console.log(kanji.map((k) => k.data.slug).join()))

It results in something like this:


Hey! I’m the developer of Ringotan mentioned above, and was pinged because of the above post.

Just to try and give you the sales pitch: Ringotan was developed from the ground-up to teach you how to write Kanji. Unlike “Kanji Study”, it has support for spaced repetition to help you retain that knowledge. And it supports Wanikani’s kanji-order out of the box. I also have future plans for syncing directly with your Wanikani account, so new kanji are only introduced in Ringotan once you’ve learned them in Wanikani.

It’s free-to-keep for early adopters, and has both iOS and Android versions. Try it out!


There a couple tools on kitsun.io I published you may find helpful.

There is the WaniKani Known Kanji & Vocab Filter which filters known vocab and kanji. It can either be used to filter out known vocabulary or filter in items (such as kanji writing). A link how to use is in the entry. It can be use to parse other decks and the Reader tool on Kitsun as well.

It can be used in conjunction with Kanji Writing Deck if you want to apply the filter. There are hyperlinks to WK entries for mnemonic reference (and Jisho). Recommend keyboards for writing are in the entry. Contains WK kanji plus additional the addition Jouyou kanji (which coincides with the Lost Level 61-70 deck). The deck is in order of N level and tagged by such which I think its a good indicator of the most frequent, I preferred N order but the filter application could be used side by side with WK

There is sister deck to the above Kanji Reading & Meaning Deck where meanings and reading can be tested, again can be applied to the filter along with hyperlinks for refererence. Not for writing obviously but can used in a number of ways for extra study or study by N level instead of WK level

I recently posted this, not the deck itself but if you want to use the Complete Jouyou Kanji Writing deck which can be imported, here is the Layout to use it with productive entry via kanji writing within Kitsun. The deck maker did a great job on this content for learning to write vocab. Instruction how to use it are in the entry.

Item Inspector has a word export feature that can be used to export lists of kanji. Do not confuse with the other export feature that export to csv format for spreadsheet, anki and kitsun.

1 Like

Thank you so much, everyone! I will check out the various recommendations. I have already installed Ringotan and look forward to testing it!

1 Like

This is exactly what you need, done within 2 minutes.

The Kanji Study app is so brilliant. Don’t forget to check out the KLC graded reading addon, well worth the price.

1 Like

Recently Kanji Study got an SRS update. It’s in Beta so in Google Story you simply have to sign up for the Beta and download the update.

I will check out you app too ofcourse :slight_smile:


I just tested it and for writing purpose, your app is awesome. Very userfriendly.

Kanji Study has tons of options and the more I use it the more excited it makes me. But that is also the downfall for new users, even with all the tutorials in can be quite overwhelming in the beginning.

I think both apps suplement eachother nicely and both are must haves.

1 Like

Thank you, Warrie, that worked great!

Wow, just 5 minutes in with Ringotan, and I absolutely love it. Well done!

1 Like

I’ve managed to export the kanji for level 1 by adding “, level: 1” to your filter string. But could you perhaps suggest a modification to your script which would similarly export all kanji but keep level 1 kanji on line 1, level 2 kanji on line 2 etc up to level 60? Thanks!

I think this does that:

wkof.ready("ItemData").then(() => {
    wkof.ItemData.get_items({wk_items: {filters: {item_type: "kan"}}}).then((kanji) => {
        const map = new Map();
        kanji.forEach((x) => map.set(x.data.level, [...(map.get(x.data.level) ?? []), x.data.slug]));
        console.log([...map.entries()].sort((a, b) => a[0] - b[0]).map(([a, b]) => b.join(", ")).join("\n"))
1 Like

Awesome. Once commas and whitespace are removed, you have an import file for Chase Colburns Japanese Kanji Study app that allows synchronizing the app’s Kanji learning sequence to that of Wanikani :slight_smile: Thanks a lot.

For that just remove the comma and space from the ", " leaving it as just a pair of quotation marks

1 Like

Yes, I just found out :slight_smile: Thanks. Do you have an idea how to save the output directly to a text file instead of sending to the console?

Unless this needs to be ran every Wednesday at 5.04 pm to the tee, it’s quicker for you to just copy it out than for me to write logic for it

Nvm, fed it to chatgpt to do the grunt work:


wkof.ready('ItemData').then(() => {
    wkof.ItemData.get_items({ wk_items: { filters: { item_type: 'kan' } } }).then((kanji) => {
        const map = new Map();
        kanji.forEach((x) => map.set(x.data.level, [...(map.get(x.data.level) ?? []), x.data.slug]));
        const outputText = [...map.entries()].sort((a, b) => a[0] - b[0]).map(([a, b]) => b.join('')).join('\n');

        // Create a Blob containing the output text
        const blob = new Blob([outputText], { type: 'text/plain' });

        // Create a URL for the Blob
        const url = URL.createObjectURL(blob);

        // Create a link element to download the Blob as a file
        const link = document.createElement('a');
        link.href = url;
        link.download = 'output.txt';
        link.textContent = 'Download Output';

        // Append the link to the document

Thank you.