8BitDo Zero 2 Controller Support

AnkiWeb addon 1005118618

Lets you review Anki cards with a Bluetooth gamepad by mapping its buttons to actions like flip, grade, undo, and sync, all remappable in the config.
AI-generated summary; may contain mistakes.

review-flowshortcutsaccessibility

Open on AnkiWeb GitHub Find alternatives

AnkiWeb

Votes
5 (๐Ÿ‘ 5 ยท ๐Ÿ‘Ž 0)
Updated
2026-08-31
Anki versions
2.1.54~
License
AGPL-3.0 (from the GitHub repository)
Virus scan
No ClamAV match A match does not prove malware. No match does not prove that the code is safe.
Languages
Python, JavaScript, JSON
Description language
en

Maintenance

active

  • Last update or commit: 2026-09-03 (59 days before the snapshot).
  • Commits in the last year: 5.
  • Issues: 0 open, 0 closed.
  • Pull requests: 0 open, 0 merged.

Will it work on my Anki?

Version branches
Min AnkiMax AnkiUpdated
2.1.502.1.54+2026-08-31
History across monthly snapshots

Loadingโ€ฆ

Similar addons

Gamepad/Controller Mapper

Adds native gamepad support to Anki, mapping controller buttons and analog sticks to keyboard shortcuts, card actions, and smooth scrolling, with multi-profile detection, a modifier layer, and press-to-bind setup.

review-flowshortcutsaccessibility

3 votes 44% approval ๐Ÿ‘ 3 ยท ๐Ÿ‘Ž 0 Anki 2.1.1~ Updated 2026-10-04
AnkiGestureControl

Enables hands-free Anki reviews by using a webcam to detect head and hand gestures, with customizable gesture-to-action mapping, sensitivity settings, recalibration, and optional camera preview.

review-flowshortcutsaccessibility

1 votes 21% approval ๐Ÿ‘ 1 ยท ๐Ÿ‘Ž 0 โญ 1 Anki 2.1.1~ Updated 2025-12-10

Description

Review with a Bluetooth gamepad. No Karabiner-Elements, no input-monitoring permissions โ€” the controller is read through the Gamepad API inside Anki's own window, so nothing outside Anki ever sees your input.

Written for the 8BitDo Zero 2, but any controller the OS recognises as a gamepad should work.

Setup (8BitDo Zero 2)

  1. If the controller was previously paired in keyboard mode, remove it from your Bluetooth settings first (each mode pairs as a separate device).
  2. Power it on in gamepad mode: hold A + Start on macOS (LED blinks 3x per cycle), X + Start on Windows.
  3. Hold Select for 3 seconds, then pair it in your Bluetooth settings (it shows up as "Wireless Controller" in macOS mode).
  4. In Anki, press any button once โ€” browsers hide gamepads until the first press. A "Controller connected" tooltip confirms it.
  5. Later sessions: press Start to reconnect.

Default mapping

Based on Jesse Simon's 8BitDo-for-Anki layout (https://www.jessefsimon.com/8bitdo-controller-for-anki/): Y flips the card / answers Good, X = Again, A = Hard, B = Easy, L = Undo, R = Bury, Select = Decks, Start = Sync, d-pad left/right scrolls the card. Grade buttons on the question side reveal the answer first, and also step you from the deck list into a study session.

Everything is remappable in Tools โ†’ Add-ons โ†’ Config, including binding any keyboard shortcut (e.g. other add-ons' hotkeys) to any button. Pressing an unmapped button shows a tooltip with its config name, so setting up a different controller or mode is just pressing buttons and filling in the config.

Notes

  • Tested on Anki 2.1.54; uses only long-stable APIs, so newer versions are expected to work. Requires 2.1.50+.
  • The controller must be in gamepad mode, not keyboard mode.
  • Bug reports and source: https://github.com/ronald-luo/anki-gamepad

README

8BitDo Zero 2 for Anki (no Karabiner)

Anki add-on that maps the 8BitDo Zero 2 to reviewer actions. Written for Anki 2.1.54 (Qt 6.3.1 / PyQt 6.3.1 / Python 3.9) on macOS.

Available on AnkiWeb: https://ankiweb.net/shared/info/1005118618

Instead of pairing the controller as a keyboard and remapping keystrokes with Karabiner-Elements (which needs the Input Monitoring permission), the controller is paired in gamepad mode and read through the Gamepad API inside Anki's own webview. Nothing outside Anki sees it.

gamepad.js gets injected into Anki's pages, polls navigator.getGamepads() at 30 Hz, and forwards button presses to Python over the pycmd bridge. __init__.py maps them to actions via the add-on config. The d-pad works whether the current mode reports it as buttons or as an axis pair.

Install

From AnkiWeb: in Anki, go to Tools โ†’ Add-ons โ†’ Get Add-ons and paste the code 1005118618.

From source:

cp -R zero2_controller "$HOME/Library/Application Support/Anki2/addons21/"

then restart Anki. Or build a package to install via Tools โ†’ Add-ons โ†’ Install from file:

cd zero2_controller && zip ../anki-gamepad.ankiaddon __init__.py gamepad.js config.json config.md manifest.json

Controller setup (one-time)

  1. Remove any old keyboard-mode pairing from macOS Bluetooth settings (each mode pairs as a different device).
  2. Power on in macOS gamepad mode: hold A + Start (LED blinks 3x per cycle).
  3. Hold Select for 3 seconds, then pair with "Wireless Controller" in Bluetooth settings.
  4. In Anki, press any button once โ€” the Gamepad API hides controllers until the first press. A "Controller connected" tooltip appears.
  5. Later sessions: press Start to reconnect.

If macOS mode gives odd button numbers, try Switch mode (Y + Start) or Android mode (B + Start) and remap. Pressing an unmapped button shows a tooltip with its config key.

Default mapping

Follows Jesse Simon's layout:

8BitDo Zero 2 with the button mapping drawn on

(photo from Jesse Simon's post)

Control Action
Y (left) Flip card / Good
X (top) Again
A (right) Hard
B (bottom) Easy
L Undo
R Bury card
Select Deck browser
Start Sync
D-pad up h (hint reveal add-on)
D-pad down n (cloze one-by-one)
D-pad left Scroll down
D-pad right Scroll up

Grade buttons on the question side reveal the answer first, and also step deck browser โ†’ overview โ†’ study. Everything is remappable in Tools โ†’ Add-ons โ†’ Config, including arbitrary key:<x> bindings โ€” see zero2_controller/config.md for the full action list.

License

AGPLv3, same as Anki itself.