lain75 downloadsOrganize Japanese vocabulary notes into gojuon folders from a reading property.
Local-first tools for organizing Japanese language-learning notes in Obsidian.
Kotoba Vault turns a reading property into predictable gojūon
folders, keeps Obsidian links intact while notes move, and offers a dry-run-first
migration CLI for existing Markdown vocabulary collections.
Current release: 0.1.2.
Large language-learning vaults can become slow to browse when many notes share one folder, and kanji filenames cannot be filed by pronunciation without explicit reading metadata. This project treats the reading as the source of truth:
---
reading: あたためる
aliases:
- 温め
---
The note is placed in Japanese/Words/あ/ because its normalized reading starts
with あ. Dakuten, handakuten, small kana, and katakana are normalized to the
matching base gojūon folder.
Every public example and regression fixture is synthetic. The repository does not contain or require a learner's notes, books, subtitles, audio, or video.
reading property changes.reading, kana filenames, bracket readings, or kana aliases.reading properties without rewriting note bodies.--apply is supplied.main.js and manifest.json from the latest release..obsidian/plugins/kotoba-vault/ in your vault and copy both files
into it.https://github.com/saegusa1996/kotoba-vault.BRAT installs the same release artifacts used by Obsidian's Community plugin directory. Back up a test vault before evaluating automatic file moves.
The default layout is:
Japanese/
├── Inbox/
└── Words/
├── あ/
├── い/
└── ...
Always preview first:
python tools/migrate_word_notes.py --root "/path/to/vault/Japanese/Words"
Save the plan for review:
python tools/migrate_word_notes.py \
--root "/path/to/vault/Japanese/Words" \
--json migration-plan.json
Apply only after resolving reported collisions:
python tools/migrate_word_notes.py \
--root "/path/to/vault/Japanese/Words" \
--apply
Back up the vault before any bulk migration.
For an all-or-nothing review gate, add --fail-on-unresolved. See
Migration safety for the complete preflight
workflow.
To reproduce a non-personal scale test, use the synthetic vault generator.
pnpm test
python -m unittest discover -s tests -p "test_*.py"
For a contributor build, run pnpm install --frozen-lockfile followed by
pnpm build.
See Getting started, Architecture, Compatibility, Synthetic scale testing, Privacy and copyright, and the Roadmap.
Issues and pull requests are welcome. Read CONTRIBUTING.md and CODE_OF_CONDUCT.md first.