Release · 2026

langpop — a Japanese and English tutor built as a knowledge graph, in Pop-11

langpop teaches Japanese to Western learners and English to Japanese test-takers. The curriculum is a Prolog graph of items and their prerequisites, the student record is Pop-11, and the whole tutor runs in one process with no server, no model and no network. Two weeks after opening it covers N5 through N2 reading, plays audio, runs timed drills and charts your last four weeks.

News · · 3 min read

langpop is a new language tutor from IoTone, opened on October 30. It teaches two languages: Japanese for a Western learner, with a teacher called Aoi, and English for a Japanese test-taker, with Mr Hill. It runs on our Poplog port and has taken well over a hundred commits in its first two weeks.

The curriculum is a graph

Most language apps are a deck of cards and a schedule. langpop keeps two separate things:

  • What it knows about the language is a Prolog graph: items, and the order they have to be taught in.
  • What it knows about you is a set of numbers that changes every time you answer a question.

The prerequisites do the teaching. A word requires the kana that spell it, so the first words open when your kana are solid, not on a date a syllabus picked. Leave the prompt empty and the tutor asks the next thing you are ready for and weakest at. Ask :why about any item and it shows its working: what the item requires, where the fact came from and where you stand on it.

Aoi>
  い    ->  o
  Close. Look again at the shape.  That is お -- the two are confused constantly.

Aoi> :why hi_ka
  か  (grapheme, preschool, own(kana))
    ka
    missing(hi_a)  missing(hi_i)  missing(hi_u)  missing(hi_e)  missing(hi_o)
    belief 0.0 on channel read (mastery is 0.8)

Both ladders begin below the bottom of the official one, because that is where learners begin. Someone with no hiragana is not a beginner at N5. They are below it, and langpop has a pre-school rung for them.

No server, no model, no network

There are two front ends over one engine:

  • One process. The graph is Prolog, the student record and terminal interface are Pop-11, and nothing leaves the process.
  • One protocol. The same engine behind JSON-RPC, where the terminal becomes a client with no privileges a phone app would not have.

There is no language model anywhere in it. Every answer you give is appended to a plain-text journal, one line per answer, so the audit of your progress is a file you can read with grep.

What is in it

A fresh clone holds 1,309 items: hiragana, katakana and the first fifty words, enough for several weeks. Importing the freely available JMdict and KANJIDIC2 reference files takes eight commands and brings the Japanese ladder to 6,212 words and 1,023 characters, N5 through N2 reading in full. The English track is written for a reader of Japanese and includes loanword traps and the sound contrasts that Japanese speakers find hardest.

The last two weeks added:

  • Sound. --audio renders a level with the system voice, so listening questions have something to play. English and Japanese are both covered.
  • :drill, timed practice that counts for nothing.
  • :progress, the last 28 days as one mark a day:
  studied    ··········█······█··██·█████   9 of 28 days
  right      ··········▇······█··▁█·██▇█▇   94%  ↑ up 2 points on the week before
  • Things to print. A kana chart on one page, and a booklet to fold.
  • Per-language progress. Reaching N5 in Japanese says nothing about your English, so each language keeps its own rung and its own reviews.

Try it

curl -fsSL https://raw.githubusercontent.com/IoTone/poplog/master/tools/install-skill.sh | sh
git clone https://github.com/IoTone/pop-11-langpop
cd pop-11-langpop
LANGPOP_POPLOG="$HOME/.local/share/pop11-skill/poplog" ./langpop --user you --lang ja

The single-process tutor works with the current Poplog release. The JSON-RPC server and client need a library newer than the latest binary release, so for now those need a Poplog built from source. langpop checks at startup and tells you which it needs.

The README is candid about limits: the graph is short of words above N2, and the speaking check only measures one thing so far. Source and design notes are on github.com/IoTone/pop-11-langpop.

releasepop-11poplogprologlanguage-learningjapaneseenglishjlptknowledge-graph