blursedperf27 downloadsCreate and study Markdown flashcards using SM-2 spaced repetition with an integrated Pomodoro focus timer.
An Obsidian plugin that combines Markdown-based Spaced Repetition (SM-2) flashcards with an integrated Pomodoro focus timer. Study smarter with focused intervals, automatic rest reminders, and spaced recall scheduling directly inside your vault.
I created this suite of Obsidian plugins and the DoomEsque theme so that I can be 100 percent certain there are no network calls or traffic: everything runs 100 percent offline, so I can use Obsidian for my notes in open-book law exams.
scripts/offline-audit.mjs, which fails on any network API (fetch, XMLHttpRequest, WebSocket, requestUrl, ...).The suite:
Write flashcards naturally in any note without disrupting your writing flow:
Single-line cards:
Question :: Answer
Bidirectional cards (generates both forward and reverse flashcards):
Mitochondria ::: Powerhouse of the cell
Separators need a space on both sides and must sit outside [...], (...) and inline code, so inline fields such as held:: appeal allowed or [court:: HL] are never turned into cards. A line may start with a tag (#torts Duty of care :: ...).
Multi-line cards (? separator):
What is the time complexity of binary search?
?
$O(\log n)$ because the search space is halved at each comparison.
Q/A block cards:
Q: What is memoization?
A: An optimization technique that stores the results of expensive function calls.
Cloze deletions (fill in the blank). Every deletion number in a paragraph becomes one card; deletions sharing a number are hidden together, and the rest of the paragraph stays visible as context:
Negligence requires {{c1::a duty of care}}, {{c2::breach}} and {{c3::damage::what kind of harm?}}.
The text after a second :: is a hint shown in the blank. Highlights can be clozes too (one card per ==highlight==): turn on Highlights are cloze deletions, add cloze: true to a note's properties, or tag a paragraph #cloze. Use Wrap selection in cloze deletion to wrap selected text in the next free number, or (same card as the last cloze) to add it to the latest card.
Automatic case cards for studying law. Describe a case on one line (the format Inline Schema Expander writes):
Donoghue v Stevenson #case-law [court:: HL] [year:: 1932] [ratio:: A manufacturer owes a duty of care to the consumer]
or in a case note tagged case-law in its properties, with fields in its properties or on Field:: value lines (Ratio:: ..., - **Held**:: ...). Recognised fields are ratio (or principle, rule), held (holding, decision, outcome), issue, facts, court, year, citation and case/name. Each filled-in field becomes a card (What is the ratio of Donoghue v Stevenson?, What was held in...?, Which court decided...?), and ratio and facts are also reversed (Which case established this principle?). The case name is the text on the line, then the case field, then the heading above the line, then the note's name. Empty fields are skipped, so a freshly expanded template makes no cards until you fill it in. Change the tag or turn off reverse cards under Case cards in settings.
Flexible deck organization: Organize cards into decks using frontmatter (deck: Biology), heading tags (## Genetics #deck/Genetics), or inline tags (#deck/Algorithms).
History that follows your notes: Review history is kept when you rename or move a note or folder, and when you edit a card's question.
Quick-create modal: Capture cards on the fly via the command palette, ribbon button, or selected note text (Create flashcard from selected text).
Optimize recall with the proven SuperMemo-2 spaced repetition algorithm:
1), Hard (2), Good (3 / Space), or Easy (4).<10m, 1d, 6d, 10d).🍅 25:00 · 🗂️ 12 due). Left-click opens the study view; right-click toggles timer start/pause.scripts/offline-audit.mjs, which fails on any network API (fetch, XMLHttpRequest, WebSocket, requestUrl, workers, dynamic import(), ...), dynamic code (eval, new Function), raw HTML injection, or remote CSS (@import, non-data: url()).), raw HTML that loads resources (<img>, <iframe>, <video>, ...) and embeds of other notes are neutralised, so studying a card never makes a network request. Embeds of local images, audio, video and PDFs still show..obsidian/plugins/pomodoro-flashcards/data.json.eval() or unsanitized innerHTML. Card contents are rendered securely through Obsidian's native MarkdownRenderer.manifest.json, main.js, and styles.css from the latest GitHub Release.pomodoro-flashcards inside your vault's .obsidian/plugins/ directory.manifest.json, main.js, and styles.css into that folder.# Install dependencies
npm install
# Run unit tests
npm test
# Build production bundle
npm run build
MIT © 2026 blursedperf