Skip to main content

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)

Source distribution for manuscriptlint 0.1.0
File Size Uploaded
manuscriptlint-0.1.0.tar.gz 16.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for manuscriptlint 0.1.0
File Interpreter ABI Platform
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 log

Release 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

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page