zachmueller1k downloadsApply spaced repetition algorithms to everything in your vault.
Obsidian plugin to apply spaced repetition algorithms to everything in your vault.
Borrowing from Andy Matuschak's notes outlining such a practice, this plugin applies the main concepts of spaced repetition to writing. That is, using the SuperMemo 2.0 algorithm to decide what note to review next when engaging in a Spaced Writing Practice (SWP). The plugin allows tagging each note with multiple contexts (e.g., work vs personal) to only pull up notes appropriate for the moment.
<vault>/.obsidian/plugins/spaced-everything/Open a note you want to review - Start with any existing note in your vault
Onboard the note - Run the command Spaced Everything: Log review outcome (default hotkey: none)
Review and rate your progress - After working on the note, rate how the review went:
Continue your practice - Run Spaced Everything: Open next item for review to pull up the next note in your queue
Day 1: Onboard "Project Ideas" note → Rate as "Fruitful"
↓ (1 day later)
Day 2: Review "Project Ideas" → Made progress → Rate as "Fruitful"
↓ (1 day later)
Day 3: Review "Project Ideas" → Struggling to add more → Rate as "Ignore"
↓ (2-3 days later)
Day 6: Review "Project Ideas" → No progress → Rate as "Unfruitful"
↓ (5-7 days later)
Day 13: Review "Project Ideas" → Fresh perspective → Rate as "Fruitful"
The SuperMemo 2.0 algorithm automatically adjusts intervals based on your feedback, ensuring notes return at optimal times for productive engagement.
Taking from Andy's proposed idea, when reviewing a note you can select among three options for how the review went: Fruitful, Unfruitful, or Ignore. Fruitful means you made good progress on the note; this guides the spacing algorithm to include the note again soon in your queue. Unfruitful means you tried to engage with the note but progress was limited; this pushes that note out further in your queue. Ignore is an in-between option.
You may customize these options for this review process. You may add or delete options and change their numeric value. Currently, the only spacing algorithm implemented is the SuperMemo 2.0 algorithm. The numeric value provided in the settings alongside each review option maps to the "review quality score" from that algorithm.
Command: Spaced Everything: Log review outcome
At any time, you may run the "Open next review item" command to pull up the next note in your review queue. This is calculated based on looking across the SWP frontmatter properties of notes in your vault. From there, it adds the interval value (in days) to the last review timestamp to derive the due date for each note. Then any notes with a due date in the future are filtered out. Among remaining notes, it sorts it by the earliest/oldest due date timestamp first and pulls notes in that order.
Command: Spaced Everything: Open next item for review
Inspired by Andy Matuschak's writing inbox concept, the "Capture thought" command allows for a rapid way to write down any sudden thought and have it immediately onboarded to the spaced writing queue.
The command prompts you to enter your thought, then creates a new note using your configured templates. The note is automatically onboarded to the review system, ensuring it returns for further development.
Command: Spaced Everything: Capture thought
By default, all notes are treated as one large queue of notes to review. However, you may optionally add any number of separate contexts to filter down which subset of notes to include when pulling up the next note in the review queue. When onboarding notes, it will prompt you to select which SWP context to add the note into. You may also run the "Toggle note contexts" command on any note to add/remove the note from any context.
You can create and remove SWP contexts from within the settings. You may also toggle which contexts are "active" (i.e., only notes matching an active context are considered when going through the review queue).
Command: Spaced Everything: Toggle note contexts
Only notes you actively choose to review to onboard are considered for the spaced writing practice review queue. When running the "Log review outcome" command on a note not yet onboarded, it will onboard the note. When conducting the review (using that same command), you may remove any individual note at any time.
The actions you take in this spaced writing practice can optionally be logged to a local file. This data is stored in JSONL format. Some customization is possible in the settings, including providing a list of frontmatter properties that you are interested in capturing for whichever note the action was taken on.
Log files are privacy-conscious by default - you control exactly what data is captured.
Access plugin settings through: Settings → Community plugins → Spaced Everything
Configure the algorithms and parameters that control review intervals.
Name: Give your spacing method a descriptive name (e.g., "Daily Learning", "Weekly Reference")
Default interval: Starting interval in days for newly onboarded notes (default: 1)
Spacing algorithm: Currently only SuperMemo 2.0 is supported
Default ease factor: Controls how quickly intervals grow (default: 2.5)
Review options: Customize the choices presented during review
Organize notes into separate review queues for focused practice sessions.
Creating contexts:
Context behavior:
Use cases:
Timestamp timezone: Choose how timestamps are stored
Note: Changing this only affects new timestamps. Existing timestamps remain in their current format.
Control what review activity data is captured.
Log file path: Path to JSONL log file (leave empty to disable logging)
.jsonlSpacedEverything/activity.jsonlLog note title: Include note titles in logs (default: off for privacy)
Log frontmatter properties: Specify which properties to log
[]: No frontmatter logged (most private)['*']: All frontmatter logged['tags', 'author'] logs only thoseLog onboard action: Log when notes are added to the system
Log remove action: Log when notes are removed from the system
Configure quick note creation for fleeting thoughts.
Note title template: Template for new note titles
"Thought - {{date}} {{time}}""Inbox {{unixtime}}" (ensures unique filenames)Note directory: Where to create captured thoughts
"Daily Notes/Thoughts"New note template: Initial content for captured thoughts
"## Captured thought\n{{thought}}"Include short thought in alias: Add brief thoughts as note aliases
Short thought threshold: Maximum length (in characters) for alias inclusion (default: 50)
Open in new tab: Open captured thoughts in new tab vs. current tab (default: true)
Bulk vault-wide onboarding with folder exclusion.
⚠️ Warning: This modifies potentially hundreds or thousands of files. ALWAYS create a full vault backup before using.
Excluded folders: List folders to skip (one per line)
Templates, Scripts, ArchiveBehavior:
The SuperMemo 2.0 algorithm is a spaced repetition algorithm developed by Piotr Woźniak in 1987. It calculates optimal review intervals based on how well you recall information.
Initial Review: New notes start with a short interval (e.g., 1 day)
Quality Rating: After each review, you rate how productive it was (0-5 scale)
Interval Adjustment:
Ease Factor Adjustment: The ease factor personalizes the algorithm
Review 1: Rate 4 (Good) → Next review in 1 day
Ease factor: 2.5
Review 2: Rate 5 (Perfect) → Next review in 2.5 days (1 × 2.5)
Ease factor: 2.6 (increased slightly)
Review 3: Rate 4 (Good) → Next review in 6.5 days (2.5 × 2.6)
Ease factor: 2.6 (stayed the same)
Review 4: Rate 2 (Failed) → Next review in 1 day (reset!)
Ease factor: 2.38 (decreased)
Review 5: Rate 4 (Good) → Next review in 2.38 days (1 × 2.38)
Ease factor: 2.38
Unlike traditional flashcard review where you test memorization, Spaced Everything applies the algorithm to creative work:
This creates a dynamic queue that surfaces notes at optimal times for productive engagement, neither too soon (wasting time) nor too late (losing momentum).
The SuperMemo 2.0 formula uses empirically-derived constants:
Ease adjustment = 0.1 - (5 - score) × (0.08 + (5 - score) × 0.02)
New ease = max(1.3, old ease + ease adjustment)
New interval = old interval × new ease (if score ≥ 3)
These constants were derived through extensive experimentation by Piotr Woźniak and represent optimal values for human memory and learning patterns.
Spaced Everything adds the following frontmatter properties to onboarded notes:
se-interval (number)
se-interval: 7se-last-reviewed (string)
se-interval to calculate due dateYYYY-MM-DDTHH:MM:SS (with optional timezone)se-last-reviewed: 2025-12-18T14:30:00Zse-ease (number)
se-ease: 2.5se-contexts (string or array)
se-contexts:
- Learning
- Reference
se-spacing-method (string)
se-spacing-method: "Aggressive Review"---
se-interval: 7
se-last-reviewed: 2025-12-18T14:30:00Z
se-ease: 2.5
se-contexts:
- Learning
title: SuperMemo 2.0 Algorithm Notes
tags:
- spaced-repetition
- learning
---
# SuperMemo 2.0 Algorithm Notes
Content of your note...
While the plugin manages these properties automatically, you can manually edit them:
se-interval: 1 to bring it back to the front of the queuese-interval to a very large number (e.g., 10000)se-ease (higher = easier, lower = harder)se-contexts to move between contexts⚠️ Caution: Manual edits can disrupt the algorithm's learning. Use sparingly and understand the implications.
Template variables allow dynamic content in captured thought titles and note content.
{{date}}
2025-12-18{{time}}
14:30:45{{unixtime}}
1734520245123{{thought}}
Simple daily note:
Title: "{{date}} - Thought"
Content: "{{thought}}"
Result: 2025-12-18 - Thought.md containing your thought text
Timestamped inbox:
Title: "Inbox - {{date}} {{time}}"
Content: "# Captured {{date}} at {{time}}\n\n{{thought}}"
Result: Inbox - 2025-12-18 14:30:45.md with formatted content
Guaranteed unique:
Title: "{{unixtime}}"
Content: "{{thought}}"
Result: 1734520245123.md - never conflicts with existing notes
Structured thought:
Title: "Thought - {{date}}"
Content: "# Quick Thought
{{thought}}
## Next Actions
- [ ] Review and expand
"
{{unixtime}} in titles to ensure uniqueness{{date}} with descriptive text for browsabilityFor power users who want to extend and customize Spaced Everything, see the Dataview Queries Guide. This guide covers:
The Advanced Guide includes patterns and examples, with thanks to @menkaru for the initial Dataview query contribution.
Possible future development:
MIT License - see LICENSE file for details