ManuscriptLint 🐈⬛📝
ESLint for academic manuscripts.
ManuscriptLint is an open-source preflight linter for academic manuscripts. It checks a LaTeX project before submission and catches structural problems that are easy to miss during writing.
Part of 喵造实验室 / MeowBuild Lab and the Academic Lint family:
- FigureLint — figure QA
- RefLint — reference QA
- ManuscriptLint — manuscript preflight
Current checks
- duplicate LaTeX labels
- unresolved
\\ref{}/\\eqref{}references - citations missing from BibTeX libraries
- missing
\\input{}/\\include{}source files - missing
\\includegraphics{}files - figure / table environments without captions
- TODO / FIXME markers left in reachable manuscript text
- entry-point-aware LaTeX include graph
- include-cycle detection
- unused figure files in conventional figure directories (informational)
- unused BibTeX entries (informational, respects
\\nocite{*}) - optional FigureLint and RefLint integration
- JSON output for editor / CI integrations
- native GitHub Actions annotations
- reusable GitHub composite action
- CI-friendly exit codes and strict mode
When a project directory contains a clear \\documentclass{} entry point, ManuscriptLint follows its \\input{}, \\include{}, and \\subfile{} graph. Unrelated draft .tex files are not treated as active manuscript content.
Install
Requires Python 3.10+.
The first public release is prepared for PyPI. After v0.1.0 is published:
pip install manuscriptlint
From source
git clone https://github.com/coocoomaomao/ManuscriptLint.git
cd ManuscriptLint
python -m venv .venv
pip install -e .
For development:
pip install -e ".[dev]"
pytest
Usage
Check one manuscript:
manuscriptlint check paper.tex
Check a whole LaTeX project:
manuscriptlint check paper/
Treat warnings as CI failures:
manuscriptlint check paper/ --strict
Machine-readable JSON:
manuscriptlint check paper/ --format json
Emit native GitHub workflow annotations:
manuscriptlint check paper/ --github-annotations
Run the wider Academic Lint toolchain when FigureLint / RefLint are installed:
manuscriptlint check paper/ --figurelint --reflint
GitHub Actions
Before the first tag is published, use @main:
- uses: coocoomaomao/ManuscriptLint@main
with:
path: paper/
strict: "true"
After v0.1.0, pin the Action to @v0.1.0.
See GitHub Action usage.
Philosophy
ManuscriptLint focuses on deterministic preflight checks. It should identify verifiable structural problems without pretending to judge scientific quality, novelty, or whether a paper will be accepted.
Unused figures and unused references are currently informational because research repositories often keep intentional extras.
Release
The first public release is v0.1.0.
Planned next
- graphicspath / macro handling improvements
- supplementary-material checks
- source-backed publisher presets
- DOCX manuscript support
License
MIT
Release files for manuscriptlint 0.1.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 | |
|---|---|---|---|
| manuscriptlint-0.1.0.tar.gz | 16.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| manuscriptlint-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 30.2 kB
Release files / manuscriptlint-0.1.0.tar.gz
| Download URL | manuscriptlint-0.1.0.tar.gz |
|---|---|
| Size | 16.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
2cb9de50c4327c6b056466f1660e38590ce15d65fec1d4d1b525556d9aa3fc00
|
|
BLAKE2b-256 checksum How to use checksums |
4122511296970abb8331c01b09003d6f5fe19ad500d9737448131d1e1d482241
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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 Sep 23, 2026.
Transparency logRelease files / manuscriptlint-0.1.0-py3-none-any.whl
| Download URL | manuscriptlint-0.1.0-py3-none-any.whl |
|---|---|
| Size | 13.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
f2f1987709c77db9d66eaa1ebeb82ad6dc2bdb9ac3c25e3ec670528ea275d74c
|
|
BLAKE2b-256 checksum How to use checksums |
c56d6dac879590a551b7ef95363a667038cc3ed0855cded5de0b9388171dd9d5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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 Sep 23, 2026.
Transparency log