Files
coursebank/README.md
T
2026-08-07 11:47:30 -04:00

2.7 KiB

coursebank

coursebank runs the assessment side of a course as version-controlled data. Questions, exams, grading exports, and the statistics computed from them live as YAML and Parquet files in a git repository, so they can be reviewed in pull requests and tracked as each question is reused across terms.

It is both a command-line tool and a Rust library. The command line covers the whole loop: author items, validate and lint them, assemble an exam, export it for print or Canvas, ingest the grading export, analyze it, and write the results back onto the items so the next assembly knows how each question has behaved.

The files

A course is a directory of four kinds of file:

Path Holds
course.yaml course identity, policy, learning objectives, lectures
banks/*.yaml items, with their design intent and pooled statistics
assessments/*.yaml what was given, in what order, on what date
data/*.parquet one row per student per item

The first three are hand-editable YAML meant to be read in a diff. The response data is machine-written and stored in Parquet, so pandas, polars, DuckDB, and R can read it without this tool.

Building

coursebank builds with Rust 1.85 or newer (edition 2024). The repository uses pixi to pin the toolchain and wrap the common tasks:

pixi run build   # release binary at target/release/coursebank
pixi run tests
pixi run check   # format, lint, test, and doc build

Plain cargo works too with a recent toolchain:

cargo build --release

Usage

Create a course, validate it, then assemble and export an exam from the pool:

coursebank init --code "BIOSC 1540" --title "Computational Biology" --term 2026s
coursebank validate
coursebank assemble exam-4 --levels 1=6,2=8,3=10,4=6 --forms 2
coursebank export typst exam-4 --form A

Run coursebank --help for the full command set.

License

coursebank is source-available under the Prosperity Public License 3.0.0. It is not an OSI-approved open-source license. Noncommercial use is free, and the license treats educational institutions, public research organizations, government, and similar noncommercial bodies as noncommercial regardless of how they are funded. Commercial use gets a thirty-day trial; past that it requires a commercial license.

For a commercial license, contact licensing@scient.ing.

Bundled dependencies keep their own licenses, reproduced in THIRD-PARTY-LICENSES.txt in each release.

Contributing

If you want to contribute, open an issue first. Contributed code will need a contributor license agreement so it can ship under both the free and the commercial license. That agreement is not in place yet, so outside patches cannot be merged for now.