uzusio162 downloadsReview your Spaced Repetition flashcards in a small always-on-top popup that appears at regular intervals. Companion plugin for the Spaced Repetition plugin.
日本語版 README はこちら / Japanese README
Review your Spaced Repetition flashcards without opening Obsidian: a small always-on-top popup appears at regular intervals, shows one due card, and lets you reveal the answer and rate it (Again / Hard / Good / Easy) right in the popup.
Ratings are written through the Spaced Repetition plugin's own review pipeline (the same code path as its review modal), so your scheduling data stays fully consistent — no re-implementation of SM-2 or FSRS.
Tested with Spaced Repetition v1.15.4.
Space), then rate the card with the four buttons (or keys 1–4).main.js, manifest.json, and styles.css from the latest release.<your vault>/.obsidian/plugins/sr-popup-review/.| Interaction | Effect |
|---|---|
Click Show answer / press Space or Enter |
Reveals the answer in place |
Click Again / Hard / Good / Easy / press 1–4 |
Saves the rating and closes |
Click ✕ / press Esc |
Closes without saving anything |
| Click ⋯ (next to ✕) | Options menu: open the card's source note at its line (the popup stays open), pause until resumed, or snooze popups for 30 min / 1 h / 3 h |
| Drag the header | Moves the popup |
The rating buttons use the labels you configured in the Spaced Repetition plugin. When Spaced Repetition's "Show next review time in the review buttons" setting is on, each button also shows on a second line the interval that rating would schedule (e.g. (3d)). Card text is rendered as Markdown, and cloze deletions are masked exactly as in the normal review modal.
You can also open a popup at any time with the command "Show review popup now" (via the command palette).
You can also set a global shortcut (in settings) to show a popup with a key combination, even while Obsidian is in the background — Obsidian itself does not come to the foreground, and the popup takes keyboard focus so you can answer with the keyboard right away.
Turn on Show the popup on a local page (in settings) to mirror the popup, exactly as it appears, to a local web page (http://127.0.0.1:27280/ by default). Open that URL in OBS as a browser source, in a browser window you share, or on another monitor — the page follows the popup live (showing the answer, rating, the menu, scrolling, resizing) and stays transparent while no popup is open. The popup is scaled to fill the page by width or height, whichever runs out first (anchored top-left), so in OBS you can add a Browser source with the URL at any size and simply resize it on the canvas.
To pause automatic popups, click the bell icon in the status bar (bottom right), use the "Toggle popup pause" command, or flip the toggle in settings — all three control the same switch. The manual show-popup-now command still works while paused.
| Setting | Default | Description |
|---|---|---|
| Language | Obsidian's default | Interface language of this plugin (English / 日本語) |
| Pause popups | off | Temporarily stop automatic popups (also toggled by the status-bar bell icon and a command) |
| Global shortcut | not set | System-wide key combination that shows a popup even while Obsidian is in the background |
| Show the popup on a local page | off | Mirrors the popup to http://127.0.0.1:<port>/ (OBS browser source, screen sharing). Port (default 27280) and a copy-URL button appear when on; the row shows whether the page is running or the port is in use |
| Popup interval (minutes) | 120 | How often a popup may appear (minimum 5) |
| Do not disturb | on, 01:00–09:00 | Toggle plus a time range with no popups; supports ranges across midnight |
| Auto-close (seconds) | 90 | Closes an untouched popup (nothing is written); 0 disables |
| New cards | Up to a daily limit (10/day) | Never-reviewed cards are mixed in with due cards in proportion to how many of each are available (with a daily limit, only today's remaining allowance counts): don't introduce / up to a daily limit / unlimited |
| Fixed share of new cards | off | When on, a new card is picked with the share set below whenever both new and due cards are left (instead of in proportion to how many of each are left). Shown unless new cards are off |
| Share of new cards | 67% | Slider (5–95%) shown when the fixed share is on: 67% ≈ 2 out of 3 popups. Once the daily limit is reached, only due cards are shown |
| Randomize deck order | on | Pick each popup card from a random deck (weighted by card count) so every card has a roughly equal chance; off follows Spaced Repetition's sequential deck order |
| Skip popups during fullscreen apps | on | Postpones popups while Windows reports a fullscreen app or presentation (games, slideshows, F11); the card appears within a minute after fullscreen ends. Windows only |
| Deck filter | All decks | All decks or Only listed decks |
| Deck list | — | Dual-list picker: move decks between available and target with the add/remove buttons (double-click works too); a target deck also covers its subdecks. Empty target list = all decks |
| Show deck name | on | Shows the deck path in the popup header |
| Check shortly after startup | off | Runs one check ~15 s after Obsidian starts |
The settings tab also shows whether the Spaced Repetition integration is working, and why not if it isn't.
"Today" (today's review count and the daily new-card limit) follows Spaced Repetition's Start of day setting. In SR 1.15.4 a bug makes that setting ignored unless hour, minute and second are all non-zero, so to switch days at 5 AM use something like 05:01:01, then restart Obsidian.
Spaced Repetition's own review sequencer — identical writes to pressing the buttons in its modal (scheduling comment, sibling burying, load balancing, FSRS/SM-2, all of it).127.0.0.1 (this computer only). Nothing is sent outside your computer. Other apps on the same computer can read the card currently shown and images inside your vault through that page.npm install
npm run dev # one-shot build into ../sr-popup-test-vault (see esbuild.config.mjs)
npm run watch # same, but watch mode
npm run build # typecheck + production build to repo root
Development builds are emitted directly into a dedicated test vault (C:/work/sr-popup-test-vault). Never point dev builds at a real vault — this plugin writes to SR scheduling data.
MIT