Skip to main content

Lintro

Lintro Logo

A comprehensive CLI tool that unifies various code formatting, linting, and quality assurance tools under a single command-line interface.

Documentation

CI Docker Coverage

Release PyPI Python License

CodeQL OpenSSF Scorecard OpenSSF Best Practices SBOM SBOM Status

🚀 Quick Start

# Install (choose one)
uv pip install lintro              # Python / PyPI (or: pip install lintro)
bun add -g @lgtm-hq/lintro         # Node / npm — self-contained, no Python

lintro check .                     # Find issues (alias: chk)
lintro format .                    # Fix issues (alias: fmt)
lintro check --output-format grid  # Beautiful output

✨ Why Lintro?

  • 🎯 Unified Interface - One command for all your linting and formatting tools
  • 📊 Consistent Output - Beautiful, standardized output formats across all tools
  • 🔧 Auto-fixing - Automatically fix issues where possible
  • 🐳 Docker Ready - Run in isolated containers for consistent environments
  • 📈 Rich Reporting - Multiple formats: grid, JSON, HTML, CSV, Markdown
  • ⚡ Fast - Optimized parallel execution

🔌 Works With Your Existing Configs

Lintro respects your native tool configurations. If you have a .prettierrc, pyproject.toml [tool.ruff], or .yamllint, Lintro uses them automatically - no migration required.

  • Native configs are detected - Your existing .prettierrc, .oxlintrc.json, etc. work as-is
  • Enforce settings override consistently - Set line_length: 88 once, applied everywhere
  • Fallback defaults when needed - Tools without native configs use sensible defaults

See the Configuration Guide for details on the 5-tier config system.

🛠️ Supported Tools

ToolLanguageAuto-fixInstall
Linters
Actionlint ⚙️ GitHub Actions - GitHub Releases
Clippy 🦀 Rust rustup component add clippy
commitlint 🔀 Git commits - bun add -g @commitlint/cli @commitlint/config-conventional
brew install commitlint
golangci-lint 🐹 Go brew install golangci-lint
Install docs
Hadolint 🐳 Dockerfile - GitHub Releases
html-validate 🌐 HTML - bun add -D html-validate
npm install -D html-validate
Markdownlint 📝 Markdown - bun add -g markdownlint-cli2
npm install -g markdownlint-cli2
Vale 📝 Prose / Docs - brew install vale
GitHub Releases
Oxlint 🟨 JS/TS bun add -D oxlint
npm install -D oxlint
pydoclint 🐍 Python - 📦
ShellCheck 🐚 Shell Scripts - brew install shellcheck
GitHub Releases
Yamllint 🧾 YAML - 📦
Formatters
Black 🐍 Python 📦
Oxfmt 🟨 JS/TS bun add -D oxfmt
npm install -D oxfmt
Prettier 🟨 JS/TS · 🧾 JSON bun add -g prettier
npm install -g prettier
shfmt 🐚 Shell Scripts brew install shfmt
GitHub Releases
rustfmt 🦀 Rust rustup component add rustfmt
Lint + Format
Ruff 🐍 Python 📦
SQLFluff 🗃️ SQL pipx install sqlfluff
Taplo 🧾 TOML brew install taplo
GitHub Releases
dotenv-linter 🔑 .env Files brew install dotenv-linter
GitHub Releases
Stylelint 🎨 CSS/SCSS/Sass/Less bun add -D stylelint
npm install -D stylelint
Type Checkers
Astro 🚀 Astro - bun add astro
npm install astro
Mypy 🐍 Python - 📦
svelte-check 🔥 Svelte - bun add -D svelte-check
npm install -D svelte-check
TypeScript 🟨 JS/TS - bun add -g typescript
npm install -g typescript
brew install typescript
vue-tsc 💚 Vue - bun add -D vue-tsc
npm install -D vue-tsc
Security
Bandit 🐍 Python - 📦
Gitleaks 🔐 Secret Detection - brew install gitleaks
GitHub Releases
cargo-audit 🦀 Rust - cargo install cargo-audit
cargo-deny 🦀 Rust - cargo install cargo-deny
OSV-Scanner 🔒 Multi-ecosystem - GitHub Releases
pip-audit 🐍 Python - pip install pip-audit
uv add pip-audit
brew install pip-audit
Semgrep 🔒 Multi-language - pipx install semgrep
pip install semgrep
brew install semgrep
TruffleHog 🔐 Secret Detection - brew install trufflehog
GitHub Releases
AI Tools
idiom-review 🤖 AI · Multi-language - uv pip install 'lintro[ai]' + API key

📦 = bundled with lintro — no separate install needed
⚡ Node.js tools support --auto-install to install dependencies automatically
🟨 Node.js tools do not all resolve the same way — the command above is the one that works for that tool. Tools shown with -D (oxlint, oxfmt, stylelint, html-validate) are run through bunx/npx, which look in the checked project's node_modules and never at PATH, so a global or Homebrew install is not what Lintro picks up. The rest prefer a binary on PATH, which is what -g and brew install provide. See Node.js tool resolution.

🤖 AI-Powered Features (Optional)

Lintro includes optional AI-powered features that provide actionable summaries and interactive fix suggestions. AI features are BYO (Bring Your Own) API key — not enabled by default.

  • Providers: Anthropic Claude, OpenAI GPT
  • AI Summary — high-level assessment with pattern analysis (1 API call per run)
  • Interactive Fix Suggestions — AI-generated code diffs with risk classification
  • Post-fix Summary — contextualizes what was fixed and what remains
# Install with AI support
uv pip install 'lintro[ai]'
export ANTHROPIC_API_KEY=sk-ant-...   # or OPENAI_API_KEY

# Enable in config
# .lintro-config.yaml
# ai:
#   enabled: true
#   provider: anthropic

See the AI Features Guide for full documentation.

📦 Installation

Python 3.11+ is required. Check tool versions with lintro list-tools.

# Lightweight (CLI only — detects tools on PATH)
uv pip install lintro
brew tap lgtm-hq/tap && brew install lintro

# Full (bundled Python tools: ruff, black, mypy, bandit, pydoclint, yamllint)
uv pip install 'lintro[full]'
brew tap lgtm-hq/tap && brew install lintro-full

# Docker (all tools)
docker run --rm -v $(pwd):/code ghcr.io/lgtm-hq/py-lintro:latest check

# Docker (CLI only)
docker run --rm -v $(pwd):/code ghcr.io/lgtm-hq/py-lintro-base:latest check

# First run after lightweight install
lintro init
lintro doctor
lintro install --profile recommended

See Getting Started for detailed installation options.

💻 Usage

# Check all files (alias: chk)
lintro check .

# Auto-fix issues (alias: fmt)
lintro format .

# Grid output with grouping
lintro check --output-format grid --group-by file

# Run specific tools
lintro check --tools ruff,prettier,mypy

# Auto-install Node.js dependencies
lintro check --tools tsc --auto-install

# Exclude directories
lintro check --exclude "node_modules,dist,venv"

# Only scan files changed vs a git base ref (fast PR-scoped checks)
lintro check --diff              # vs the repo default branch (origin/HEAD)
lintro check --diff main         # vs an explicit ref
lintro format --diff             # format only changed files

# List available tools
lintro list-tools

🐳 Docker

# Run from GHCR (tools image - recommended)
docker run --rm -v $(pwd):/code ghcr.io/lgtm-hq/py-lintro:latest check

# With formatting
docker run --rm -v $(pwd):/code ghcr.io/lgtm-hq/py-lintro:latest check --output-format grid

# Base image (minimal, no external tools; separate GHCR package)
docker run --rm -v $(pwd):/code ghcr.io/lgtm-hq/py-lintro-base:latest check

📚 Documentation

Guide Description
Getting Started Installation, first steps, requirements
Configuration Tool configuration, options, presets
AI Features AI summaries, fix suggestions, config
Docker Usage Containerized development
GitHub Integration CI/CD setup, workflows
Pre-commit Integration Run lintro as a pre-commit hook
Contributing Development guide, adding tools
Troubleshooting Common issues and solutions

Advanced: Tool Analysis · Architecture · Security

🔨 Development

# Clone and install
git clone https://github.com/lgtm-hq/py-lintro.git
cd py-lintro
uv sync --dev

# Run tests
./scripts/local/run-tests.sh

# Run lintro on itself
./scripts/local/local-lintro.sh check --output-format grid

🤝 Community

📄 License

MIT License - see LICENSE for details.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

lintro-0.111.0.tar.gz (3.3 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

lintro-0.111.0-py3-none-any.whl (1.3 MB view details)

Uploaded Python 3

File details

Details for the file lintro-0.111.0.tar.gz.

File metadata

  • Download URL: lintro-0.111.0.tar.gz
  • Upload date:
  • Size: 3.3 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for lintro-0.111.0.tar.gz
Algorithm Hash digest
SHA256 0917191e3d4752c71dc3143a97786daa71ee19ff8f41276f191cfa1ff4491fc5
MD5 95fea9466f5300218f5524d3993f10da
BLAKE2b-256 1e9ca93e0b75a27f2d180e2848692cb5a1ebfd7a381c2322c3ee2527ecc454cd

See more details on using hashes here.

Provenance

The following attestation bundles were made for lintro-0.111.0.tar.gz:

Publisher: publish-pypi-on-tag.yml on lgtm-hq/py-lintro

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file lintro-0.111.0-py3-none-any.whl.

File metadata

  • Download URL: lintro-0.111.0-py3-none-any.whl
  • Upload date:
  • Size: 1.3 MB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for lintro-0.111.0-py3-none-any.whl
Algorithm Hash digest
SHA256 0f490ad933f153257e8d09a07400fd769660ba2790f8e7c6f3183bf2bdbb03d4
MD5 fd802e413198ee63714e3728d96e9422
BLAKE2b-256 34a10bf6fcdfb31b80078ca3d77e66adbef37a1fcb9c7eaeb7eb105680f92b33

See more details on using hashes here.

Provenance

The following attestation bundles were made for lintro-0.111.0-py3-none-any.whl:

Publisher: publish-pypi-on-tag.yml on lgtm-hq/py-lintro

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

0.147.3

2 files

0.147.2

2 files

0.147.1

2 files

0.147.0

2 files

0.146.0

2 files

0.145.0

2 files

0.144.0

2 files

0.143.0

2 files

0.142.1

2 files

0.142.0

2 files

0.141.4

2 files

0.141.3

2 files

0.141.2

2 files

0.141.1

2 files

0.141.0

2 files

0.140.1

2 files

0.140.0

2 files

0.139.0

2 files

0.138.1

2 files

0.138.0

2 files

0.137.7

2 files

0.137.6

2 files

0.137.5

2 files

0.137.4

2 files

0.137.3

2 files

0.137.2

2 files

0.137.1

2 files

0.137.0

2 files

0.136.0

2 files

0.135.1

2 files

0.135.0

2 files

0.134.0

2 files

0.133.0

2 files

0.132.0

2 files

0.131.5

2 files

0.131.4

2 files

0.131.3

2 files

0.131.2

2 files

0.131.1

2 files

0.131.0

2 files

0.130.0

2 files

0.129.0

2 files

0.128.0

2 files

0.127.0

2 files

0.126.0

2 files

0.125.0

2 files

0.124.0

2 files

0.123.3

2 files

0.123.2

2 files

0.123.1

2 files

0.123.0

2 files

0.122.0

2 files

0.120.0

2 files

0.119.0

2 files

0.118.5

2 files

0.118.1

2 files

0.118.0

2 files

0.117.2

2 files

0.117.1

2 files

0.117.0

2 files

0.116.2

2 files

0.116.1

2 files

0.116.0

2 files

0.115.4

2 files

0.115.3

2 files

0.115.2

2 files

0.115.1

2 files

0.115.0

2 files

0.114.1

2 files

0.114.0

2 files

0.113.3

2 files

0.113.2

2 files

0.113.1

2 files

0.113.0

2 files

0.112.7

2 files

0.112.6

2 files

0.112.5

2 files

0.112.4

2 files

0.112.3

2 files

0.112.2

2 files

0.112.1

2 files

0.112.0

2 files

This release

0.111.0 This release

2 files

0.110.0

2 files

0.109.0

2 files

0.108.0

2 files

0.107.0

2 files

0.106.0

2 files

0.105.2

2 files

0.105.0

2 files

0.104.3

2 files

0.104.2

2 files

0.104.1

2 files

0.101.0

2 files

0.100.0

2 files

0.99.0

2 files

0.98.0

2 files

0.97.1

2 files

0.97.0

2 files

0.96.0

2 files

0.95.0

2 files

0.94.8

2 files

0.94.7

2 files

0.94.6

2 files

0.94.5

2 files

0.94.4

2 files

0.94.3

2 files

0.94.2

2 files

0.94.1

2 files

0.94.0

2 files

0.93.1

2 files

0.93.0

2 files

0.92.0

2 files

0.91.59

2 files

0.91.58

2 files

0.91.57

2 files

0.91.56

2 files

0.91.55

2 files

0.91.54

2 files

0.91.53

2 files

0.91.52

2 files

0.91.51

2 files

0.91.50

2 files

0.91.49

2 files

0.91.48

2 files

0.91.47

2 files

0.91.46

2 files

0.91.45

2 files

0.91.44

2 files

0.91.43

2 files

0.91.42

2 files

0.91.41

2 files

0.91.40

2 files

0.91.39

2 files

0.91.38

2 files

0.91.37

2 files

0.91.35

2 files

0.91.34

2 files

0.91.33

2 files

0.91.32

2 files

0.91.31

2 files

0.91.30

2 files

0.91.29

2 files

0.91.28

2 files

0.91.25

2 files

0.91.24

2 files

0.91.23

2 files

0.91.22

2 files

0.91.21

2 files

0.91.20

2 files

0.91.19

2 files

0.91.18

2 files

0.91.17

2 files

0.91.16

2 files

0.91.15

2 files

0.91.14

2 files

0.91.13

2 files

0.91.12

2 files

0.91.11

2 files

0.91.10

2 files

0.91.9

2 files

0.91.8

2 files

0.91.7

2 files

0.91.6

2 files

0.91.5

2 files

0.91.4

2 files

0.91.3

2 files

0.91.2

2 files

0.91.1

2 files

0.91.0

2 files

0.90.1

2 files

0.90.0

2 files

0.89.1

2 files

0.89.0

2 files

0.88.1

2 files

0.88.0

2 files

0.87.1

2 files

0.87.0

2 files

0.86.0

2 files

0.85.2

2 files

0.85.1

2 files

0.85.0

2 files

0.84.1

2 files

0.84.0

2 files

0.83.0

2 files

0.82.3

2 files

0.82.2

2 files

0.82.1

2 files

0.82.0

2 files

0.81.3

2 files

0.81.2

2 files

0.81.1

2 files

0.81.0

2 files

0.80.11

2 files

0.80.10

2 files

0.80.9

2 files

0.80.8

2 files

0.80.7

2 files

0.80.6

2 files

0.80.5

2 files

0.80.4

2 files

0.80.3

2 files

0.80.2

2 files

0.80.1

2 files

0.80.0

2 files

0.79.4

2 files

0.79.3

2 files

0.79.2

2 files

0.79.1

2 files

0.78.2

2 files

0.78.1

2 files

0.78.0

2 files

0.77.4

2 files

0.77.3

2 files

0.77.2

2 files

0.77.1

2 files

0.77.0

2 files

0.76.0

2 files

0.75.0

2 files

0.74.0

2 files

0.73.0

2 files

0.72.0

2 files

0.71.3

2 files

0.71.2

2 files

0.71.1

2 files

0.71.0

2 files

0.70.6

2 files

0.70.5

2 files

0.70.4

2 files

0.70.3

2 files

0.70.2

2 files

0.70.1

2 files

0.70.0

2 files

0.69.5

2 files

0.69.4

2 files

0.69.3

2 files

0.69.2

2 files

0.69.1

2 files

0.69.0

2 files

0.68.0

2 files

0.67.0

2 files

0.66.0

2 files

0.65.0

2 files

0.64.5

2 files

0.64.4

2 files

0.64.3

2 files

0.64.2

2 files

0.64.1

2 files

0.64.0

2 files

0.63.4

2 files

0.63.3

2 files

0.63.2

2 files

0.63.1

2 files

0.63.0

2 files

0.62.4

2 files

0.62.3

2 files

0.62.2

2 files

0.62.1

2 files

0.62.0

2 files

0.61.3

2 files

0.61.2

2 files

0.61.1

2 files

0.61.0

2 files

0.60.2

2 files

0.60.1

2 files

0.60.0

2 files

0.59.0

2 files

0.58.5

2 files

0.58.4

2 files

0.58.3

2 files

0.58.2

2 files

0.58.1

2 files

0.58.0

2 files

0.57.7

2 files

0.57.6

2 files

0.57.5

2 files

0.57.4

2 files

0.57.3

2 files

0.57.2

2 files

0.57.1

2 files

0.57.0

2 files

0.56.0

2 files

0.55.0

2 files

0.54.0

2 files

0.53.0

2 files

0.52.17

2 files

0.52.16

2 files

0.52.15

2 files

0.52.14

2 files

0.52.13

2 files

0.52.12

2 files

0.52.11

2 files

0.52.10

2 files

0.52.9

2 files

0.52.8

2 files

0.52.7

2 files

0.52.6

2 files

0.52.5

2 files

0.52.4

2 files

0.52.3

2 files

0.52.2

2 files

0.52.1

2 files

0.52.0

2 files

0.51.6

2 files

0.51.5

2 files

0.51.4

2 files

0.51.3

2 files

0.51.2

2 files

0.51.1

2 files

0.51.0

2 files

0.50.2

2 files

0.50.1

2 files

0.50.0

2 files

0.49.0

2 files

0.48.0

2 files

0.47.1

2 files

0.47.0

2 files

0.46.0

2 files

0.44.2

2 files

0.44.0

2 files

0.43.1

2 files

0.43.0

2 files

0.42.6

2 files

0.42.5

2 files

0.42.4

2 files

0.42.2

2 files

0.42.1

2 files

0.41.0

2 files

0.40.6

2 files

0.40.5

2 files

0.40.4

2 files

0.40.3

2 files

0.40.2

2 files

0.40.1

2 files

0.40.0

2 files

0.39.0

2 files

0.38.0

2 files

0.37.14

2 files

0.37.13

2 files

0.37.12

2 files

0.37.11

2 files

0.37.10

2 files

0.37.9

2 files

0.37.8

2 files

0.37.7

2 files

0.37.6

2 files

0.37.5

2 files

0.35.0

2 files

0.34.0

2 files

0.33.0

2 files

0.32.0

2 files

0.31.0

2 files

0.30.0

2 files

0.29.0

2 files

0.28.0

2 files

0.27.0

2 files

0.26.0

2 files

0.25.0

2 files

0.24.5

2 files

0.24.4

2 files

0.24.3

2 files

0.24.2

2 files

0.24.1

2 files

0.24.0

2 files

0.23.1

2 files

0.22.0

2 files

0.21.2

2 files

0.21.0

2 files

0.20.0

2 files

0.19.2

2 files

0.19.1

2 files

0.19.0

2 files

0.18.1

2 files

0.18.0

2 files

0.17.2

2 files

0.17.1

2 files

0.17.0

2 files

0.16.1

2 files

0.16.0

2 files

0.15.3

2 files

0.15.2

2 files

0.15.1

2 files

0.15.0

2 files

0.14.1

2 files

0.14.0

2 files

0.13.3

2 files

0.13.2

2 files

0.13.1

2 files

0.13.0

2 files

0.12.0

2 files

0.11.0

2 files

0.10.0

2 files

0.9.0

2 files

0.8.0

2 files

0.7.0

2 files

0.6.3

2 files

0.6.2

2 files

0.6.1

2 files

0.6.0

2 files

0.5.3

2 files

0.5.2

2 files

0.5.1

2 files

0.5.0

2 files

0.4.3

2 files

0.4.2

2 files

0.3.2

2 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