An mdbook preprocessor that embeds asciinema terminal recordings directly into your book pages using the asciinema-player.
-
Install
mdbook-asciinema:To install the latest release published to crates.io:
cargo install mdbook-asciinema --locked
To install the latest version committed to GitHub:
cargo install mdbook-asciinema --git https://github.com/github/mdbook-asciinema.git --locked
Create a new book.
mdbook init --force --title <TITLE>Edit the book.toml file; add the asciinema preprocessor.
[book]
title = "My Book"
[preprocessor.asciinema]Add your asciicast file/s into a path underneath src.
PROJ_DIR
├── book
├── book.toml
└── src
├── chapter_1.md
├── SUMMARY.md
└── video
└── demo.cast
Add a helper tag to a markdown file (e.g. chapter_1.md).
# Chapter 1
{{ #asciinema video/demo.cast }}
See the example directory for a ready-to-run setup.
Preview the book by running mdbook serve.
> mdbook serve
INFO Book building has started
INFO mdbook_asciinema: created "[PROJ_DIR]/src/lib/asciinema-player/asciinema-player.min.js"
INFO mdbook_asciinema: created "[PROJ_DIR]/src/lib/asciinema-player/asciinema-player.css"
INFO Running the html backend
INFO HTML book written to `[PROJ_DIR]/book`
INFO Serving on: http://localhost:3000
INFO Watching for changes...The general form of the helper tag is:
{{ #asciinema <path> [opts=<path>] [scope=<string>] }}| Parameter | Required | Description |
|---|---|---|
path |
Yes | Relative path (from src) to a .cast asciicast file. |
opts |
No | Relative path to a JSON file containing player options. |
scope |
No | Scope identifer to provide control of a specific asciinema player. The provided value should be an alphanumeric string of length between 5 and 10 characters. If this value is not provided or does not meet these restrictions, a random alphanumeric string 10 characters in length will be generated. Each asciinema player will be declared:const player_{scope} = AsciinemaPlayer.create('{path}', document.querySelector('div[b-{scope}]'));. |
To customise playback, create a JSON file with asciinema-player options and reference it with the opts parameter:
{
"autoPlay": true,
"speed": 2,
"idleTimeLimit": 0.5,
"cols": 400,
"rows": 51,
"fit": false,
"terminalFontSize": "15px"
}{{ #asciinema video/demo.cast opts=video/player-opts.json }}To display the helper tag literally without rendering it, prefix it with a backslash:
\{{ #asciinema video/demo.cast }}When mdbook builds or serves the book, this preprocessor:
- Copies the bundled asciinema-player JavaScript and CSS assets into
src/lib/asciinema-player/. - Scans each chapter for
{{ #asciinema ... }}tags. - Replaces each tag with the HTML and JavaScript needed to render an embedded asciinema-player.
All release binaries include build provenance attestations and an SBOM (Software Bill of Materials) in SPDX format.
To verify the provenance of a downloaded binary:
gh attestation verify <artifact-file> --repo github/mdbook-asciinemaTo verify the SBOM attestation:
gh attestation verify <artifact-file> --repo github/mdbook-asciinema --predicate-type https://spdx.dev/DocumentLicensed under the MIT license.