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 -g html-validate
npm install -g 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 -g oxlint
npm install -g oxlint
pydoclint 🐍 Python - 📦
ShellCheck 🐚 Shell Scripts - brew install shellcheck
GitHub Releases
Yamllint 🧾 YAML - 📦
Formatters
Black 🐍 Python 📦
Oxfmt 🟨 JS/TS bun add -g oxfmt
npm install -g 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 -g stylelint
npm install -g 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

🤖 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.91.35.tar.gz (2.8 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.91.35-py3-none-any.whl (992.0 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for lintro-0.91.35.tar.gz
Algorithm Hash digest
SHA256 5b199c044566fc3234681b1f3f80b1423e120af42d7f91e94ef3a8b7a6c9ecb9
MD5 1995549ba768b315c7d5f1e95ab40110
BLAKE2b-256 be4742a0bad8cabf86cf25f4d7eb9915cc9b04a4f346b9fd7d5ca788a75911dc

See more details on using hashes here.

Provenance

The following attestation bundles were made for lintro-0.91.35.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.91.35-py3-none-any.whl.

File metadata

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

File hashes

Hashes for lintro-0.91.35-py3-none-any.whl
Algorithm Hash digest
SHA256 60dc27e749ef67b8396c462fd4a645120c6921e602621fe5f13ff091ed9bcb50
MD5 092765b278b299f8728556fb2e0ac184
BLAKE2b-256 ae8a1088f3e33e6a8e9096f3c5cd5ed3bf20724f45ee122f851822f1965d2e81

See more details on using hashes here.

Provenance

The following attestation bundles were made for lintro-0.91.35-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

0.111.0

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

This release

0.91.35 This release

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