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

@wireboundlabs/cli

v0.4.2

Published

Auth0 Management API CLI — bulk user search, block & org management, tenant logs & safe cleanup from the terminal. Dry-run default, JSON for CI, multi-env profiles.

Readme

wirebound — Auth0 Management API CLI for Users, Orgs, Logs & Tenant Maintenance

npm version npm downloads CI codecov GitHub release License: MIT Node.js TypeScript GitHub stars

wirebound is the Auth0 CLI for operating live tenants — bulk user search & block, Auth0 Organizations management, tenant log forensics, and safe cleanup from your terminal. Built on the Auth0 Management API with dry-run by default, live progress, JSON for CI, and multi-environment profiles (dev, staging, production).

Install @wireboundlabs/cli · run wirebound

npm install -g @wireboundlabs/cli
wirebound setup --profile dev --default
wirebound auth0 users search --query 'email:*@yourcompany.com'

Auth0 CLI for: user management · bulk block/unblock · organization members · tenant log search · duplicate-email audits · safe automation · dev/staging/prod profiles


Why teams choose wirebound

| | | |---|---| | Safe by default | Every destructive command dry-runs first. Review the output, then pass --confirm. No surprises in production. | | Built for bulk work | Block hundreds of users with a Lucene query. Add or remove org members in batch. Find duplicate emails before cleanup. | | CI-ready | --json output, predictable exit codes, automatic 429 retry, and plan-aware rate limits. Drop it into GitHub Actions today. | | Multi-environment profiles | Store credentials in .wirebound/profiles/ per repo — switch tenants with --profile staging or $WIREBOUND_PROFILE. | | Clear feedback | Live progress bars on long searches and bulk mutations so you always know work is happening. | | Repo-native setup | wirebound setup writes gitignored config, validates credentials with --check, and sets a default profile in one flow. |

Not a replacement for the official Auth0 CLI. That tool excels at deploying Actions, applications, and Universal Login assets. wirebound is the Auth0 Management API CLI for operating a live tenant — user hygiene, B2B orgs, log forensics, and safe bulk mutations.


Install

npm install -g @wireboundlabs/cli
wirebound --help

Requires Node.js 24+.


Quick start (3 steps)

1. Connect your Auth0 tenant

Create a Machine-to-Machine (M2M) app authorized for the Auth0 Management API. Step-by-step setup (~5 min).

wirebound setup --profile dev --default
wirebound setup --profile dev --check    # verify credentials

Add staging and production the same way:

wirebound setup --profile staging
wirebound setup --profile production
wirebound setup --list

2. Preview any change (dry-run is the default)

wirebound auth0 users cleanup-google-orphans          # shows candidates — deletes nothing
wirebound auth0 users block --query 'blocked:true'
wirebound auth0 orgs members add --org-name acme --email [email protected]

3. Apply when you're ready

wirebound auth0 users cleanup-google-orphans --confirm
wirebound auth0 users block --query 'email:*@bad-domain.com' --confirm

Switch tenants anytime:

wirebound auth0 users search --query 'email:*@acme.com' --profile staging
export WIREBOUND_PROFILE=production
wirebound auth0 orgs list

What you can do

| Task | Command | |------|---------| | Search Auth0 users (Lucene v3) | wirebound auth0 users search --query '...' | | Get a user by email or ID | wirebound auth0 users get --email [email protected] | | Block / unblock users in bulk | wirebound auth0 users block --query '...' | | Find duplicate emails across connections | wirebound auth0 users duplicate-emails | | List Auth0 Organizations | wirebound auth0 orgs list | | Manage org members (add / remove / list) | wirebound auth0 orgs members ... | | Search Auth0 tenant logs | wirebound auth0 logs search --query 'type:failed_login' | | Clean up Google-only orphan users | wirebound auth0 users cleanup-google-orphans | | Switch dev / staging / prod | wirebound auth0 ... --profile production |


Common recipes

Look up a user instantly

wirebound auth0 users get --email [email protected]
wirebound auth0 users get --id auth0|abc123 --json

Block suspicious accounts in bulk

# Preview who would be blocked
wirebound auth0 users block --query 'email:*@suspicious-domain.com'

# Apply after review
wirebound auth0 users block --query 'email:*@suspicious-domain.com' --confirm

Manage Auth0 Organizations (B2B)

wirebound auth0 orgs list
wirebound auth0 orgs members list --org-name acme-corp
wirebound auth0 orgs members add --org-name acme-corp --email [email protected]        # dry-run
wirebound auth0 orgs members add --org-name acme-corp --email [email protected] --confirm
wirebound auth0 orgs members remove --org-name acme-corp --query 'email:*@acme.com' --confirm

Investigate failed logins and auth events

wirebound auth0 logs search --query 'type:failed_login' --limit 50
wirebound auth0 logs search --from 2026-06-01 --to 2026-06-16 --query 'type:f'

Audit email collisions before deleting users

Duplicate emails often mean linked accounts or migration leftovers — find them before running cleanup:

wirebound auth0 users duplicate-emails
wirebound auth0 users duplicate-emails --json

# Then preview Google-only orphans (dry-run by default)
wirebound auth0 users cleanup-google-orphans

# Apply only after reviewing both reports
wirebound auth0 users cleanup-google-orphans --confirm

Commands

| Command | Description | |---------|-------------| | wirebound setup | Interactive Auth0 credential setup with optional --check | | wirebound auth0 users search | Search users with Lucene v3 query | | wirebound auth0 users get | Get a user by email or user ID | | wirebound auth0 users duplicate-emails | Find users sharing the same email across records | | wirebound auth0 users block | Block users by email, ID, or query (dry-run by default) | | wirebound auth0 users unblock | Unblock users by email, ID, or query (dry-run by default) | | wirebound auth0 orgs list | List Auth0 organizations in the tenant | | wirebound auth0 orgs members list | List members of an organization | | wirebound auth0 orgs members add | Add users to an organization (dry-run by default) | | wirebound auth0 orgs members remove | Remove users from an organization (dry-run by default) | | wirebound auth0 logs search | Search tenant logs with Lucene query syntax | | wirebound auth0 users cleanup-google-orphans | Remove users with exactly one Google identity (dry-run by default) |

Full Auth0 guide: docs/vendors/auth0.md


Configuration

| Method | When to use | |--------|-------------| | wirebound setup --profile <name> | Recommended — per-repo, per-environment config | | --profile / $WIREBOUND_PROFILE | Switch tenants or environments on the fly | | Global profiles (~/.config/wirebound/profiles/) | Shared credentials outside a repo | | export AUTH0_* | CI/CD and one-off scripts | | CLI flags (--domain, --client-id, …) | Debugging only — avoid for secrets |

Precedence (highest wins): CLI flags → environment variables → named profile (repo-local, then global) → default profile (.wirebound/default) → legacy config.env.

Full guide: docs/CONFIGURATION.md

Repo layout

my-app/
└── .wirebound/
    ├── default              # e.g. "dev"
    └── profiles/
        ├── dev.env
        ├── staging.env
        └── production.env

For pipelines, prefer environment variables or GitHub secrets over repo-local profiles — see CI / automation.


Auth0 credentials

| Variable | Description | |----------|-------------| | AUTH0_DOMAIN | Tenant domain (no https://) | | AUTH0_MGMT_CLIENT_ID | M2M Client ID | | AUTH0_MGMT_CLIENT_SECRET | M2M Client Secret | | AUTH0_PLAN | Optional. free (default), essentials-professional, or enterprise | | AUTH0_TENANT_ENV | Optional. production (default) or non-production — Enterprise only | | AUTH0_RPS | Optional global rate override (req/s) | | WIREBOUND_PROFILE | Default profile name (optional) |

Required Management API scopes depend on the commands you run — see docs/vendors/auth0.md.


CI / automation

wirebound is built for scripted tenant operations: --json for machine-readable output, non-zero exit codes on failure, automatic HTTP 429 retries, and dry-run by default on destructive commands.

1. Store Auth0 credentials as secrets

In GitHub Actions (or your CI provider), add repository or environment secrets:

| Secret | Value | |--------|--------| | AUTH0_DOMAIN | Tenant domain, e.g. acme.us.auth0.com (no https://) | | AUTH0_MGMT_CLIENT_ID | M2M app Client ID | | AUTH0_MGMT_CLIENT_SECRET | M2M app Client Secret |

Optional for correct rate limits on paid tenants:

| Secret / env | When | |--------------|------| | AUTH0_PLAN | essentials-professional or enterprise | | AUTH0_TENANT_ENV | non-production for Enterprise dev/staging tenants |

Create a dedicated Machine-to-Machine app with only the scopes you need. Do not commit credentials or .wirebound/ profile files to git.

2. Install wirebound in the job

Requires Node.js 24+.

- uses: actions/setup-node@v6
  with:
    node-version: 24

# Pin a version (recommended in CI)
- run: npm install -g @wireboundlabs/[email protected]

# Or run without a global install
- run: npx @wireboundlabs/[email protected] auth0 users search --help

3. Run commands with --json

Pass credentials via env (never on the command line). Always add --json so stdout is a single JSON document suitable for jq or artifact upload.

env:
  AUTH0_DOMAIN: ${{ secrets.AUTH0_DOMAIN }}
  AUTH0_MGMT_CLIENT_ID: ${{ secrets.AUTH0_MGMT_CLIENT_ID }}
  AUTH0_MGMT_CLIENT_SECRET: ${{ secrets.AUTH0_MGMT_CLIENT_SECRET }}
run: wirebound auth0 users search --query 'email:*@example.com' --json

Exit codes: 0 on success; non-zero when Auth0 calls fail or a mutation reports errors (e.g. partial delete failures). Check $? or let the step fail the job.

4. Example: read-only audit (safe for scheduled CI)

Dry-run and read-only commands need no --confirm. Good for nightly or weekly checks:

name: Auth0 tenant audit

on:
  schedule:
    - cron: '0 6 * * 1'   # Mondays 06:00 UTC
  workflow_dispatch:

jobs:
  audit:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/setup-node@v6
        with:
          node-version: 24

      - run: npm install -g @wireboundlabs/cli

      - name: Duplicate email audit
        env:
          AUTH0_DOMAIN: ${{ secrets.AUTH0_DOMAIN }}
          AUTH0_MGMT_CLIENT_ID: ${{ secrets.AUTH0_MGMT_CLIENT_ID }}
          AUTH0_MGMT_CLIENT_SECRET: ${{ secrets.AUTH0_MGMT_CLIENT_SECRET }}
        run: |
          wirebound auth0 users duplicate-emails --json > duplicate-emails.json
          echo "duplicate groups: $(jq '.duplicateCount' duplicate-emails.json)"

      - name: Fail if duplicates found
        run: |
          count=$(jq '.duplicateCount' duplicate-emails.json)
          test "$count" -eq 0 || (echo "Found $count duplicate email group(s)" && exit 1)

      - name: Upload report
        uses: actions/upload-artifact@v4
        with:
          name: auth0-audit
          path: duplicate-emails.json

Other read-only commands: auth0 users search, auth0 logs search, auth0 orgs list, auth0 users cleanup-google-orphans (dry-run lists candidates only).

5. Example: destructive changes (manual approval)

Destructive commands dry-run by default. In CI, add --confirm only when you intend to mutate the tenant.

Use a separate job, workflow_dispatch (manual run), and a GitHub environment with required reviewers so production deletes are never accidental:

  cleanup:
    needs: audit
    if: github.event_name == 'workflow_dispatch'
    runs-on: ubuntu-latest
    environment: production-auth0   # configure approval rules in repo Settings → Environments
    steps:
      - uses: actions/setup-node@v6
        with:
          node-version: 24

      - run: npm install -g @wireboundlabs/cli

      - name: Preview Google-only orphans (dry-run)
        env:
          AUTH0_DOMAIN: ${{ secrets.AUTH0_DOMAIN }}
          AUTH0_MGMT_CLIENT_ID: ${{ secrets.AUTH0_MGMT_CLIENT_ID }}
          AUTH0_MGMT_CLIENT_SECRET: ${{ secrets.AUTH0_MGMT_CLIENT_SECRET }}
        run: wirebound auth0 users cleanup-google-orphans --json

      - name: Apply cleanup
        env:
          AUTH0_DOMAIN: ${{ secrets.AUTH0_DOMAIN }}
          AUTH0_MGMT_CLIENT_ID: ${{ secrets.AUTH0_MGMT_CLIENT_ID }}
          AUTH0_MGMT_CLIENT_SECRET: ${{ secrets.AUTH0_MGMT_CLIENT_SECRET }}
        run: wirebound auth0 users cleanup-google-orphans --confirm --json

Run the dry-run step in PR checks; gate --confirm behind environment approval or a protected branch.

CI checklist

  • [ ] M2M app scoped to least privilege for the job
  • [ ] Secrets in CI vault, not in repo or workflow logs
  • [ ] --json on every command you parse or archive
  • [ ] Dry-run or read-only commands in scheduled jobs
  • [ ] --confirm only in approved, manual, or explicitly trusted pipelines
  • [ ] Set AUTH0_PLAN (and AUTH0_TENANT_ENV if applicable) on paid tenants to avoid unnecessary 429s

More examples: docs/CONFIGURATION.md#ci--automation


Flags

| Flag | Description | |------|-------------| | --profile <name> | Load .wirebound/profiles/<name>.env or a global profile | | --confirm | Perform destructive actions (default is dry-run) | | --json | Machine-readable JSON output for scripts and CI | | --verbose | Log resolved tenant, rate limits, pagination, and 429 retries | | --limit <n> | Cap how many records to fetch or process | | --rps <n> | Override global Management API requests per second (default from plan) | | --auth0-plan <plan> | Auth0 subscription plan: free, essentials-professional, enterprise | | --auth0-tenant-env <env> | Tenant environment: production, non-production (Enterprise) |


FAQ

How is wirebound different from the Auth0 dashboard?

The dashboard is great for one-off edits. wirebound wraps the Auth0 Management API in scriptable commands with dry-run defaults — bulk user block, org membership changes, log search, and duplicate-email audits are faster from the terminal, especially in CI.

How is wirebound different from the official auth0 CLI?

The official Auth0 CLI deploys tenant configuration (Actions, applications, branding). wirebound operates a live tenant — user search, block/unblock, Auth0 Organizations, log forensics, and safe cleanup jobs.

Is it safe to run against production?

Yes. Dry-run is the default for every destructive command. Review output, then add --confirm. Use --profile production explicitly so you never accidentally target the wrong tenant.

Can I use this in GitHub Actions or CI pipelines?

Yes — see CI / automation for a full workflow, secrets setup, --json output, exit codes, and patterns for read-only audits vs destructive --confirm jobs.

What Auth0 Management API scopes do I need?

At minimum: read:users for search/get. Block/unblock needs update:users. Deletes need delete:users. Org commands need read:organizations and member mutation scopes. See the scope table.

Who is wirebound for?

  • Platform / identity engineers managing Auth0 tenants without clicking through the dashboard
  • Support teams looking up users, org membership, and login failures from the terminal
  • CI/CD pipelines that need scripted user block/unblock, org changes, or tenant audits
  • Multi-environment teams with repo-local Auth0 credentials per profile

Rate limits

Auth0 throttles Management API traffic by plan and endpoint. wirebound applies Auth0’s documented limits automatically.

| Plan | What to set | Global rate | |------|-------------|-------------| | Free / trial | (default — nothing to set) | 2 req/s | | Essentials / Professional | AUTH0_PLAN=essentials-professional | ~3 req/s + per-endpoint limits | | Enterprise production | AUTH0_PLAN=enterprise | 16 req/s | | Enterprise dev/staging | AUTH0_PLAN=enterprise + AUTH0_TENANT_ENV=non-production | 2 req/s |

Use --verbose to confirm resolved settings. Override the global rate with --rps or AUTH0_RPS if needed. The CLI retries on HTTP 429 using X-RateLimit-Reset.

See docs/CONFIGURATION.md for profile examples.

User search is capped at 1000 results per query (Auth0 platform limit).


Development

git clone https://github.com/wireboundlabs/wirebound-cli.git
cd wirebound-cli
npm install
npm run build
npm test
npm run test:coverage
./bin/dev.js auth0 users search --help

Like wirebound? Star the repo on GitHub — it helps others discover the CLI.


License

MIT · Wirebound Labs