Skip to main content

The fastest Python code quality engine — type checking, security scanning, dead code detection, complexity analysis & auto-fix in one Rust binary. Replaces mypy, flake8, bandit, vulture, radon, black & isort.

Project description

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
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

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

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

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

Project details


Download files

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

Source Distribution

ignyt-0.1.0.tar.gz (75.5 kB view details)

Uploaded Source

Built Distribution

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

ignyt-0.1.0-py3-none-macosx_11_0_arm64.whl (2.0 MB view details)

Uploaded Python 3macOS 11.0+ ARM64

File details

Details for the file ignyt-0.1.0.tar.gz.

File metadata

  • Download URL: ignyt-0.1.0.tar.gz
  • Upload date:
  • Size: 75.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: maturin/1.12.6

File hashes

Hashes for ignyt-0.1.0.tar.gz
Algorithm Hash digest
SHA256 c2f5828cdc5d508cd3faa200d1df0e425b0812354c0bef62ad6c3142b12afc9b
MD5 81426f9a69b99d609a529d164be49bc1
BLAKE2b-256 048d532efe33c222c1853b4bc78d49bf856c02efe5e19f1c1f6d7c50642720db

See more details on using hashes here.

File details

Details for the file ignyt-0.1.0-py3-none-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for ignyt-0.1.0-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 1ac49b3a7f777d100f9d83dfd318a211600fb55c8c336758e142b90a846e699c
MD5 8e1330811c5e87292e406c3379e98475
BLAKE2b-256 21fed829a1c0b80e51d6286f3f75dc02466af8c3ddb67485aa127cdcca3bcac2

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page