Skip to main content

Sync mnemonic markdown files to Anki with rich cloze deletion syntax

Project description

MNMD Anki Sync

CI PyPI version Python 3.10+ License

Sync mnemonic markdown files to Anki with rich cloze deletion syntax.

Features

  • Rich cloze syntax: Basic, grouped, and sequence clozes
  • Hints and extras: Add hints ({{answer|hint}}) and extra info ({{answer<extra}})
  • Math support: LaTeX equations ($inline$ and $$block$$) automatically converted to Anki format
  • Markdown rendering: Bold, italic, lists, images, code blocks, line breaks
  • Scope control: Specify paragraph context for each cloze with [-before,after]
  • Smart updates: Automatically tracks Anki IDs to prevent duplicates
  • Editor links: Open source files from Anki in VS Code, VSCodium, Neovim, or Obsidian
  • Dry-run mode: Preview changes before syncing with --dry-run
  • Type-safe: Built with Pydantic for robust data validation
  • Well-tested: 276 unit tests with 96% code coverage

Installation

For Users

Recommended: Install with pipx (installs in isolated environment)

pipx install mnmd-anki-sync

Alternative: Install with pip

pip install mnmd-anki-sync

Or install with uv

uv pip install mnmd-anki-sync

Install from GitHub (latest development version)

pip install git+https://github.com/am-campbell/mnmd-anki-sync.git

For Developers

Clone the repository and install with uv:

git clone https://github.com/am-campbell/mnmd-anki-sync.git
cd mnmd-anki-sync
uv sync --extra dev

Quick Start

  1. Make sure Anki is running with AnkiConnect installed

  2. View the syntax guide:

mnmd syntax
  1. Create a markdown file with cloze deletions:
> ?
> The capital of France is {{Paris}}.

> ?
> My favorite languages are {{1>Python}} and {{1>Rust}}.
  1. Sync to Anki:
mnmd sync myfile.md --deck "My Deck"

Syntax Guide

See syntax-notes.md for complete syntax documentation.

Basic Cloze

> ?
> The capital of France is {{Paris}}.

Creates one card with "The capital of France is [...]"

Grouped Cloze

> ?
> My favorite languages are {{1>Python}} and {{1>Rust}}.

Both items are hidden together on the same card: "My favorite languages are [...] and [...]"

Sequence Cloze

> ?
> My Haiku:
> {{1.1>I want to write an}}[-1]
> {{1.2>Example poem for you}}
> {{1.3>Hopefully helpful}}

Creates progressive reveal: first line hidden, then second, then third

Hints and Extras

> ?
> Python is a {{dynamically typed|type checking happens at runtime}} language.
> The package manager is {{pip<PyPI hosts over 400,000 packages}}.
  • |hint adds hint text shown on card back
  • <extra adds extra information (no closing >)
  • Combine: {{answer|hint<extra}}

Math Support

> ?
> Einstein's equation: {{$E = mc^2$}}
> The quadratic formula: {{$x = \frac{-b \pm \sqrt{b^2 - 4ac}}{2a}$|solves ax² + bx + c = 0}}

LaTeX math is automatically converted to Anki's format

Images

> ?
> The Python logo: ![Python](./images/python-logo.png)

Standard markdown images work in Anki cards

Scope Control

{{text}}[-1,2]

Include 1 paragraph before, 2 after. Default is current paragraph only.

  • Negative numbers = paragraphs before
  • Positive numbers = paragraphs after
  • Lists default to [-1] (include paragraph before)

CLI Commands

# Sync files
mnmd sync file.md --deck "Biology" --tags "chapter1"

# Sync with specific editor
mnmd sync file.md --editor nvim
mnmd sync file.md --editor vscode

# Validate syntax
mnmd validate file.md

# Show syntax guide (opens in pager)
mnmd syntax

# Show syntax guide without pager (direct output)
mnmd syntax --no-pager

# Show version
mnmd version

Editor Configuration

Set your preferred editor for source links in Anki cards. Choose from:

  • vscode - Visual Studio Code (default, works out of box)
  • vscodium - VSCodium (works out of box)
  • obsidian - Obsidian (works out of box)
  • file - System default handler (works out of box)
  • nvim - Neovim (requires setup, see EDITOR_SETUP.md)

Config file (~/.mnmdrc):

editor_protocol: vscode  # or nvim, vscodium, obsidian, file
default_deck: My Deck
default_tags:
  - mnmd

Command line:

mnmd sync file.md --editor nvim

For Neovim users: The nvim:// protocol requires custom setup. Either:

  1. Use file protocol (easiest): editor_protocol: file
  2. Register nvim:// handler (see EDITOR_SETUP.md)

The file protocol opens files with your system's default markdown editor.

Development

# Run tests
uv run pytest

# Type check
uv run mypy src

For AI Agents & LLM Integration

If you're building tools that generate mnemonic markdown or integrating LLMs to create flashcards, see agents-syntax.md for:

  • Precise syntax specification optimized for LLM parsing
  • Complete pattern reference with regex-like precision
  • Common pitfalls and error prevention
  • Validation checklist
  • Quick reference table

This file provides unambiguous rules for programmatic generation of valid MNMD syntax.

Contributing

Contributions welcome! Please:

  1. Fork the repository
  2. Create a feature branch
  3. Add tests for new features
  4. Ensure all tests pass: uv run pytest
  5. Submit a pull request

Publishing & Distribution

See DISTRIBUTION.md for instructions on publishing releases to PyPI and GitHub.

License

Apache 2.0 - See LICENSE file for details

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

mnmd_anki_sync-0.1.1.tar.gz (31.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

mnmd_anki_sync-0.1.1-py3-none-any.whl (41.0 kB view details)

Uploaded Python 3

File details

Details for the file mnmd_anki_sync-0.1.1.tar.gz.

File metadata

  • Download URL: mnmd_anki_sync-0.1.1.tar.gz
  • Upload date:
  • Size: 31.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for mnmd_anki_sync-0.1.1.tar.gz
Algorithm Hash digest
SHA256 aa115fae154712c308ec1df901a1b3278107ebdd236317365061c94a5dd3c37f
MD5 17f3b76e21c6b28eceaf18afa74cc901
BLAKE2b-256 83a0e5ddcb618c14a200adc9099f09d53d80707946cd15d83076682d686534fe

See more details on using hashes here.

Provenance

The following attestation bundles were made for mnmd_anki_sync-0.1.1.tar.gz:

Publisher: release.yml on AM-Campbell/mnmd-anki-sync

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file mnmd_anki_sync-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: mnmd_anki_sync-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 41.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for mnmd_anki_sync-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 90a3108bc1e7d9913b80f47f650fe2e19ae36618ff411eeed5cac0887b15076c
MD5 fb22b04e734d40889aa79886cece061f
BLAKE2b-256 40e84df81d4f3c23b424c53500ad7c6dcf85d13c4231b660af9be29f61f17f68

See more details on using hashes here.

Provenance

The following attestation bundles were made for mnmd_anki_sync-0.1.1-py3-none-any.whl:

Publisher: release.yml on AM-Campbell/mnmd-anki-sync

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page