Skip to main content

A fast, flexible, and zero-config Git and filesystem secret scanner.

Project description

Keychase Logo

Keychase

A fast, flexible, zero-config secret scanner for Git repos and filesystems.

PyPI Python Versions License


Why Keychase?

Leaked API keys cost companies millions every year. Keychase catches hardcoded secrets before they reach production — in your files, in your git history, and in your GitHub repos.

  • 78+ built-in detectors — AWS, GCP, Azure, GitHub, Stripe, OpenAI, Slack, databases, private keys, and more
  • Zero configpip install keychase && keychase scan . — that's it
  • Git history scanning — catch secrets in old commits that were "deleted" but still exist in history
  • CI-friendly — exit code 1 when secrets are found, 0 when clean
  • Multiple output formats — beautiful terminal tables, JSON, and SARIF (GitHub Code Scanning)
  • Python-native — install via pip, extend with custom patterns, no binaries needed

Quick Start

Install

pip install keychase

Scan a local directory

keychase scan .

Scan with git history

keychase scan . --history

Scan a GitHub repository

export KEYCHASE_GITHUB_TOKEN=ghp_your_token_here
keychase scan owner/repo

JSON output (for CI/CD pipelines)

keychase scan . --format json --no-progress

SARIF output (for GitHub Code Scanning)

keychase scan . --format sarif --output results.sarif

CLI Reference

Usage: keychase [OPTIONS] COMMAND [ARGS]...

Commands:
  scan        Scan a directory or GitHub repo for secrets
  detectors   List all loaded detectors
  version     Show the keychase version

Scan Options:
  --history, -H          Also scan git commit history
  --depth, -d INTEGER    Max commits to scan (default: all)
  --branch, -b TEXT      Branch to scan
  --format, -f TEXT      Output format: table, json, sarif
  --token, -t TEXT       GitHub token for remote scans
  --patterns, -p TEXT    Path to custom regex patterns file
  --output, -o TEXT      Write report to file
  --no-progress          Disable progress bars (CI mode)

Supported Detectors

Keychase ships with 78 detectors across 9 categories:

Category Examples Count
AWS Access Key ID, Secret Key, MWS Key, Session Token 5
GCP API Key, Service Account JSON, OAuth Secrets, Firebase 5
GitHub PAT (classic + fine-grained), OAuth, Server Tokens 7
Cloud Providers Azure, DigitalOcean, Heroku, Alibaba 9
Payments Stripe, PayPal, Square, Shopify 12
Messaging Slack, Discord, Twilio, SendGrid, Mailgun, Telegram 12
AI/ML OpenAI, Anthropic, Hugging Face, Cohere, Replicate, Gemini, Pinecone 8
Databases MongoDB, PostgreSQL, MySQL, Redis, JDBC 6
Generic Passwords, Tokens, Private Keys, Bearer Auth, URLs with creds 14

List all detectors:

keychase detectors

Custom Patterns

Create a file with one regex per line:

# my_patterns.txt
MYCOMPANY_API_[A-Za-z0-9]{32}
internal_token_[0-9a-f]{64}
keychase scan . --patterns my_patterns.txt

Ignoring False Positives

Create a .keychaseignore file in your project root:

# Files to exclude from scanning
test_fixtures/
*.test.js
legacy_config.py

CI/CD Integration

GitHub Actions

- name: Secret Scan
  run: |
    pip install keychase
    keychase scan . --no-progress --format sarif --output keychase.sarif

- name: Upload SARIF
  uses: github/codeql-action/upload-sarif@v3
  with:
    sarif_file: keychase.sarif

Exit Codes

Code Meaning
0 No secrets found
1 Secrets detected
2 Configuration/runtime error

Development

# Clone the repo
git clone https://github.com/Iflal/keychase.git
cd keychase

# Install in editable mode with dev dependencies
pip install -e ".[dev]"

# Run tests
pytest tests/ -v

# Lint
ruff check keychase/ tests/

Roadmap

  • Pre-commit hook integration (keychase hook install)
  • Secret verification (check if leaked keys are still active)
  • Entropy-based detection for unknown secret formats
  • Docker image (docker run keychase scan .)
  • SaaS dashboard (scan orgs, scheduled scans, PDF reports)

Contributing

Contributions welcome! The easiest way to help:

  1. Add new detectors — see keychase/detectors/ for examples
  2. Report false positives — open an issue with the line that triggered it
  3. Improve patterns — submit a PR with a test case

License

MIT License — see LICENSE for details.

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

keychase-0.1.2.tar.gz (33.1 kB view details)

Uploaded Source

Built Distribution

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

keychase-0.1.2-py3-none-any.whl (36.8 kB view details)

Uploaded Python 3

File details

Details for the file keychase-0.1.2.tar.gz.

File metadata

  • Download URL: keychase-0.1.2.tar.gz
  • Upload date:
  • Size: 33.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for keychase-0.1.2.tar.gz
Algorithm Hash digest
SHA256 2ad058082a8c971d37093d8d47ced9bd80fba20ff48f53ed66ef5dfce9de7100
MD5 0e018bd2e8c30ef3db2ac20725c8e9a8
BLAKE2b-256 8f0ad77b874d591f3c626fc5824f25bd6a43813c69b516c5efb73589c6bc30a2

See more details on using hashes here.

Provenance

The following attestation bundles were made for keychase-0.1.2.tar.gz:

Publisher: release.yml on Iflal/keychase

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

File details

Details for the file keychase-0.1.2-py3-none-any.whl.

File metadata

  • Download URL: keychase-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 36.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for keychase-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 f4ae69e442bf816fe1331fd7a2b25ae6a555807a7980d88dd271a1c889a328da
MD5 5ef1d28af12c41e536efdf2bd2e3146f
BLAKE2b-256 b97dcf8f33d2021f97c408a2c761b31190b46eaabe949f8eee39eaf7fdd6e92f

See more details on using hashes here.

Provenance

The following attestation bundles were made for keychase-0.1.2-py3-none-any.whl:

Publisher: release.yml on Iflal/keychase

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

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