Skip to main content

Exam Cardforge

Exam Cardforge is a lightweight Markdown-to-Anki toolkit for exam review workflows.

It helps students and study groups keep notes readable in Markdown while exporting reusable flashcards for Anki. The first built-in templates target Chinese CS postgraduate entrance exam review, especially 408.

Project positioning

Exam Cardforge is designed for people who already write course notes, wrong-question notes, or review summaries in Markdown and want a low-friction path into spaced repetition.

The project focuses on:

  • human-readable Markdown syntax;
  • Anki-compatible CSV export;
  • exam-oriented note organization with tags, decks, and cloze cards;
  • small, dependency-light Python code that new contributors can understand.

This is not a question bank. It is a conversion and validation tool for notes that users own and maintain.

Why this project exists

Many students already write review notes in Markdown, but spaced-repetition tools usually need a more rigid card format. This project keeps notes readable while making them easy to export.

The project goal is practical and modest:

  • write notes in Markdown;
  • mark reusable question-answer blocks;
  • export Anki-compatible CSV;
  • keep the format simple enough for beginners to understand and contribute.

Install

From PyPI, after the package is published:

python -m pip install exam-cardforge

From GitHub:

python -m pip install "exam-cardforge @ git+https://github.com/Elysyrus/exam-cardforge.git"

Verify the command is available:

exam-cardforge --help

Install for local development

python -m venv .venv
.venv\Scripts\activate
python -m pip install -e . pytest

On macOS or Linux, activate the environment with:

source .venv/bin/activate

Quick start

Create a sample note:

exam-cardforge sample -o examples/408.md

Build an Anki CSV:

exam-cardforge build examples/408.md -o dist/408-anki.csv

Show tag statistics:

exam-cardforge stats examples/408.md

Check whether notes are valid and detect duplicate questions:

exam-cardforge lint examples/408.md

Card syntax

Write cards inside :::card blocks:

:::card tags=408,data-structure,stack
Q: 栈为什么适合检查括号匹配?
A: 因为括号匹配具有“后打开的先关闭”的特点,正好对应栈的后进先出。
:::

Decks can be attached with deck=:

:::card tags=408,os deck=408::OS
Q: 进程和程序的核心区别是什么?
A: 程序是静态代码,进程是程序在某次运行中的动态实体。
:::

Multi-line cards are supported:

:::card tags=408,os
Q:
进程和程序的核心区别是什么?
A:
程序是静态代码。
进程是程序在某次运行中的动态实体,拥有运行状态和资源。
:::

Cloze syntax

Use :::cloze blocks for Anki Cloze cards:

:::cloze tags=408,co,memory deck=408::ComputerOrganization
局部性原理包括{{c1::时间局部性}}和{{c2::空间局部性}}。
:::

The generated CSV includes Front, Back, Tags, Deck, and Note Type columns. In Anki, map Cloze rows to the Cloze note type.

Import into Anki

  1. Run exam-cardforge build.
  2. Open Anki.
  3. Choose File > Import.
  4. Select the generated CSV file.
  5. Map columns as Front, Back, and Tags.

Roadmap

See ROADMAP.md for the active maintenance plan.

Contributing

Bug reports, syntax suggestions, parser improvements, and documentation fixes are welcome. See CONTRIBUTING.md.

License

MIT

Metadata

Release files for exam-cardforge 0.3.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for exam-cardforge 0.3.0
File Size Uploaded
exam_cardforge-0.3.0.tar.gz 12.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for exam-cardforge 0.3.0
File Interpreter ABI Platform
exam_cardforge-0.3.0-py3-none-any.whl Python 3 none any Details

Total release size: 21.2 kB

Release files / exam_cardforge-0.3.0.tar.gz

Download URL exam_cardforge-0.3.0.tar.gz
Size 12.5 kB
Tags Source
SHA-256 checksum
How to use checksums
e4ae91921203e6565b98e172c6810daee846a88e2fe7713e5824342f744ee413
BLAKE2b-256 checksum
How to use checksums
e277143699ffffeb7d8fb3e9911cbd0e30f18edfefaaf61dd48e2101be6fc732
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jun 1, 2026.

Transparency log

Release files / exam_cardforge-0.3.0-py3-none-any.whl

Download URL exam_cardforge-0.3.0-py3-none-any.whl
Size 8.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
53232f8d11cd158661fc5cd3f8c00bd96731e4c3d4b31dbe156b72086c7b9ac7
BLAKE2b-256 checksum
How to use checksums
3bc1ecd13efc88d1226a847590eae0eacefa5bbda93b2f66024bced4f851c825
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jun 1, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.3.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page