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-0.5.5-cp38-abi3-win_amd64.whl (1.2 MB view details)

Uploaded CPython 3.8+Windows x86-64

leakguard-0.5.5-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-0.5.5-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.5 MB view details)

Uploaded CPython 3.8+manylinux: glibc 2.17+ ARM64

leakguard-0.5.5-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-0.5.5-cp38-abi3-win_amd64.whl.

File metadata

  • Download URL: leakguard-0.5.5-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-0.5.5-cp38-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 cc3783b3bfa02f49d0dff955bdb852c33c95d783eee4608142ac704122291b17
MD5 77e4c6bc205f3a289ef0614a4acb1a65
BLAKE2b-256 5e818e2c230e84443950aa67e1ee1daee70bdd17d1944668b5e0edac8df64e11

See more details on using hashes here.

Provenance

The following attestation bundles were made for leakguard-0.5.5-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-0.5.5-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for leakguard-0.5.5-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 da6de180c53cbe2525347eadb084e052133d2b5c605bbfb0871a70232b112f40
MD5 ce6c6ac4c327a988098c48539bd56b1c
BLAKE2b-256 5f882bdc0379b99ee334c3a9d5bb5a8c1a56850d38e8ed817f401123974c31d0

See more details on using hashes here.

Provenance

The following attestation bundles were made for leakguard-0.5.5-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-0.5.5-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for leakguard-0.5.5-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 8418ca7c1e095dcc0f4c658090908e137a7fecc48ba03fe7b2ad3a1d1d11ed3c
MD5 95b6874b76d45984f4130ee7e8279a95
BLAKE2b-256 bc8ee7b0f41000115eea14b8d985b43c484e3e75ab6d5ef8ef0334459598474f

See more details on using hashes here.

Provenance

The following attestation bundles were made for leakguard-0.5.5-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-0.5.5-cp38-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl.

File metadata

File hashes

Hashes for leakguard-0.5.5-cp38-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Algorithm Hash digest
SHA256 4a99a90a126097bd5ee5826618f15fc0e56c8c17d4363ffac0fdd0fc5c5a3cec
MD5 c3480ff3111fe050c74538b0c313fa7b
BLAKE2b-256 7bef6c71b1d22bdd61a95da779681054330fef815c4e4a4bb4915389e22769b6

See more details on using hashes here.

Provenance

The following attestation bundles were made for leakguard-0.5.5-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