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

programmable-devkit

v0.1.0

Published

One command for Programmable Market: scaffold a v4 hook, check it against the live admission invariants, and run the MCP server

Readme

programmable-devkit

One command for Programmable Market on Robinhood Chain: scaffold a Uniswap v4 hook, check it against the live admission invariants, and run the MCP server.

npm install -g programmable-devkit
programmable new my-hook --template creator-fee-hook --fee 3000 --symbol MYT

What you get

The scaffolded project depends on @aabxtract/programmable-sdk and is already wired to your agent. The SDK and MCP server are dependencies, not copied source — they update with npm install rather than going stale in your repo.

my-hook/
├── src/CreatorFeeHook.sol          checked before the command returns
├── programmable-launch.config.json --fee 3000 already substituted
├── package.json                    depends on @aabxtract/programmable-sdk
├── .mcp.json                       MCP tools for Claude Code / Cursor / Windsurf
├── AGENTS.md                       compiler pin, 14 bits, return shapes
├── foundry.toml                    solc pinned to the platform toolchain
├── .git-hooks/pre-commit           key leak guard
└── scripts/
    ├── watch-launch.mjs            wait for `authorized`, print the sign URL
    └── capabilities.mjs            read the live profileDigest

Commands

| Command | Does | |---|---| | programmable new <name> | Scaffold, substitute values, check the output | | programmable check [path] | Run the 7 hard blocks locally (default ./src) | | programmable doctor | Key, API reachability, submission gate, your launches | | programmable profile | Pinned compiler, permission bits, invariants | | programmable mcp | Run the MCP server on stdio | | programmable templates | Templates as JSON, for tooling |

Templates

programmable new my-hook --template buyback-hook \
  --name "My Token" --symbol MYT --treasury 0x… --bps 100

programmable new fees --template creator-fee-hook \
  --name "Creator Coin" --symbol CRTR --fee 3000

--fee is in pips (hundredths of a bip): 3000 = 0.30%. Values are validated before anything is written — --fee 0.3% is rejected rather than landing in a config file. Anything you don't supply stays TODO in the config, and the command tells you what's left.

Doctor

  PASS submission gate    api create OPEN
  PASS launch feed        unavailable  (absence is not authoritative while degraded)
  PASS authenticated      5 custom launch(es)
       994fcdf5-b23f-4569-9…  action_required  SOURCE_LIQUIDITY_LOCK_OR_CUSTODY_SURFACE

Checks in the order that matters: is the gate open, is the platform up, is your key working — each answer changes whether the next one matters.

Why check locally

A custom launch request is immutable. A rejected submission burns the attempt and you only find out afterwards. programmable check runs the platform's own admission invariants against your source first; exit 0 means nothing would hard-block.

Every rule is grounded in the live contract manifest, not inferred. See programmable profile.

Secrets

PROGRAMMABLE_API_KEY goes in .env, loaded with node --env-file=.env, or exported so .mcp.json can expand it. Never inline it in .mcp.json — that file gets committed.


Unofficial. Not affiliated with or endorsed by Programmable.