Skip to content

Migrating From Obsidian Spaced Repetition

If you are coming from the Obsidian Spaced Repetition plugin, LearnKit automatically detects and converts your existing SR-format cards during sync. No manual reformatting is required.

LearnKit recognises three SR syntax styles and converts them into its canonical pipe-delimited format:

SR single-line basic and reversed cards share the same :: / ::: syntax that LearnKit uses as its preferred shorthand:

Paris::Capital of France

expands to:

Q | Paris |
A | Capital of France |
Paris:::Capital of France

expands to:

RQ | Paris |
A | Capital of France |

SR multi-line blocks use standalone ? (basic) or ?? (reversed) as a separator between question and answer:

What is the capital of France?
?
Paris

This is merged into What is the capital of France?::Paris before parsing and expands identically to the single-line form.

What is the capital of France?
??
Paris

This is merged into What is the capital of France?:::Paris and becomes a reversed card.

SR-style cloze deletions using ==…== are converted automatically:

The capital of ==France== is ==Paris==

becomes:

cloze::The capital of {{c1::France}} is {{c2::Paris}}

Hints and sequence numbers are also supported:

The capital of ==France==^[country] is ==Paris==[^1]
SR SyntaxLearnKit Equivalent
==text=={{c1::text}} (auto-numbered)
==text==^[hint]{{c1::text::hint}}
==text==[^1]{{c1::text}} (fixed group)
==text==^[hint][^2]{{c2::text::hint}}
  1. Write your SR-format cards as you normally would (or leave existing ones in place).
  2. Sync your vault — LearnKit’s sync engine pre-processes SR syntax before the main parser runs.
  3. Expand — on the first sync, SR shorthand lines are expanded to canonical pipe-delimited format (with Q |, RQ |, or CQ | headers and ^learnkit- anchors).

The conversion happens transparently. After sync your notes will contain LearnKit’s canonical format, and scheduling data is preserved.

Once migrated, LearnKit’s preferred shorthand for new cards is:

Card TypeShorthandExample
Basic::Question::Answer
Reversed:::Question:::Answer
Clozecloze:: / cq:: / CQ::cloze::The {{answer}} is here

The SR ? / ?? / ==text== syntax is only used during migration. For new cards, stick to ::, :::, and cloze::.

For full details on creating flashcards, see Creating Flashcards.

LearnKit’s parser intentionally skips certain lines to avoid false positives:

Lines that begin with #, ##, ### (up to ######) are never parsed as flashcards, even if they contain ::, :::, cloze::, ==text==, or standalone ? separators. Your section titles are safe.

Content inside fenced code blocks (``` or ~~~) is never scanned for cards. You can safely document LearnKit syntax inside code fences without creating accidental flashcards.

Lines that already contain LearnKit pipe-delimited headers (Q |, RQ |, CQ |, etc.) or ^learnkit- anchors are skipped by the SR pre-processor.

When :: appears between two words in running prose (e.g. email::address), it will be treated as a basic card. This matches Obsidian Spaced Repetition’s behaviour and cannot be distinguished from legitimate shorthand like synonym::antonym. If you have prose that accidentally triggers this, reword the line or wrap the :: in backticks.