SciEqLint
SciEqLint lints scientific Markdown, LaTeX, and notebooks for equation mistakes, broken references, MyST structure problems, and CI-ready diagnostics before they reach reviewers.
python -m pip install scieqlint
scieqlint check README.md
Run it on Markdown/MyST docs before review to catch mistakes like this:
(a+b)^2 = a^2 + b^2
Diagnostic:
ALG001 algebraic identity does not hold
left - right = 2*a*b
It also catches supported broken equation references:
See {eq}`missing`.
Diagnostic:
REF002 equation reference target not found: missing
For generated or MyST-heavy scientific docs, initialize the packaged profile and run the same deterministic checks in CI:
scieqlint init --preset generated-myst --path scieqlint.generated-myst.toml
scieqlint check "docs/**/*.md" --config scieqlint.generated-myst.toml --format github
That profile enables stricter generated-document checks while keeping the scope source-based: math containers, supported equation and generic references, MyST anchors and directives, heading hierarchy, and parse-unknown diagnostics.
Local development
python -m pip install -e '.[dev]'
scieqlint --help
scieqlint check .
scieqlint check examples/bad/famous_bad.md --format github
scieqlint demo
Commands
scieqlint check [PATH_OR_GLOB...]
scieqlint graph [PATH_OR_GLOB...] --output scieqlint-graph.json
scieqlint init
scieqlint init --preset generated-myst
scieqlint init --preset mechanics
scieqlint presets list
scieqlint presets show generated-myst
scieqlint presets show mechanics
scieqlint demo
scieqlint explain CODE
python -m scieqlint --help
Deterministic output
SciEqLint is deterministic. Given the same files, config, and version, it must emit the same diagnostics in the same order. Supported math is checked exactly. Unsupported math is reported as unknown or skipped. The checker must not guess.
Supported files
SciEqLint checks .md, .markdown, .tex, and .ipynb documents. It supports
Markdown/MyST display math, supported LaTeX containers, notebook Markdown cells,
labels and references, MyST structure diagnostics, simple scalar algebra, text
output, deterministic JSON output, SARIF, and JSON Schema validation. See
docs/limitations.md for the exact scanner and grammar coverage.
Current release target: v1.1.0.
Pull request annotations
- name: Check equations
run: scieqlint check "docs/**/*.md" --format github
Code scanning
permissions:
contents: read
security-events: write
steps:
- uses: actions/checkout@v6
- uses: Kuhai9801/scieqlint@v1.1.0
with:
args: check "docs/**/*.md" --format sarif --output scieqlint.sarif
- uses: github/codeql-action/upload-sarif@v4
with:
sarif_file: scieqlint.sarif
category: scieqlint-docs
For contributors
Start with these files:
SPEC.mdfor the product and engineering contract.CONTRIBUTING.mdfor the local workflow.GOOD_FIRST_ISSUES.mdfor scoped starter tasks.ROADMAP.mdfor release order and cut rules.docs/contributing/for deeper guidance.
Keep PRs small and test the behavior they change.
License
MIT. See LICENSE.
Release files for scieqlint 1.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 | |
|---|---|---|---|
| scieqlint-1.1.0.tar.gz | 309.1 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| scieqlint-1.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 414.8 kB
Release files / scieqlint-1.1.0.tar.gz
| Download URL | scieqlint-1.1.0.tar.gz |
|---|---|
| Size | 309.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
4b6ceddf23d535ca72b313836798c6952cbd5adccae25937bd2161d98ddea96b
|
|
BLAKE2b-256 checksum How to use checksums |
83c6b05114d4d9b5af3278160ea52370b52169b44cb046589ed6d8e636abdcdd
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.13
|
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 Jun 15, 2026.
Transparency logRelease files / scieqlint-1.1.0-py3-none-any.whl
| Download URL | scieqlint-1.1.0-py3-none-any.whl |
|---|---|
| Size | 105.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
9ad9d747311c5df76ddf22676d7928a49c1b9c2eec8ad3cca19f205f0a354a84
|
|
BLAKE2b-256 checksum How to use checksums |
f6ff85379bb9402b93c49622e363e68591fd54541b677c2517f4226068a1f8b5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.13
|
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 Jun 15, 2026.
Transparency log