Skip to main content

leakguard — fast secret scanner for your codebase

Project description

leakguard

leakguard banner

Fast, lightweight secret scanner for codebases (Rust CLI + Python package).

leakguard scans source files for accidentally committed credentials, tokens, and sensitive config values.

Why leakguard

  • 104 built-in rules across cloud, LLM, database, HTTP auth, observability, and SaaS ecosystems
  • Fast local scanning with sensible defaults
  • CI-friendly outputs: pretty, json, sarif, markdown
  • GitHub Actions summary support via --github-summary
  • False-positive controls: inline ignore markers + rule-level disable in config
  • Binary-safe scanning: non-text files are skipped
  • Safe defaults: .env files are excluded

Quickstart

Install from source

git clone https://github.com/adrian-lorenz/leakguard.git
cd leakguard
cargo install --path .

Install via pip

pip install leakguard-secret-leaks
leakguard check .

Use prebuilt binaries

Download the latest release from GitHub Releases.

Platform Binary
Linux x86_64 leakguard-linux-amd64
Linux ARM64 leakguard-linux-arm64
Windows x86_64 leakguard-windows-amd64.exe
macOS Apple Silicon leakguard-macos-arm64
chmod +x leakguard-linux-amd64
sudo mv leakguard-linux-amd64 /usr/local/bin/leakguard

CLI

Common commands

# Scan current directory
leakguard check

# Scan specific path
leakguard check --source ./src

# JSON for automation
leakguard check --format json

# SARIF for GitHub code scanning
leakguard check --format sarif

# Markdown report (useful for CI summaries)
leakguard check --format markdown

# Show warning-level findings in details
leakguard check --warnings

# Verbose file-level logging
leakguard check --verbose

# Max file size in KB (default: 1024)
leakguard check --max-size 512

# Use custom config file
leakguard check --config /path/to/leakguard.toml

# Write GitHub Actions job summary
leakguard check --github-summary

# Show all built-in rules
leakguard rules

# Create default config
leakguard init-config

Exit codes

Code Meaning
0 No findings, or only LOW / WARNING findings
1 At least one CRITICAL, HIGH, or MEDIUM finding

Python API

Use leakguard as a library, for example before sending text to an LLM:

from leakguard import scan_text, scan_text_dict, replace_text

findings = scan_text("My API key is sk-proj-abc123xyz...")
for f in findings:
    print(f.rule_id, f.severity, f.secret, f.secret_hash)

# Disable specific rules for this call
findings = scan_text("...", disable_rules=["http-insecure-url"])

# Optional replacer for secret output
findings = scan_text("...", replace_secret_with="[MASKED]")

# Directly sanitize text before sending it to an LLM
safe_text, replaced_any = replace_text(
    "My API key is sk-proj-abc123xyz...",
    replacement="[MASKED]"
)
if replaced_any:
    print("Secrets were replaced before LLM call")

Finding fields: rule_id, description, severity, line_number, line, secret, secret_hash, tags

Pydantic (dict-ready)

from pydantic import BaseModel
from leakguard import scan_text_dict

class Finding(BaseModel):
    rule_id: str
    description: str
    severity: str
    line_number: int
    line: str
    secret: str
    secret_hash: str
    tags: list[str]

rows = scan_text_dict("My API key is sk-proj-abc123xyz...")
findings = [Finding.model_validate(row) for row in rows]

Configuration

Generate a config file:

leakguard init-config

Default leakguard.toml:

[scan]
# Empty means all files except .env and .git
extensions = []
exclude_paths = []
exclude_files = []

[rules]
# Example: disable = ["jwt-token", "http-insecure-url"]
disable = []

Auto-loading behavior:

  • leakguard.toml in the current working directory is loaded automatically.

Suppression and false positives

Inline suppression markers on a line:

api_url = "http://internal-service/api"  # leakguard-ignore

Supported markers:

  • # leakguard-ignore
  • # noqa-secrets
  • # nosec-secrets

Built-in false-positive filtering includes patterns such as:

  • templated values ({DB_PASSWORD}, %(password)s)
  • shell variable references ($DB_PASSWORD)
  • attribute references (settings.DB_PASSWORD)
  • localhost URLs (http://localhost:8080)

Detection coverage

Current built-in categories include:

  • Cloud / VCS: AWS, GitHub/GitLab, Google, Stripe, Slack, NPM, Docker Hub
  • LLM / AI: OpenAI, Anthropic, Cohere, Mistral, Hugging Face, Groq, Perplexity, xAI, and related env leaks
  • Azure / M365: tenant/app credentials, storage/service keys, Graph, Teams webhooks
  • Databases / BaaS: PostgreSQL/MySQL/Mongo/Redis/MSSQL/JDBC, Supabase
  • Observability: Datadog, New Relic, Grafana, Honeycomb, OTLP-related patterns
  • HTTP/Auth: Bearer/Basic headers, credentialed URLs
  • Crypto / Generic: PEM keys, JWT-like tokens, high-entropy secret assignments

Use leakguard rules for the complete, authoritative list.

GitHub Actions

Example workflow job:

jobs:
  leakguard:
    name: leakguard secret scan
    runs-on: ubuntu-latest
    permissions:
      contents: read

    steps:
      - uses: actions/checkout@v4

      - name: Install leakguard
        run: |
          curl -sSfL \
            https://github.com/adrian-lorenz/leakguard/releases/latest/download/leakguard-linux-amd64 \
            -o /usr/local/bin/leakguard
          chmod +x /usr/local/bin/leakguard

      - name: Run scan
        run: leakguard check --format markdown >> "$GITHUB_STEP_SUMMARY"

Alternative install method:

- name: Install leakguard
  run: pip install leakguard-secret-leaks

License

MIT — Copyright (c) 2026 Adrian Lorenz a.lorenz@noa-x.de

Project details


Download files

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

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

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

leakguard-1.0.2-cp38-abi3-win_amd64.whl (1.2 MB view details)

Uploaded CPython 3.8+Windows x86-64

leakguard-1.0.2-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.5 MB view details)

Uploaded CPython 3.8+manylinux: glibc 2.17+ x86-64

leakguard-1.0.2-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.5 MB view details)

Uploaded CPython 3.8+manylinux: glibc 2.17+ ARM64

leakguard-1.0.2-cp38-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl (2.7 MB view details)

Uploaded CPython 3.8+macOS 10.12+ universal2 (ARM64, x86-64)macOS 10.12+ x86-64macOS 11.0+ ARM64

File details

Details for the file leakguard-1.0.2-cp38-abi3-win_amd64.whl.

File metadata

  • Download URL: leakguard-1.0.2-cp38-abi3-win_amd64.whl
  • Upload date:
  • Size: 1.2 MB
  • Tags: CPython 3.8+, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for leakguard-1.0.2-cp38-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 47311c6f51275d325edb47158af30f56d5d013f510fcb37da501f26e7c73fbbe
MD5 f5fa208f1e3ad8aad02da37037a3910b
BLAKE2b-256 87d4b21493fbab7489e238c17559dad08a05003abb338199623ec102b16e2bf7

See more details on using hashes here.

Provenance

The following attestation bundles were made for leakguard-1.0.2-cp38-abi3-win_amd64.whl:

Publisher: release.yml on adrian-lorenz/leakguard

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

File details

Details for the file leakguard-1.0.2-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for leakguard-1.0.2-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 bb9c27a1c7da1770c1a48b8eded8091dd04dfc90497bd647631cc6d73c809762
MD5 b3f89ba981b30667279c2baffa2b2cd9
BLAKE2b-256 49205d7ab4dbce91c36a082cc279e467e3e3a7a477534d9c3a938df41697c018

See more details on using hashes here.

Provenance

The following attestation bundles were made for leakguard-1.0.2-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: release.yml on adrian-lorenz/leakguard

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

File details

Details for the file leakguard-1.0.2-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for leakguard-1.0.2-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 625a9653a5d194871d0766eb09af38d21c955915072fd2183dd2ae576f4261bb
MD5 1559e531f42680cb42e584106657e8e2
BLAKE2b-256 f8d04b280f4d8d8ab09b95722019290f436dba3aee02cf1b40b496b64ae25783

See more details on using hashes here.

Provenance

The following attestation bundles were made for leakguard-1.0.2-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: release.yml on adrian-lorenz/leakguard

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

File details

Details for the file leakguard-1.0.2-cp38-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl.

File metadata

File hashes

Hashes for leakguard-1.0.2-cp38-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Algorithm Hash digest
SHA256 8196f8570b96237f6e1f3bd674b41b91d622c77b25a2f08c52b3004fa693480b
MD5 a9aa4adbb16942ab4c20908a664e0279
BLAKE2b-256 3386167960adec2094330caeb6943700cc0b4ad67a822673d9cd87ad994458df

See more details on using hashes here.

Provenance

The following attestation bundles were made for leakguard-1.0.2-cp38-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl:

Publisher: release.yml on adrian-lorenz/leakguard

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