npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

terrawiz

v1.0.0

Published

A tool to track and analyze Terraform modules used in GitHub, GitLab, Azure DevOps, and Bitbucket repositories

Downloads

273

Readme

Terrawiz

Discover and analyze Terraform and Terragrunt modules across GitHub, GitLab, Azure DevOps, Bitbucket, and local filesystems. Terrawiz gives you clear visibility into IaC usage: inventory modules, track versions, and export reports.

npm version Build Status TypeScript License: MIT

Key Features

  • Discover Terraform (.tf) and Terragrunt (.hcl) modules across repositories
  • Summarize usage by module source and version constraints
  • Export results as table, JSON, or CSV
  • Filter repositories by name (regex)
  • Parallel scanning with adjustable concurrency
  • Rate‑limit aware for GitHub/GitLab APIs

Quick Start (GitHub)

  1. Install the CLI
npm install -g terrawiz
  1. Set a GitHub token
# https://github.com/settings/tokens
export GITHUB_TOKEN=your_token
  1. Run your first scan
# Scan a GitHub organization
terrawiz scan github:your-org

# Or scan a single repository
terrawiz scan github:your-org/your-repo
  1. Export results (optional)
# JSON report
terrawiz scan github:your-org -f json -e audit.json

# CSV report
terrawiz scan github:your-org -f csv -e modules.csv

Example Output

The examples below are captured from running the command against the repository github:hashicorp/terraform-guides.

Table (human‑readable):

terrawiz scan github:hashicorp/terraform-guides
Infrastructure as Code Module Usage Report
============================
Platform: GitHub
Target: hashicorp/terraform-guides
Scope: Single repository: terraform-guides
Total modules found: 28 (28 Terraform, 0 Terragrunt)
Total files analyzed: 135 (124 Terraform, 11 Terragrunt)

Module Summary by Source:

Azure/compute/azurerm (1 instances, type: registry)
  Versions:
    - 1.1.5: 1 instances

./modules/openshift (1 instances, type: local)

git::ssh://[email protected]/hashicorp-modules/hashistack-gcp (1 instances, type: git)

... (additional sources omitted for brevity)

JSON (API‑friendly):

{
  "metadata": {
    "platform": "GitHub",
    "moduleCount": 28,
    "timestamp": "2025-09-14T16:06:48.575Z"
  },
  "modules": [
    {
      "source": "Azure/compute/azurerm",
      "sourceType": "registry",
      "version": "1.1.5",
      "repository": "hashicorp/terraform-guides",
      "filePath": "infrastructure-as-code/azure-vm/main.tf",
      "lineNumber": 19
    }
  ]
}

CSV (spreadsheet‑ready):

module,source_type,file_type,version,repository,file_path,line_number,file_link
Azure/compute/azurerm,registry,terraform,1.1.5,hashicorp/terraform-guides,infrastructure-as-code/azure-vm/main.tf,19,https://github.com/hashicorp/terraform-guides/blob/master/infrastructure-as-code/azure-vm/main.tf#L19
./modules/openshift,local,terraform,,hashicorp/terraform-guides,infrastructure-as-code/k8s-cluster-openshift-aws/main.tf,42,https://github.com/hashicorp/terraform-guides/blob/master/infrastructure-as-code/k8s-cluster-openshift-aws/main.tf#L42
git::ssh://[email protected]/hashicorp-modules/hashistack-gcp,git,terraform,,hashicorp/terraform-guides,infrastructure-as-code/hashistack/dev/terraform-gcp/main.tf,22,https://github.com/hashicorp/terraform-guides/blob/master/infrastructure-as-code/hashistack/dev/terraform-gcp/main.tf#L22

Authentication

  • GitHub

    • Env var: GITHUB_TOKEN (required)
    • Scope: public repos work with a basic token; for private repos and org scans, grant repo (private) and read:org as needed.
    • GitHub Enterprise uses the same GITHUB_TOKEN; include the host in the source (e.g., github://github.company.com/org).
  • GitLab

    • Env var: GITLAB_TOKEN (required)
    • Scope: read_api (or api) for private projects; sufficient rights to list projects and read files.
    • Self‑hosted GitLab uses the same GITLAB_TOKEN; include the host in the source (e.g., gitlab://gitlab.company.com/group).
  • Azure DevOps

    • Env var: AZURE_DEVOPS_TOKEN (required)
    • Scope: a PAT with read access to code repositories (Code (Read)).
    • Examples: azure:organization/project, azure:organization/project/repository.
  • Bitbucket

    • Env var: BITBUCKET_TOKEN (required)
    • Use an OAuth bearer token, or set BITBUCKET_TOKEN to username:app_password for app-password auth.
    • For self-hosted Bitbucket Server/Data Center, use a personal access token and provide the host in source format (bitbucket://host/...) or set BITBUCKET_HOST.
    • Examples:
      • Cloud: bitbucket:workspace, bitbucket:workspace/repository
      • Self-hosted: bitbucket://bitbucket.example.com/PROJECT, bitbucket://bitbucket.example.com/PROJECT/repository
  • Local

    • No authentication required for local: sources.

CLI Reference

  • Command structure

    • terrawiz scan <source> [options]
    • terrawiz help [command]
  • Commands

    • scan — Scan and analyze IaC modules from a target
    • help — Show help for the CLI or a command
  • Positional arguments

    • source — what to scan. Supported forms:
      • GitHub (cloud): github:org or github:org/repo
      • GitHub Enterprise: github://host/org or github://host/org/repo
      • GitLab (cloud): gitlab:group or gitlab:group/project
      • GitLab Self‑Hosted: gitlab://host/group or gitlab://host/group/project
      • Azure DevOps: azure:organization, azure:organization/project, or azure:organization/project/repository
      • Azure DevOps Self‑Hosted: azure://host/organization/project or azure://host/organization/project/repository
      • Bitbucket (cloud): bitbucket:workspace or bitbucket:workspace/repository
      • Bitbucket self-hosted (Server/Data Center): bitbucket://host/PROJECT or bitbucket://host/PROJECT/repository
      • Local filesystem: local:., local:/abs/path, local:./relative/path
  • Options

    • -f, --format <format> — Output format: table (default), json, csv
    • -e, --export <file> — Write results to a file
    • -c, --concurrency <repos:files> — Concurrency (e.g., 5:10)
    • --limit <number> — Limit repositories to scan
    • --include-archived — Include archived repositories (default is skip)
    • -p, --pattern <regex> — Filter repositories by name pattern
    • --terraform-only — Scan only Terraform (.tf) files
    • --terragrunt-only — Scan only Terragrunt (.hcl) files
    • --disable-rate-limit — Disable API rate limiting
    • --debug — Enable verbose debug logging
    • [Deprecated] --org, --repo — Legacy flags (use the source argument instead)

Advanced Usage

  • Filtering & scope

    • Focus on certain repos: -p "^terraform-"
    • Restrict file types: --terraform-only or --terragrunt-only
    • Include archived repos: --include-archived
    • Limit breadth for quick checks: --limit 10
  • Performance & rate limits

    • Tune concurrency: -c 10:20 (repos:files)
    • Respect API limits by default; to disable: --disable-rate-limit
    • Use --debug to see detailed progress and timings
  • Enterprise/self‑hosted targets

    • GitHub Enterprise: github://github.company.com/org
    • GitLab self‑hosted: gitlab://gitlab.company.com/group
    • Azure DevOps self‑hosted: azure://azure.company.com/org/project
    • Bitbucket self‑hosted: bitbucket://bitbucket.company.com/PROJECT/repository
  • Local scanning

    • Scan current project: terrawiz scan local:.
    • Scan absolute path: terrawiz scan local:/path/to/terraform
  • CI/CD & Docker

      1. Set your token:
      export GITHUB_TOKEN=your_token
      1. Run a GitHub scan:
      docker run --rm -e GITHUB_TOKEN=$GITHUB_TOKEN \
        ghcr.io/efemaer/terrawiz:latest scan github:your-org -f json
      1. Export a report to your current directory:
      docker run --rm -e GITHUB_TOKEN=$GITHUB_TOKEN \
        --mount type=bind,src="$(pwd)",target=/workspace \
        ghcr.io/efemaer/terrawiz:latest scan github:your-org --terraform-only -f json -e export.json
      1. Scan local files from your current directory:
      docker run --rm --mount type=bind,src="$(pwd)",target=/workspace \
        ghcr.io/efemaer/terrawiz:latest scan local:/workspace
    • Always mount host paths to /workspace (never /app or /opt/terrawiz).
  • No‑install option

    • Prefer not to install globally? Run once with: npx terrawiz scan github:your-org

Contributing

We welcome contributions! See CONTRIBUTING.md for development setup and guidelines.

Quick start:

  1. Fork the repository
  2. Create a feature branch: git checkout -b feature/amazing-feature
  3. Run checks: npm test && npm run lint && npm run format:check
  4. Open a pull request

License

MIT — see LICENSE.