Skip to content

Character data

Every method returns entries of the same shape. This page describes each field, what its values mean, and when it can be empty.

Fields#

{
literal: '日',
meanings: ['day', 'sun', 'Japan', 'counter for days'],
onyomi: ['ニチ', 'ジツ'],
kunyomi: ['ひ', '-び', '-か'],
stroke_count: 4,
grade: 1,
jlpt: 4,
freq: 1
}
FieldTypeDescription
literalstringThe character itself. Every entry has a unique one.
meaningsstring[]English meanings. Empty for 2,761 entries.
onyomistring[]On (Sino-Japanese) readings, in katakana. Empty for 960 entries.
kunyomistring[]Kun (native Japanese) readings, in hiragana. Empty for 3,309 entries.
stroke_countnumberNumber of strokes, from 1 to 34.
gradenumber | nullSchool grade or official list. See Grade.
jlptnumber | nullJLPT level, old scale. See JLPT level.
freqnumber | nullNewspaper frequency rank. See Frequency.

Grade#

grade shows where a character sits in the Japanese government's kanji lists. The value 7 isn't used.

ValueListMeaningEntries
1–6Kyōiku kanjiTaught in elementary school, grade 1 to 61,006
8Jōyō kanjiThe rest of the general-use list, taught in secondary school1,130
9Jinmeiyō kanjiApproved for personal names684
10Jinmeiyō variantsName kanji that are variant forms of jōyō kanji177
nullNoneNot on any official list10,111

Grades 1–6 and 8 together make up the 2,136 jōyō (general-use) kanji. To get them all, use search({ grade: { min: 1, max: 8 } }).

JLPT level#

jlpt uses the old four-level scale that the Japanese-Language Proficiency Test used before 2010. Higher numbers are easier. This is the opposite of today's N1–N5 order, where N5 is the easiest. The current test has no official kanji lists, so the mapping below is only approximate.

ValueMeaningEntries
4Easiest. Roughly today's N5103
3Roughly today's N4181
2Roughly today's N3 and N2739
1Hardest. Roughly today's N11,207
nullNot on a JLPT list10,878

Frequency#

freq ranks the 2,501 most-used characters by how often they appear in Japanese newspapers. 1 is the most frequent (日). Every other entry has null. Sort by it to put common characters first:

const byFrequency = (a, b) => (a.freq ?? Infinity) - (b.freq ?? Infinity)
Kanji.search({ jlpt: 4 }).sort(byFrequency).slice(0, 10).map(k => k.literal).join('')
// '日一国会人年大十二本'

Readings#

  • onyomi entries are in katakana, and kunyomi entries are in hiragana.
  • A hyphen marks a reading that only appears as part of a word. A leading hyphen means a suffix, as in for 日. A trailing hyphen means a prefix, as in for 生. 281 entries have one.
  • Kun readings don't mark okurigana (the kana that follow the kanji), so for 生 is stored as one string.
  • A reading can appear more than once in the same list.

The romaji search matches against these lists, hyphens included.

Source and license#

The data comes from KANJIDIC2, compiled by Jim Breen and the Electronic Dictionary Research and Development Group (EDRDG). kanji.js includes a subset of its fields. KANJIDIC2 is available under the Creative Commons Attribution-ShareAlike 4.0 license. If you redistribute the data, follow the EDRDG licence terms.