Skip to main content

Ignyt

The fastest Python code quality engine in the world.

PyPI Python CI License


One binary. Zero config. Replaces mypy, flake8, bandit, vulture, radon, black, and isort.

Ignyt is a standalone Python code quality engine written in Rust. It performs type checking, security scanning, dead code detection, complexity analysis, format checking, auto-fixing, and project cleanup — all in a single binary that runs 10-100x faster than the tools it replaces.


Why Ignyt?

Problem Before (multiple tools) After (Ignyt)
Type checking mypy ignyt types
Security scanning bandit ignyt security
Dead code detection vulture ignyt dead
Complexity analysis radon ignyt complexity
Import sorting isort ignyt fmt
Linting flake8 ignyt check
Auto-fixing black + manual ignyt fix
Cleanup pyclean ignyt clean
.gitignore validation manual review ignyt gitignore
Install pip install mypy flake8 bandit vulture radon black isort pip install ignyt
Config files 7 config files 1 ignyt.toml (optional)
Speed 30-60 seconds on large projects < 1 second

Installation

pip install ignyt

Works on Linux, macOS, and Windows. No Python dependencies. No compilation. Just install and run.

Quick Start

# Run all checks on your project
ignyt check src/

# Check a single file
ignyt check app/main.py

# Check everything in current directory
ignyt check .

# Run specific engines
ignyt types src/         # Type checking only
ignyt security src/      # Security scanning only
ignyt dead src/          # Dead code detection only
ignyt complexity src/    # Complexity analysis only

# Auto-fix safe issues
ignyt fix src/

# Get help on a specific rule
ignyt explain SEC001

# Watch mode — re-runs on file changes
ignyt watch src/

# JSON output for CI/CD integration
ignyt check --format json src/

# Remove Python debris (__pycache__, .pyc, .egg-info, etc.)
ignyt clean
ignyt clean --dry-run    # Preview what would be removed

# Validate .gitignore
ignyt gitignore          # Check for issues
ignyt gitignore --init   # Generate a Python .gitignore

What It Catches

Security (SEC001-SEC012)

Catches vulnerabilities before they reach production.

Code Name Description
SEC001 hardcoded-password Hardcoded credentials in source code
SEC002 sql-injection SQL query built via string interpolation
SEC003 shell-injection subprocess with shell=True
SEC004 pickle-usage pickle.loads/load can execute arbitrary code
SEC005 yaml-unsafe-load yaml.load() without SafeLoader
SEC006 xml-bomb XML parsing vulnerable to XXE attacks
SEC007 assert-used assert removed under -O mode
SEC008 weak-crypto MD5/SHA1 hash algorithms
SEC009 hardcoded-token Hardcoded API tokens/keys
SEC010 debug-enabled DEBUG = True in production
SEC011 eval-usage eval()/exec() usage
SEC012 path-traversal File path from unsanitized input

Type Checking (TYPE001-TYPE007)

Finds type errors without running your code.

Code Name Description
TYPE001 missing-return Function with return annotation but no return
TYPE002 incompatible-default Default value type conflicts with annotation
TYPE003 missing-annotation Public function missing return type annotation
TYPE004 redundant-cast Redundant type cast on already-typed parameter
TYPE005 mutable-default Mutable default argument (list, dict, set)
TYPE006 redundant-isinstance Redundant isinstance check on typed parameter
TYPE007 none-not-checked Optional parameter used without None check

Dead Code (DEAD001-DEAD006)

Eliminates unused code that bloats your project.

Code Name Description
DEAD001 unused-function Private function never called
DEAD002 unused-class Private class never referenced
DEAD003 unused-variable Variable assigned but never used
DEAD004 unused-import Import never used
DEAD005 unused-argument Function argument never used
DEAD006 unreachable-code Code after return/raise/break/continue

Complexity (CMPLX001-CMPLX003)

Keeps functions simple and maintainable.

Code Name Description
CMPLX001 high-cyclomatic Too many decision branches
CMPLX003 too-many-arguments Too many function parameters

Format (FMT001-FMT002)

Enforces consistent code style.

Code Name Description
FMT001 unsorted-imports Imports not sorted alphabetically
FMT002 line-too-long Line exceeds max length

Gitignore (GIT001-GIT006)

Validates your .gitignore for Python best practices.

Code Name Description
GIT001 missing-gitignore No .gitignore file found
GIT002 missing-python-patterns Missing essential Python ignore patterns
GIT003 duplicate-entry Same pattern appears multiple times
GIT004 invalid-pattern Trailing whitespace, invalid globs, etc.
GIT005 overly-broad-pattern Pattern too broad (e.g., *.py, src/)
GIT006 missing-secrets-pattern Missing .env, *.pem, *.key patterns

Auto-Fix

Ignyt can automatically fix safe issues:

ignyt fix src/

What it fixes:

  • Removes unused imports (DEAD004)
  • Converts yaml.load() to yaml.safe_load() (SEC005)
  • Sorts imports alphabetically (FMT001)

Project Cleanup

Remove Python build debris instantly:

ignyt clean           # Remove all debris
ignyt clean --dry-run # Preview what would be removed
ignyt clean src/      # Clean specific directory

What it removes: __pycache__, .pyc, .pyo, .egg-info, .pytest_cache, .mypy_cache, .ruff_cache, .tox, .nox, .eggs, .pytype, .hypothesis

Gitignore Validation

Validate your .gitignore follows Python best practices:

ignyt gitignore          # Check for issues
ignyt gitignore --init   # Generate a Python .gitignore
ignyt gitignore ./myapp  # Check a specific project

What it checks: missing essential patterns, duplicate entries, trailing whitespace, overly broad rules (*.py, src/), missing secrets patterns (.env, *.pem)

Configuration

Zero configuration required. Optionally create an ignyt.toml in your project root:

[ignyt]
python = "3.12"
src = ["src/", "tests/"]
exclude = ["migrations/", "*_pb2.py"]

[ignyt.fmt]
line-length = 120
quote-style = "single"

[ignyt.types]
strict = true
check-untyped-defs = true

[ignyt.security]
level = "high"
ignore = ["SEC007"]

[ignyt.complexity]
max-cyclomatic = 15
max-args = 8

[ignyt.rules]
error = ["SEC001", "TYPE001"]
warn = ["DEAD001"]
skip = ["FMT002"]

CI/CD Integration

GitHub Actions

- name: Install Ignyt
  run: pip install ignyt

- name: Run code quality checks
  run: ignyt check --format json src/

Pre-commit Hook

#!/bin/sh
ignyt check . && ignyt clean --dry-run

Performance

Ignyt is built for speed:

  • Rayon — parallel file analysis across all CPU cores
  • rustpython-parser — zero-copy Python AST parsing
  • LTO + single codegen unit — maximum binary optimization
  • Zero dependencies — no Python runtime overhead

Architecture

crates/
  ignyt-cli/          # CLI entry point, command dispatch, output rendering
  ignyt-ast/          # Python AST parsing (via rustpython-parser)
  ignyt-types/        # Type inference and checking engine
  ignyt-security/     # Security pattern matching (bandit replacement)
  ignyt-dead/         # Dead code and unused symbol detection
  ignyt-complexity/   # Cyclomatic and cognitive complexity analysis
  ignyt-fmt/          # Import sorting and format checking
  ignyt-diagnostics/  # Shared diagnostic types and error handling
  ignyt-config/       # TOML configuration parsing
  ignyt-fix/          # Auto-fix engine

License

MIT

Metadata

Release files for ignyt 0.2.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 ignyt 0.2.0
File Size Uploaded
ignyt-0.2.0.tar.gz 74.7 kB Details

Built distributions (wheels)

Table of built distributions (wheels) for ignyt 0.2.0
File
ignyt-0.2.0-py3-none-win_amd64.whl Python 3 none Windows x86-64 Details
ignyt-0.2.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl Python 3 none Linux glibc 2.17+ x86-64 Details
ignyt-0.2.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl Python 3 none Linux glibc 2.17+ ARM64 Details
ignyt-0.2.0-py3-none-manylinux_2_5_x86_64.manylinux1_x86_64.whl Python 3 none Linux glibc 2.5+ x86-64 Details
ignyt-0.2.0-py3-none-macosx_11_0_arm64.whl Python 3 none macOS 11.0+ ARM64 Details
ignyt-0.2.0-py3-none-macosx_10_12_x86_64.whl Python 3 none macOS 10.12+ x86-64 Details

Total release size: 13.2 MB

Release files / ignyt-0.2.0.tar.gz

Download URL ignyt-0.2.0.tar.gz
Size 74.7 kB
Tags Source
SHA-256 checksum
How to use checksums
cb68c62cc67a1792b2c8fc05e4d3d809b1113c6e9aeab18331cdf2469ed052e7
BLAKE2b-256 checksum
How to use checksums
19d5cc4c934343bda5afc18e66cc155f41212c31d1be1c986e0f86b24a4f6a50
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.12.6

Release files / ignyt-0.2.0-py3-none-win_amd64.whl

Download URL ignyt-0.2.0-py3-none-win_amd64.whl
Size 2.1 MB
Tags Python 3 Windows x86-64
SHA-256 checksum
How to use checksums
38a882100e2ef6f9442b90a5f0c069dee5c88d876bff4b5eb97f039dbb846005
BLAKE2b-256 checksum
How to use checksums
833e31546463c9623c69c5fde1b2ab2147b45fedfce665a1f5c313dafba472ab
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.12.6

Release files / ignyt-0.2.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL ignyt-0.2.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 2.3 MB
Tags Linux glibc 2.17+ x86-64 Python 3
SHA-256 checksum
How to use checksums
06f4b269e68e676729d67ae861ff019c6c8e96779eb2da9d38bd564450908af4
BLAKE2b-256 checksum
How to use checksums
d32252f5ada3a6432170bf85fbd1c36266c26dcee52ff8417d0ba584e7891254
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.12.6

Release files / ignyt-0.2.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL ignyt-0.2.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 2.2 MB
Tags Linux glibc 2.17+ ARM64 Python 3
SHA-256 checksum
How to use checksums
1f6df31338a175f1be5777a99bdbbccb67a16daa8b707c1e3fd20d27ce113c5c
BLAKE2b-256 checksum
How to use checksums
dfcead80c529f71209c597ce0de864457b48e1d8967033de48eef52947e47877
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.12.6

Release files / ignyt-0.2.0-py3-none-manylinux_2_5_x86_64.manylinux1_x86_64.whl

Download URL ignyt-0.2.0-py3-none-manylinux_2_5_x86_64.manylinux1_x86_64.whl
Size 2.3 MB
Tags Linux glibc 2.5+ x86-64 Python 3
SHA-256 checksum
How to use checksums
6a6be693f293e53446e555d907717bc5fc8497e08b7c0ab9b6908ddabe0fd4d3
BLAKE2b-256 checksum
How to use checksums
1e938911e8f209a0463a9379d96f28c81f48f92d23e54b04de58275ed5043b31
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.12.6

Release files / ignyt-0.2.0-py3-none-macosx_11_0_arm64.whl

Download URL ignyt-0.2.0-py3-none-macosx_11_0_arm64.whl
Size 2.0 MB
Tags Python 3 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
0a4d38f1103ea7cacdca41c547e3c3a3ec23b70fd11f90e94be71d32bc03e56a
BLAKE2b-256 checksum
How to use checksums
b578755265633817249fe9a0e05d94a0dbb17dcd16a032f4e7da4cc0480b192d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.12.6

Release files / ignyt-0.2.0-py3-none-macosx_10_12_x86_64.whl

Download URL ignyt-0.2.0-py3-none-macosx_10_12_x86_64.whl
Size 2.2 MB
Tags Python 3 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
35258cc7d9f370b15da7eab916d64caffdcce9bdb8b7d1e9504e81709f53f82f
BLAKE2b-256 checksum
How to use checksums
1906154edb89559cbbde0f611001385daab58098767c4fd0a7575eb4cad0b602
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.12.6

Release history Release notifications | RSS feed

This release

0.2.0 This release

7 release files

0.1.0

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