AnkiWeb
- Rating
- 10 (👍 9 · 👎 1)
- Updated
- 2026-09-13
- Anki versions
- 25.09.4~
- Description language
- en
AnkiWeb addon 1809063985
Redesigns Anki's deck list, reviewer, and windows with collapsible subdecks, a sidebar, customizable themes, and per-feature toggles.
Open on AnkiWeb GitHub Ask about alternatives
active
| Min Anki | Max Anki | Updated |
|---|---|---|
| 25.09 | 25.09.4+ | 2026-09-13 |
Loading…
Replaces Anki's deck, overview and review screens with a themed dashboard featuring stats, heatmap, Pomodoro, habits, study modes, card previews and drag-and-drop deck nesting.
Replaces Anki's interface with a customizable dashboard showing stats, heatmaps, themes, deck icons, profiles, optional gamification, and opt-in social leaderboards.
Remembers the last reviewed deck and auto-scrolls to it in Anki's Deck Browser, with optional highlight and configurable retry settings.
Aggregates hierarchical deck statistics—cards reviewed, correct answers, percentages—with search, flag/ease filters, drill-down analytics, CSV export, and collapse/context-menu navigation.
Turns Anki into an all-in-one study workspace with planning, deadlines, sidebar tools, AI assistance, mind maps, Pomodoro, gamification, and themes.
Provides a lightweight, customizable theme for Anki 2.1.x using CSS/QT CSS, with color, font, and user styling options.
A from-scratch Anki UI redesign add-on. One cohesive thing you control, replacing Onigiri + a separate progress bar + a separate heatmap.
Home: https://anki.design · AnkiWeb: https://ankiweb.net/shared/info/1809063985
Requires Anki 25.09 or newer (min_point_version: 250900). Older
versions refuse to install it rather than half-working.
Anki renders the deck list, overview, and reviewer as Chromium web views.
Anki Design injects web/theme.css into them via the webview_will_set_content
hook, sets --rf-accent from config in <head>, renders the heatmap
server-side in __init__.py (from the revlog table) and appends it to the
deck browser, and drives a small reviewer progress-bar widget from Python.
No network calls, no bundled binaries — keeps AnkiWeb review trivial.
Internal CSS/JS identifiers use the
rf-prefix and__reforgeProgressbridge. That's a stable internal namespace, deliberately not renamed with the product, so a rebrand never risks breaking style/JS wiring.
| Path | Purpose |
|---|---|
__init__.py |
hooks, masthead + heatmap generation, progress, config |
web/theme.css |
the deck-homepage "study ledger" redesign |
web/heatmap.css / .js |
heatmap styling; scroll-to-newest + tooltip |
web/toolbar.css |
top toolbar redesign (flat full-width header) |
web/reviewer.css / .js |
progress bar |
config.json / config.md |
user-facing settings + their help text (every feature has a switch) |
colors.py |
hex helpers shared by the web injection and the Qt palettes |
manifest.json |
name, version, conflicts with rival add-ons |
build.py / Makefile |
produce dist/anki-design.ankiaddon |
web/logo.css / web/fonts/ |
the "anki.DESIGN" wordmark lockup |
Everything opinionated can be switched off from Tools → Anki Design Settings… (or the sidebar's Settings row); defaults are the current behaviour. Highlights:
Moving decks: drag a row onto another deck to nest it, drop it on the
top-level zone to un-nest it, or use Move to… in the deck's gear menu.
See config.md for the raw keys.
Each git worktree gets a fully isolated Anki: its own base directory, its
own addons21/ (so no add-on conflicts), and a unique single-instance key —
so multiple worktrees' Ankis run simultaneously.
Per worktree, once:
make dev # symlink this worktree into its isolated base + hot-reload
make run # launch THIS worktree's Anki (runs alongside the others)
Then:
web/*.css, web/*.js, or the heatmap HTML.__init__.py (Python logic / hooks) still needs a restart of
that instance — Anki imports add-on Python once at startup.Real data (optional):
make seed # copy your real collection into this worktree's base
make run on a fresh base starts with an empty collection (fine for
theme/CSS work; the heatmap is empty). make seed rsyncs your real
Anki2/ collection in (media + add-ons excluded, so it stays light).
Do not sync a seeded instance — it shares your AnkiWeb account and
syncing a copied collection can push unwanted merges upstream.
Showcase data (no real collection involved):
make demo # launch the default (full) variant
make demo VARIANT=single # or VARIANT=three / VARIANT=full
make demo-rebuild VARIANT=full # rebuild a variant's cache (slow, one-time)
make demo-stop # quit the current variant's demo Anki
make demo runs against a separate anki-design-demo-<variant> base
under Anki2-dev/. Three variants are defined in scripts/seed_demo.py:
single — one Spanish deck (~450 cards, ~200 due today).three — Spanish + Japanese N5 + Med pathology (~420 cards, ~190 due).full — all 17 decks (~1100 cards, ~440 due). Default.Each variant has a golden cache at ~/Library/Caches/anki-design-demo/<variant>/
that's shared across worktrees — seed once anywhere, launch instantly
everywhere. make demo restores from cache in ~1s; if no cache exists yet
it falls through to demo-rebuild automatically. Re-run demo-rebuild only
after you change scripts/seed_demo.py and want the cache regenerated.
Cleanup:
make demo-clean — drop a variant's live base (keeps the cache).make demo-clean-cache — drop a variant's cache.make demo-clean-all — nuke every variant's cache + base.Your real Anki2/ collection is never opened by any of these — the
seeder refuses any target inside your real base.
How parallelism works:
make run launches Anki's bundled venv binary directly with
-b <isolated base> and a per-worktree USER env. Anki keys its
single-instance lock on the username, so a unique USER lets instances
coexist; open -a Anki would only refocus the running one.~/Library/Application Support/Anki2-dev/<NAME> and persist
between runs (profile/settings stick).Other targets:
make undev — remove this worktree's symlink + .devmode (keeps the base).make clean-base — delete this worktree's isolated base entirely..devmode is present; make build / .gitignore exclude .devmode, so
shipped installs never start it.make dev NAME=foo / make run ANKI=/path/to/.venv/bin/anki override
the addon name / Anki binary.make build # -> dist/anki-design.ankiaddon
The .ankiaddon is a zip with files at the root; __pycache__, meta.json,
.git, and dev tooling are excluded automatically.
dist/anki-design.ankiaddon.human_version in manifest.json, update
CHANGELOG.md, make build, re-upload to the same listing.min_point_version to manifest.json. Find the current number from Anki's
debug console: from anki.utils import point_version; point_version().MIT — see LICENSE.