Docker-based sync backend for the Anki app (afrima/anki-sync-server, the official Rust sync server). Supports multiple independent accounts per instance, the repo's multi-instance pattern, port collision avoidance, Caddy wiring, and update/fresh/cancel reinstall detection. No Authelia gate — this is a raw sync API the Anki client talks to, not a browser session, so a forward_auth portal in front of it would just break every sync request; SYNC_USER1/SYNC_USER2/... is its own auth boundary. Companion services/anki-sync-server.md covers client setup (Desktop, AnkiDroid, AnkiMobile) and the Quizlet import/export walkthrough. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014DyceEVVeQ33EeS6C1PDv5
3.9 KiB
Client setup — pointing Anki at this server instead of AnkiWeb
Every client below needs the Sync URL and one of the accounts shown higher up in this README. Do this on every device you want synced — a client still pointed at AnkiWeb won't see collections synced here, and vice versa.
Anki Desktop (2.1.66 and newer)
- Preferences → Network
- Tick "Self-hosted sync server"
- Paste the Sync URL into the field that appears
- Sync → log in with one of the accounts above
Anki Desktop (older than 2.1.66)
There's no GUI field yet — set an environment variable before launching Anki instead, then sync normally:
# Linux/macOS
export SYNC_ENDPOINT="https://your-sync-url/"
anki
# Windows (Command Prompt)
set SYNC_ENDPOINT=https://your-sync-url/
anki.exe
Upgrading Anki to 2.1.66+ is the easier long-term fix — do that if you're setting this up for anyone who isn't comfortable with environment variables.
AnkiDroid
Settings → Advanced → Custom sync server, then enter the Sync URL and log in with one of the accounts above (AnkiDroid 2.16+; update the app if this option isn't there).
AnkiMobile (iOS)
Settings → Advanced → Custom Sync Server, same as AnkiDroid — enter the Sync URL and log in.
First sync on each device
The very first sync from a device that already has a local collection will ask whether to upload local data or download from the server — pick upload from whichever device has your real collection, and download on every other device, or you'll end up with two different collections that never merge.
Importing your existing Quizlet sets
This server only handles syncing already-existing Anki collections — it doesn't import anything itself. Quizlet import happens once, locally, in the Anki desktop app, before your first sync:
- In Quizlet: open the set → Export → choose the plain-text /
tab-separated format (Quizlet's export dialog lets you pick the delimiter
between term and definition, and between rows — tab and newline are the
Anki-friendly defaults) → copy the exported text or download it as a
.txt/.csvfile. - In Anki Desktop: File → Import, pick the file (or paste the text
into a
.txtfile first if you copied it to the clipboard). - Map the two columns to Front and Back in the import dialog, pick or create the deck and note type, and import.
- For math facts or other simple front/back cards, the Basic note type is enough. For more complex cards (extra example fields, images, audio, cloze deletions), switch the note type in the import dialog to a template with more fields, or convert cards afterward — Anki's own built-in note types (Basic, Basic (and reversed card), Cloze) cover most of what Quizlet's own card types can do.
- Sync from this device once the import looks right, so the imported deck becomes the copy every other device downloads.
Exporting back out (Anki → Quizlet or anywhere else)
File → Export, choose "Notes in Plain Text" and pick the deck — this produces the same tab-separated format Quizlet's own import expects, so the round trip works in both directions.
Why spaced repetition here actually reschedules failed cards
Anki's scheduler (FSRS, the default since recent Anki versions) tracks a per-card memory-strength estimate and schedules the next review right before you'd be expected to forget it. Answering "Again" on a card doesn't just requeue it for later the same session — it lowers that card's estimated strength, which shortens every subsequent interval for it until you've proven you know it again, so a card you keep failing gets shown far more often than one you consistently get right. This is scheduling logic inside the Anki client itself; this sync server only stores and syncs the resulting review history, it doesn't change how reviews are scheduled.