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

pushci

v1.7.4

Published

AI-native CI/CD that runs on your machine. Zero config, zero cost. Works inside AI agent sandboxes (Claude, Cursor, Windsurf). 33 languages, 40+ frameworks, 20 deploy targets, 25 installable skills, Tailscale mesh, blast radius analysis.

Readme

PushCI

Zero-config AI CI/CD. Runs on your machine. Free forever.

npm install -g pushci   # one-time install
pushci init             # AI detects your stack in 30 seconds
git push                # tests run automatically

Why PushCI?

In 2026, GitHub started charging $0.002/min for self-hosted runners that were previously free. PushCI never charges for local compute — ever.

| | PushCI | GitHub Actions | GitLab CI | Jenkins | |--|---------|---------------|-----------|---------| | Setup | 30 seconds | 30+ minutes | 30+ minutes | Hours | | Config | Zero (AI) | 50+ lines YAML | 50+ lines YAML | Groovy DSL | | Cost | $0 (your machine) | $0.008/min (hosted) / $0.002/min (self-hosted, as of 2026) | $0.008/min | Server costs | | Platforms | GitHub + GitLab + BB | GitHub only | GitLab only | All | | AI | Auto-detects stack | None | None | None |

Quick Start

# Install (pick one)
npm install -g pushci                                          # npm (recommended)
brew install finsavvyai/tap/pushci                             # Homebrew
go install github.com/finsavvyai/pushci/cmd/pushci@latest     # Go
curl -fsSL https://pushci.dev/install.sh | sh                  # Script

# Auto-detect your stack
pushci init

# Run CI locally
pushci run

# Something broken? Get actionable fixes
pushci troubleshoot

# Start webhook agent
GITHUB_TOKEN=xxx pushci agent

AI Agent Integration (MCP)

PushCI includes an MCP server for AI coding agents like Claude Code, Cursor, Windsurf, and Cline.

{
  "mcpServers": {
    "pushci": {
      "command": "pushci",
      "args": ["mcp"]
    }
  }
}

Available tools: pushci_init (detect stack), pushci_run (run pipeline), pushci_status (check results), pushci_doctor (diagnose env), pushci_secret_set (store secrets).

Natural language: pushci ask "set up CI for this project"

Supported

33 Languages: Go, Node/TS, Python, Rust, Java, C#, Ruby, PHP, Swift, Dart, Elixir, Zig, Scala, Haskell, Kotlin, Lua, Perl, R, Julia, OCaml, Nim, Crystal +more

40+ Frameworks: Next.js, Nuxt, SvelteKit, Django, FastAPI, Flask, Spring Boot, Rails, Laravel, Phoenix, Flutter +more

23 Deploy Targets: Cloudflare, AWS (ECS/Lambda/S3), GCP (Cloud Run/App Engine), Azure, Vercel, Railway, Fly.io, Netlify, Docker, Kubernetes, SSH

Messaging Channels

Control your CI/CD from WhatsApp, Slack, Discord, Telegram, or any webhook.

"run tests"        → PushCI runs your pipeline
"deploy staging"   → Deploys to staging
"status"           → Shows last run result
"diagnose"         → AI root-cause analysis

Connect from the dashboard at app.pushci.dev/channels, or via API:

curl -X POST https://api.pushci.dev/api/channels/connect \
  -H "Authorization: Bearer $TOKEN" \
  -d '{"channelType":"slack","credentials":{"accessToken":"xoxb-...","teamId":"T123"}}'

Supported platforms:

| Platform | Webhook | Response Limit | |----------|---------|----------------| | WhatsApp | Meta Business API | 4,000 chars | | Slack | Events API | 39,000 chars | | Discord | Interactions | 2,000 chars | | Telegram | Bot API | 4,000 chars | | Custom | Webhook | 40,000 chars |

Commands

pushci init         Detect stack and generate pushci.yml
pushci run          Execute pipeline checks
pushci deploy       Deploy to target environment
pushci diagnose     AI-diagnose failed runs
pushci status       Show last run results
pushci secret       Manage encrypted secrets
pushci heal         AI self-heal broken pipeline
pushci ask          Natural language CI commands
pushci generate     AI-generate pushci.yml
pushci migrate      Convert GitHub Actions workflow
pushci mcp          Start MCP server for AI agents
pushci agent        Start webhook agent server
pushci index        Build dependency graph for blast radius
pushci skill        Install/list/remove marketplace skills
pushci login        Authenticate with PushCI (Pro)
pushci logout       Remove saved credentials
pushci doctor       Check environment health
pushci troubleshoot Diagnose issues with actionable fixes
pushci trace        View Perfetto performance traces
pushci release      Build & publish release locally ($0)
pushci promote      Register with AI registries
pushci uninstall    Remove hooks, config, and .pushci
pushci version      Print version

See docs/CLI.md for the full CLI reference with flags, examples, and plan requirements.

Configuration

pushci.yml is optional — pushci init generates one that works, and zero-config mode auto-detects your stack. When you want more control, PushCI supports three authoring styles. Full reference is at pushci.dev/docs/pushci-yaml.

Simple example

Zero-config Node.js app with linear stages, single-target deploy on main, and Slack notifications. Drop this into your repo as pushci.yml and run pushci run.

on: [push, pull_request]

stages:
  - name: install
    checks:
      - name: deps
        run: pnpm install --frozen-lockfile

  - name: lint
    depends_on: [install]
    checks:
      - name: eslint
        run: pnpm lint

  - name: test
    depends_on: [install]
    checks:
      - name: vitest
        run: pnpm test

  - name: build
    depends_on: [install, lint, test]
    checks:
      - name: next-build
        run: pnpm build

deploy:
  trigger: push
  only_on: [main]
  run: npx wrangler pages deploy dist --project-name=my-app

notify:
  slack: "${{ secrets.SLACK_WEBHOOK }}"

Complex example — every feature

Parallel stages, cross-stage DAG, conditional checks, retries, timeouts, Docker-isolated steps, multi-environment staged deploy with an approval gate on production, and stage-scoped secrets.

on: [push, pull_request, workflow_dispatch]

stages:
  - name: install
    checks:
      - name: pnpm-install
        run: pnpm install --frozen-lockfile
        retry: 2
        timeout: 3m

  - name: quality
    depends_on: [install]
    parallel: true            # every check runs concurrently
    env:
      NODE_ENV: test
    checks:
      - name: typecheck
        run: pnpm tsc --noEmit
      - name: lint
        run: pnpm lint
      - name: format
        run: pnpm prettier --check .
      - name: audit
        run: pnpm audit --audit-level=high
        on_fail: warn         # log but don't fail the stage

  - name: test
    depends_on: [install]
    parallel: true
    env:
      DATABASE_URL: postgres://test:test@localhost:5432/test
    checks:
      - name: unit
        run: pnpm test:unit --coverage
      - name: integration
        run: pnpm test:integration
        retry: 1
        timeout: 5m
      - name: e2e
        if: branch == 'main' || branch =~ '^release/'
        run: pnpm test:e2e
        docker: mcr.microsoft.com/playwright:v1.49.0-focal
        timeout: 10m

  - name: security
    depends_on: [install]
    checks:
      - name: secret-scan
        run: npx gitleaks detect --no-git
      - name: sast
        run: pushci scan --engine claude --fail-on high

  - name: build
    depends_on: [quality, test, security]
    checks:
      - name: next-build
        run: pnpm build
      - name: bundle-size
        run: npx size-limit
        line-limit: 10

deploy:
  trigger: push
  environments:
    - name: staging
      only_on: [develop]
      run: npx wrangler pages deploy dist --project-name=app-staging
      env:
        CF_API_TOKEN: "${{ secrets.CF_API_TOKEN_STAGING }}"
    - name: production
      only_on: [main]
      approve: true           # requires interactive approval
      run: npx wrangler pages deploy dist --project-name=app-prod
      env:
        CF_API_TOKEN: "${{ secrets.CF_API_TOKEN_PROD }}"

notify:
  slack: "${{ secrets.SLACK_WEBHOOK }}"
  discord: "${{ secrets.DISCORD_WEBHOOK }}"
  email: [email protected]

GitHub Actions parity — no rewrite needed

PushCI v1.3.1+ runs your existing .github/workflows/*.yml files end-to-end via the embedded nektos/act runtime. actions/checkout@v4, matrix builds, service containers, composite actions, secret masking, needs.*.outputs.* — all work. Just drop in a workflow and run:

pushci actions run                 # runs all .github/workflows/*.yml
pushci actions run --job test      # run one job
pushci actions run --dry-run       # validate without containers
pushci actions doctor              # check act + docker + workflow status

A real complex workflow that runs unchanged:

name: CI
on: [push, pull_request]

jobs:
  test:
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        node: [20, 22]
    services:
      postgres:
        image: postgres:16
        env:
          POSTGRES_PASSWORD: test
        ports: ['5432:5432']
        options: >-
          --health-cmd pg_isready --health-interval 10s
          --health-timeout 5s --health-retries 5
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: ${{ matrix.node }}
      - run: npm ci
      - run: npm test
        env:
          DATABASE_URL: postgres://postgres:test@localhost:5432/postgres
      - id: coverage
        run: echo "pct=$(npm test --silent)" >> $GITHUB_OUTPUT
    outputs:
      coverage: ${{ steps.coverage.outputs.pct }}

  deploy:
    needs: test
    runs-on: ubuntu-latest
    if: github.ref == 'refs/heads/main'
    steps:
      - uses: actions/checkout@v4
      - name: Deploy
        run: echo "coverage was ${{ needs.test.outputs.coverage }}"
        env:
          CF_API_TOKEN: ${{ secrets.CF_API_TOKEN }}

Or just run pushci init — PushCI figures everything out automatically.

Git Hook

pushci init installs a pre-push hook that runs checks before every push. The hook is designed to never block your workflow:

  • Skip once: git push --no-verify
  • Disable permanently: export PUSHCI_SKIP_HOOK=1
  • Auto-skips if the pushci binary is unavailable (no download hang)

Pricing

| Free | Pro $9/mo | Team $29/mo | |------|-----------|-------------| | 1 repo | Unlimited | Unlimited | | Self-hosted | Dashboard | Shared runners | | Unlimited runs | Slack/Discord | SSO + audit | | AI detection | Analytics | SLA guarantee |

Links

License

BSL 1.1 (Business Source License). Free to use for any purpose except offering a competing hosted CI/CD service. Converts to MIT on 2029-04-06.

PushCI is a trademark of FinsavvyAI. See LICENSE for full terms.