The manubot manuscript-as-software pattern, on Quarto.
Project description
quartobot
The manubot manuscript-as-software pattern, on Quarto.
Status: v0.1 in flight. CLI commands ship; the Quarto extension and the manuscript template ship. An architecture pivot is under discussion in
docs/citation-pipeline.mdthat would collapse the extension into a single pre-render hook calling the CLI directly — read the design doc before non-trivial work, and watch the v0.1 milestone for tagging.
What this is
Manubot has, for eight years, run scholarly manuscripts as a git repository that builds itself on every commit, resolves citations from DOIs and PubMed IDs automatically, hands out an immutable permalink per commit, and collaborates through pull requests. The pattern is published (Himmelstein et al. 2019) and has been used for hundreds of preprints.
Quarto now covers more of scholarly publishing than manubot ever did — manuscripts, books, websites, slides, dashboards, courseware — but the manubot pattern does not yet exist there natively. That's the gap this repo closes.
The shipping surface is a Python CLI and (optionally) a GitHub template:
-
quartobot— a Python CLI.quartobot resolvepre-fetches citations through manubot's resolver library, so CI never sees a Crossref hiccup mid-render.quartobot scansummarizes cite keys grouped by prefix with duplicate detection.quartobot validateis the CI-lint surface (static checks against_quarto.yml).quartobot initscaffolds the pattern into an existing Quarto project. Authors write@doi:10.1371/journal.pcbi.1007128,@pmid:31479462,@arxiv:2104.10729,@isbn:…, or bare DOIs in their prose, and citations resolve.uv tool install git+https://github.com/seandavi/quartobot
-
quartobot-manuscript— a GitHub template that combines Quarto Manuscripts, the CLI's pre-render hook, and a CI workflow that gives every commit an immutable permalink at/v/<sha>/, embeds that permalink in the rendered HTML, posts PR previews via sticky comment, and deploys HTML + PDF + DOCX to GitHub Pages.gh repo create my-paper --template seandavi/quartobot-manuscript
Under the current (filter-based) architecture, a Quarto extension
quarto-manubot-cite also ships at quarto add seandavi/quartobot.
The pivot proposal in docs/citation-pipeline.md collapses that
extension into a one-line pre-render hook calling the CLI — the
extension shrinks to optional wiring, the CLI becomes the load-bearing
surface. PyPI publishing and the standalone template repo are part of
the v0.1 tag.
Why this exists
manubot/manubot#332
("Quarto integration") was opened by Anthony Gitter in April 2022 after a
conversation with Sean Davis. Four years later, no PR, no assignee — but
pandoc-manubot-cite shipped inside the manubot package and Quarto
Manuscripts shipped as a first-party project type. The integration is
small once you stop trying to rebuild the resolver. This repo is the work
to resolve that issue.
Working example
seandavi/2026-venice-spatial-hackathon-manuscript runs the CI / permalink / banner half of the pattern on a live 25-author preprint from the Bioconductor Spatial Hackathon. That's the working reference the template is being lifted from.
See also
- Design —
DESIGN.md - Prior art —
docs/prior-art.md - Publication plan —
docs/publication-plan.md - Conversation notes —
docs/conversation-notes.md - Contributing —
CONTRIBUTING.md - Code of conduct —
CODE_OF_CONDUCT.md
License
MIT.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file quartobot-0.1.0.tar.gz.
File metadata
- Download URL: quartobot-0.1.0.tar.gz
- Upload date:
- Size: 35.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
02f88a8e35f1868444e88878c8c686decbedef3e7c5cd6d76eb75603d3864287
|
|
| MD5 |
cf143572c32686ddf93d511bb9a04d9a
|
|
| BLAKE2b-256 |
b02c97283a6090fe08ec964e0aacb18b670a4c4edb1b98970f6d40b64188e9ef
|
Provenance
The following attestation bundles were made for quartobot-0.1.0.tar.gz:
Publisher:
publish-pypi.yml on seandavi/quartobot
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
quartobot-0.1.0.tar.gz -
Subject digest:
02f88a8e35f1868444e88878c8c686decbedef3e7c5cd6d76eb75603d3864287 - Sigstore transparency entry: 1541598954
- Sigstore integration time:
-
Permalink:
seandavi/quartobot@25cec8f15ed098def849504b135881bc02bd507c -
Branch / Tag:
refs/heads/main - Owner: https://github.com/seandavi
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@25cec8f15ed098def849504b135881bc02bd507c -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file quartobot-0.1.0-py3-none-any.whl.
File metadata
- Download URL: quartobot-0.1.0-py3-none-any.whl
- Upload date:
- Size: 22.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
83d5cd32ae1b76907990145eb9cfe03e3e59e1a998d7fd419d51e41db3df18c7
|
|
| MD5 |
11cd34e1d7282e10b32dd185df24596e
|
|
| BLAKE2b-256 |
6d3def12aaec2d4a111a6ac7547493d456de49db9ae45bebfaeaddd84d90452a
|
Provenance
The following attestation bundles were made for quartobot-0.1.0-py3-none-any.whl:
Publisher:
publish-pypi.yml on seandavi/quartobot
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
quartobot-0.1.0-py3-none-any.whl -
Subject digest:
83d5cd32ae1b76907990145eb9cfe03e3e59e1a998d7fd419d51e41db3df18c7 - Sigstore transparency entry: 1541599058
- Sigstore integration time:
-
Permalink:
seandavi/quartobot@25cec8f15ed098def849504b135881bc02bd507c -
Branch / Tag:
refs/heads/main - Owner: https://github.com/seandavi
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@25cec8f15ed098def849504b135881bc02bd507c -
Trigger Event:
workflow_dispatch
-
Statement type: