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
- Run
exam-cardforge build. - Open Anki.
- Choose
File > Import. - Select the generated CSV file.
- Map columns as
Front,Back, andTags.
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)
| File | Size | Uploaded | |
|---|---|---|---|
| exam_cardforge-0.3.0.tar.gz | 12.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| 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 logRelease 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