JAPANESE STUDY SYSTEMKOTOWA 词和
N5 — N1
READING CONTROL
Vocabulary collection7,811
Kanji collection2,383
SOURCE SELECTOR
Grammar collection0526
SILVER ERA · ことばを、少しずつ。
JLPT BANDN5 BEGINNER → N1 ADVANCED

Data & API

All data is free to use — including commercially — under CC BY-SA 4.0, with attribution to Kotowa, OpenJLPT and the upstream sources.

Download

LevelVocabularyKanjiGrammar
N5JSON · CSVJSON · CSVJSON · CSV
N4JSON · CSVJSON · CSVJSON · CSV
N3JSON · CSVJSON · CSVJSON · CSV
N2JSON · CSVJSON · CSVJSON · CSV
N1JSON · CSVJSON · CSVJSON · CSV

Spreadsheet or pandas? Every CSV loads straight from the CDN: pd.read_csv("https://kotowa.neofintrix.com/dataset/csv/vocab-n5.csv")

Anki decks

Ready-made Anki decks with furigana, example sentences and text-to-speech. Re-importing a newer version updates your cards and keeps your review history.

LevelVocabularyKanjiGrammar
N5⬇ 674 words⬇ 84 kanji⬇ 81 points
N4⬇ 630 words⬇ 169 kanji⬇ 98 points
N3⬇ 1,659 words⬇ 387 kanji⬇ 101 points
N2⬇ 1,778 words⬇ 398 kanji⬇ 123 points
N1⬇ 3,070 words⬇ 1,345 kanji⬇ 123 points

⬇ Everything in one deck (N5–N1)

Yomitan dictionary

See the JLPT level of any word or kanji right in the Yomitan ⬇ openjlpt-yomitan.zip, then import it in Yomitan settings → Dictionaries. When data is refreshed, use Dictionaries → Check for updates.

CDN (no install)

Fetch the dataset directly from this deployment:

const n5 = await fetch('https://kotowa.neofintrix.com/dataset/json/vocab/n5.json').then(r => r.json());

JavaScript / TypeScript

npm install git+https://github.com/AntaresGG/kotowa.git#main

import { getVocab, findWord, findKanji, searchVocab, getGrammar } from 'kotowa';
getVocab('N5');            // 674 words, fully typed
findKanji('日');           // { strokes: 4, radical: '日', onyomi: ['ニチ','ジツ'], words: [...] }
searchVocab('taberu');     // kanji, kana, romaji or English
getGrammar('N3');          // 101 grammar points

kotowa 食べる         # command-line lookup (also: kanji, grammar, quiz, random)

Python

uv pip install "git+https://github.com/AntaresGG/kotowa.git@main"

from openjlpt import get_vocab, find_word, search_vocab, query
find_word("食べる").meanings          # ['to eat']
query("SELECT word, reading FROM vocab WHERE level = 'N5' LIMIT 5")

SQLite

-- full-text search over words, readings, romaji and meanings
SELECT v.word, v.reading, v.level
FROM vocab_fts f JOIN vocab v ON v.rowid = f.rowid
WHERE vocab_fts MATCH 'weather';

Schema

Every file is validated in CI against JSON Schemas. See the README for field-by-field documentation.