Files
ubuntu-post-install/services/anki-sync-server.md
T
Claude 92f8503d48 Add anki-sync-server service — self-hosted Anki flashcard sync
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
2026-09-09 14:07:31 +00:00

83 lines
3.9 KiB
Markdown

## 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)
1. **Preferences → Network**
2. Tick **"Self-hosted sync server"**
3. Paste the Sync URL into the field that appears
4. **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:
```bash
# 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:
1. **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`/`.csv` file.
2. **In Anki Desktop:** **File → Import**, pick the file (or paste the text
into a `.txt` file first if you copied it to the clipboard).
3. Map the two columns to **Front** and **Back** in the import dialog, pick
or create the deck and note type, and import.
4. 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.
5. 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.