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 -D @commitlint/cli @commitlint/config-conventional
npm install -D @commitlint/cli @commitlint/config-conventional
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 -D markdownlint-cli2
npm install -D 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 -D prettier
npm install -D 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 + bun add -D @astrojs/check
npm install astro + npm install -D @astrojs/check
Mypy 🐍 Python - 📦
svelte-check 🔥 Svelte - bun add -D svelte-check
npm install -D svelte-check
TypeScript 🟨 JS/TS - bun add -D typescript
npm install -D 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
🟨 Every Node.js tool resolves the same way: the checked project's node_modules/.bin first, then a binary on PATH, then a version-pinned bunx/npx fetch. A project devDependency (-D, shown above) is therefore always the best answer — it is lockfile-pinned and needs no network. A global (-g) or Homebrew install still works and is used when no local install exists. 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.117.2.tar.gz (3.4 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.117.2-py3-none-any.whl (1.3 MB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for lintro-0.117.2.tar.gz
Algorithm Hash digest
SHA256 8bf273b8d8421fd2592ed13a59fabfbc507bfc45adb71eab8c504f7ebda93947
MD5 568eb784c66a3334fdf4f8b863b7eb4d
BLAKE2b-256 f20a0df09f1f67b7421849e9b4512dcb5000411785079f642651ca9b867d4c5e

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: lintro-0.117.2-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.117.2-py3-none-any.whl
Algorithm Hash digest
SHA256 6adf04f8f9bc012505200922c5133268bc53b2a82704710790c5cf2f6bea99e6
MD5 477fda65f063378c3e0e692bbd1911e4
BLAKE2b-256 a9d120e302083617340671faf920a68920e163590067c211e74c59abbab7aef1

See more details on using hashes here.

Provenance

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

This release

0.117.2 This release

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

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