True Recall

approved

by Lucas Piera

Anki-like native system in obsidian. Review flashcards with FSRS spaced repetition. - This plugin has not been manually reviewed by Obsidian staff.

54 stars9,802 downloadsUpdated 25d ago

True Recall

The next-gen spaced repetition system for Obsidian.

Create flashcards inside your notes, review them with FSRS v6 scheduling, and track progress with comprehensive analytics — all without leaving Obsidian.

Documentation · Pricing · Sponsor on GitHub


Dashboard Statistics Flashcards Review


Features

  • FSRS v6 Algorithm — State-of-the-art spaced repetition with 21 trainable parameters. Optimizes to your personal memory patterns after 400+ reviews.
  • AI Card Generation — Select text, get instant flashcards. Supports Basic, Cloze, Reversed, and Image Occlusion card types. Multiple models via OpenRouter (Gemini, GPT, Claude, Llama).
  • Local-First Storage — All data in a portable SQLite database inside your vault (.true-recall/true-recall.db). Your data stays with you.
  • Projects System — Organize cards across notes with many-to-many relationships. Review by topic, inherit FSRS presets from parent projects.
  • Anki Compatible — Import .apkg decks and export to Anki or CSV/TSV.
  • Analytics & Widgets — Dashboard, statistics, calendar heatmap, forecast charts, and 25+ inline codeblock widgets you can embed in any note.
  • Card Browser — Powerful query syntax for finding cards by state, properties, source note, and more.
  • Type-in Mode — Type answers with AI semantic grading or diff-based checking.

Installation

Via BRAT (Recommended)

  1. Install BRAT from Obsidian Community Plugins
  2. Settings → BRAT → Add Beta Plugin → enter pieralukasz/true-recall
  3. Enable True Recall in Settings → Community plugins

Manual

  1. Download the latest release from GitHub Releases
  2. Copy main.js, styles.css, and manifest.json into <your-vault>/.obsidian/plugins/true-recall/
  3. Enable the plugin in Settings → Community plugins

From Source

git clone https://github.com/pieralukasz/true-recall.git
cd true-recall
bun install
bun run build
cp main.js styles.css manifest.json <your-vault>/.obsidian/plugins/true-recall/

Requirements

  • Obsidian 1.7.2+
  • Desktop (Windows, macOS, Linux). True Recall is marked desktop-only in manifest.json.

Quick Start

  1. Open a note and select some text
  2. Use the selection toolbar to generate flashcards with AI
  3. Open the Flashcard Panel to see and collect your cards
  4. Start a review session — rate cards as Again, Hard, Good, or Easy
  5. Track progress in the Statistics view or embed widgets in your notes

For a complete walkthrough, see the documentation.


Privacy & Background Activity

True Recall is local-first. It does not send telemetry or analytics. Network access is limited to the explicit feature paths below.

Periodic timers (setInterval) — all local, no network:

  • Database safety-flush — writes pending changes to the local SQLite file in your vault.
  • Optional background backup — writes a backup file inside your vault when enabled in settings.
  • Device-lock heartbeat — updates a small lock file inside your vault to prevent two Obsidian Sync clients from corrupting the database when both are open. Local file write only.
  • UI status polling — reads in-memory state to refresh diagnostics/backup panels.

Network requests — only on explicit user action or one-time per release:

  • Update check — when the plugin version differs from the last seen version, a single requestUrl call is made to the GitHub Releases API to fetch release notes. Runs once per version, not on a timer.
  • AI features (opt-in) — flashcard generation, semantic grading, and image-occlusion detection require a configured AI provider. Depending on settings, requests can go to OpenRouter, ai.truerecall.app for True Recall Pro, a local LM Studio/Ollama endpoint, or a custom OpenAI-compatible endpoint you enter.
  • Local API server (desktop, opt-in) — binds to 127.0.0.1 only, used by the optional companion CLI and MCP server. It is disabled by default and does not expose a public network listener.
  • External links — documentation, pricing, sponsorship, Discord, and Anki shared-deck links are opened only when you click UI links.

Storage: All flashcards and review data live in .true-recall/true-recall.db inside your vault. Backups and lock files live in the same .true-recall/ folder. Device identity and optional device labels use localStorage so multiple synced devices can avoid database conflicts.

Vault and clipboard access:

  • Vault reads/writes are core to the plugin: True Recall reads selected/current notes, creates or updates notes for projects/imports, and stores its SQLite database and backups inside the vault.
  • Vault enumeration is used for note pickers, project discovery, media lookup, and export/import.
  • Clipboard writes happen only from explicit copy actions. Clipboard paste/drop handlers are used only in image/media workflows initiated by the user.

Bundled runtime components:

  • The plugin embeds @sqlite.org/sqlite-wasm so SQLite works locally in Obsidian. This is the expected .wasm module in the bundle.
  • Base64 encoding is used to pass selected vault images to configured AI vision providers for image-occlusion region detection. It is not used to hide network destinations or source strings.

License

Source-available under the PolyForm Strict License 1.0.0 (SPDX: PolyForm-Strict-1.0.0).

Permitted: noncommercial use, including personal study, research, hobby projects, and use by charitable / educational / public-research / government organizations. Fair-use rights are preserved.

Not permitted under this license: redistribution, modification and derivative works, commercial use, hosting as a service, or building a competing product.

Commercial licensing. A separate commercial license is required for any use beyond what PolyForm Strict allows — including production deployments inside a business, paid services built on True Recall, or distributing derivative works. Contact pieralukasz@gmail.com to discuss terms.

For plugin developers

Search results and similarity scores are powered by semantic analysis of your plugin's README. If your plugin isn't appearing for searches you'd expect, try updating your README to clearly describe your plugin's purpose, features, and use cases.