Terminal-first WaniKani client
Project description
wkler
Terminal-first WaniKani client focused on real review sessions that submit to the official API.
Features
wkler reviewsTextual session flow- Meaning + reading question handling by subject type
- Romaji-to-hiragana reading normalization (
wanakana-python) - WaniKani API client with pagination and rate-limit retry handling
- Local cache and review log with
sqler(SQLite) - Failed review submission queue backed by
qler(persistent across restarts) - Queue management commands:
wkler retry,wkler queue list,wkler queue retry - Lessons command for dogfooding:
wkler lessons(--start N/--all) - Appearance themes:
default,retro,colorfulwith in-sessionF2cycle - Logler-compatible JSONL logs + dogfood feedback loop (
wkler feedback) - Interactive onboarding + settings page (
wkler setup,wkler settings) - Default home launcher TUI (
wkler) with tabs/buttons for common actions - Dedicated crash JSONL logging (
WKLER_CRASH_LOG_PATH/crash_log_path) - Rotating loguru-backed JSONL logs for runtime and crash events
Quickstart
- Install dependencies:
uv sync --group dev
- Run the interactive setup guide:
uv run wkler setup
This writes ~/.config/wkler/config.toml (or WKLER_CONFIG_PATH) and lets you set:
- API token
- Theme
- Reading mode
- Default lesson count
- DB/log/crash paths
- Optional settings:
export WKLER_THEME="retro" # default|retro|colorful
export WKLER_DB_PATH="~/.local/share/wkler/wkler.db"
export WKLER_LOG_PATH="~/.local/state/wkler/wkler.log"
export WKLER_CRASH_LOG_PATH="~/.local/state/wkler/wkler-crash.log"
export WKLER_READING_INPUT_MODE="always" # always|auto
export WKLER_LESSON_BATCH_SIZE="5" # 1-100
- Launch the app home screen:
uv run wkler
Then pick actions from tabs/buttons (Study, Config, Maintenance).
Useful commands:
uv run wkler sync
uv run wkler settings
uv run wkler lessons --list-limit 20
uv run wkler lessons --start 5
uv run wkler lessons --start-default
uv run wkler reviews
uv run wkler doctor
uv run wkler feedback --note "reading mode label is confusing" --area ux --level warning
uv run wkler feedback --tail 20
uv run wkler retry --limit 50
uv run wkler queue list --status pending --limit 20
uv run wkler queue retry --all
Notes
- This client uses
POST /reviewsto register reviews that count. - WaniKani
GET /reviewsis deprecated and intentionally not used. qleris currently consumed as a local editable dependency (../qler) for dogfooding.- Current focus is dogfooding real review and lesson workflows before PyPI readiness.
- Logs are JSONL and logler-friendly; example:
logler llm search ~/.local/state/wkler/wkler.log --query "dogfood feedback" --tail 20logler llm search ~/.local/state/wkler/wkler.log --level ERROR --tail 50
- Runtime failures show concise actionable errors in terminal instead of full Python tracebacks.
- Inside
wkler settings, use radio/button controls for choices and clickSave/Discard + Back/Back. - Settings page is scrollable and keeps section content visible on smaller terminal heights.
wklerdefaults to a stealth-black visual style for lower-visibility terminal use.- Inside
wkler settings, useF8to jump to feedback input and press Enter to log a dogfood note. - When launched from
wklerhome, returning from settings/setup takes you back to home instead of exiting the app. - Home launcher keyboard shortcuts:
1/2/3switch tabs,rreviews,usetup,gsettings,ddoctor, arrows switch tabs,qquits.
Development
uv run pytest
Status
Alpha — daily dogfooding in progress.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file wkler-1.2026.3.0.tar.gz.
File metadata
- Download URL: wkler-1.2026.3.0.tar.gz
- Upload date:
- Size: 26.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b84078be42a48b72f5e0e71f698a6ec17f9baffab04398a79c14d950b0288205
|
|
| MD5 |
c4dac8d82f3e2e7d6083c938e5ca67ec
|
|
| BLAKE2b-256 |
930456cc4474a44cb9863933fefab928e47046dc98feafd88c1a0966c305e250
|
Provenance
The following attestation bundles were made for wkler-1.2026.3.0.tar.gz:
Publisher:
pypi.yml on gabu-quest/wkler
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
wkler-1.2026.3.0.tar.gz -
Subject digest:
b84078be42a48b72f5e0e71f698a6ec17f9baffab04398a79c14d950b0288205 - Sigstore transparency entry: 1067820351
- Sigstore integration time:
-
Permalink:
gabu-quest/wkler@afa9ef0eb201d1a03a08606ae95289a073672855 -
Branch / Tag:
refs/tags/v1.2026.3.0 - Owner: https://github.com/gabu-quest
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
pypi.yml@afa9ef0eb201d1a03a08606ae95289a073672855 -
Trigger Event:
push
-
Statement type:
File details
Details for the file wkler-1.2026.3.0-py3-none-any.whl.
File metadata
- Download URL: wkler-1.2026.3.0-py3-none-any.whl
- Upload date:
- Size: 35.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
78d59ff8fe03df83980c976879b51fffcb3327458a2832f2e19e1804cb914826
|
|
| MD5 |
eecbec50d263d99954dda858a1aede40
|
|
| BLAKE2b-256 |
a43e555fbaffe5f679cab037ca31225a6a422c3f5898e303ad2eb30ba4660b4e
|
Provenance
The following attestation bundles were made for wkler-1.2026.3.0-py3-none-any.whl:
Publisher:
pypi.yml on gabu-quest/wkler
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
wkler-1.2026.3.0-py3-none-any.whl -
Subject digest:
78d59ff8fe03df83980c976879b51fffcb3327458a2832f2e19e1804cb914826 - Sigstore transparency entry: 1067820415
- Sigstore integration time:
-
Permalink:
gabu-quest/wkler@afa9ef0eb201d1a03a08606ae95289a073672855 -
Branch / Tag:
refs/tags/v1.2026.3.0 - Owner: https://github.com/gabu-quest
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
pypi.yml@afa9ef0eb201d1a03a08606ae95289a073672855 -
Trigger Event:
push
-
Statement type: