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

stackcanvas

v0.2.3

Published

Live infrastructure canvas for AI coding agents (MCP): see what your agent is about to do to your Terraform — and approve it — before it happens. Local-first, credentials never leave your machine.

Readme

stackcanvas

Live infrastructure canvas for AI coding agents — any agent that speaks MCP (Claude Code is the CI-verified path). The agent writes and plans your Terraform — stackcanvas shows it as a living diagram. Drag new resources onto the canvas; the agent turns them into idiomatic HCL. No SaaS, no credentials leave your machine: everything runs on localhost, reading your local state and plan.

stackcanvas demo

How it works

  1. open_canvas starts a local web UI for your Terraform root.
  2. The graph re-renders live whenever *.tfstate or .stackcanvas/plan.json change — you watch the agent work.
  3. You drag resources from the palette (or right-click existing ones to request changes / removal) and hit Send to agent. Connections between two not-yet-created (draft) resources aren't included in the intent yet — connect drafts to existing resources, or describe the relation in the draft's wishes field.
  4. The agent receives your edits as a structured intent via await_canvas_intent, writes the HCL, runs terraform plan, and the canvas highlights what will change. Only the agent executes Terraform — the canvas has no apply button by design.

Install

stackcanvas is a standard MCP stdio server (npx -y stackcanvas) — point any MCP-capable coding agent at it. The paths below, in order of how battle-tested they are:

Claude Code (CI-verified)

claude plugin marketplace add pshenok/stackcanvas
claude plugin install stackcanvas@stackcanvas

Then, inside a repo with Terraform:

/stackcanvas

This is the verified path — the CI check-plugin job validates the plugin and marketplace manifests on every push.

Or without the plugin system:

claude mcp add stackcanvas -- npx -y stackcanvas

Then, inside a repo with Terraform, just ask: open the stackcanvas canvas for this repo.

Other MCP clients

The snippets below are reported to work; not yet CI-verified — only the Claude Code path above is exercised in CI. Codex CLI and other MCP-capable agents should work with the equivalent stdio config (npx -y stackcanvas) — untested, reports welcome in issues.

Cursor (.cursor/mcp.json):

{
  "mcpServers": {
    "stackcanvas": { "command": "npx", "args": ["-y", "stackcanvas"] }
  }
}

Windsurf (~/.codeium/windsurf/mcp_config.json):

{
  "mcpServers": {
    "stackcanvas": { "command": "npx", "args": ["-y", "stackcanvas"] }
  }
}

Multi-cloud

The canvas is provider-agnostic: any Terraform provider in your state renders — AWS, GCP, Azure, Cloudflare, Datadog, random, all of them, in one graph (a single Terraform root often mixes providers, so there is no "cloud switcher"). What's provider-specific is only the curation layer, shipped as provider packs:

  • a palette pack (packages/ui/src/resource-palette.ts) — curated drag-and-drop types
  • containment rules (DEFAULT_CONTAINMENT_RULES in @stackcanvas/core) — which resources render as visual containers (AWS VPC/subnet, GCP network/subnetwork, Azure subnet, Cloudflare zone today)
  • icon patterns (packages/ui/src/icons.tsx)

Four packs ship today: AWS (complete — the reference pack) and GCP / Azure / Cloudflare starter packs covering the common resource types per provider. Rounding out a starter pack, or adding a new provider entirely, is pure data and makes a great first PR.

OpenTofu

stackcanvas works with OpenTofu as a drop-in replacement for Terraform: it looks for a terraform binary on PATH first, then falls back to tofu. Override the choice with --tf-bin <path> on stackcanvas serve, or set STACKCANVAS_TF_BIN (e.g. in your MCP client's .mcp.json env block) to pin it — both take precedence over auto-detection.

Tools

| Tool | Purpose | |------|---------| | open_canvas | Start the canvas for a Terraform root, open the browser | | load_plan | Register a plan (JSON or binary) for diff highlighting | | get_graph_summary | Text summary of the graph for the agent | | await_canvas_intent | Block until the user clicks Send to agent; returns their edits |

Demo

examples/local-demo is a zero-credential playground: terraform init && terraform apply -auto-approve creates real state using only local providers (no cloud account touched), and the canvas renders it — including sensitive masking on the generated password. examples/demo contains a small AWS config. Run terraform init && terraform plan -out=tfplan && terraform show -json tfplan > .stackcanvas/plan.json there and open the canvas to see create-highlighting. plan does not create or modify any resources — nothing is provisioned until terraform apply (note: the AWS provider still needs credentials and makes read-only API calls during plan).

Telemetry

stackcanvas can send a handful of anonymous (pseudonymous install id — see TELEMETRY.md) usage counters (installs, canvases opened, intents sent; scan/drift counters reserved — five ever, see TELEMETRY.md) — opt-in only, nothing is sent until you click Allow on the one-time canvas banner, and DO_NOT_TRACK=1 / STACKCANVAS_TELEMETRY=0 always turn it off regardless of that decision. No resource names, infrastructure data, or file paths ever leave your machine. Full payload, consent model, and how to verify it yourself: TELEMETRY.md.

Development

pnpm install
pnpm test          # unit + integration
pnpm e2e           # playwright smoke
pnpm build:pkg     # build the publishable package

License

MIT