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

@mysten-incubation/create-devstack-app

v0.4.0

Published

Scaffold a new devstack-backed Sui app. Run via `pnpm create @mysten-incubation/devstack-app <name>`.

Readme

@mysten-incubation/create-devstack-app

Scaffold a new devstack-backed Sui app.

The published package is @mysten-incubation/create-devstack-app; package managers resolve the create alias below to this package.

pnpm create @mysten-incubation/devstack-app@latest my-app
cd my-app
pnpm dev

The scaffolder:

  1. Prompts for an app name, what you are building (Web dapp or TypeScript only), and which optional services to include (walrus, seal, deepbook, pyth — default: none).
  2. Copies the matching template — templates/app/ or templates/ts/verbatim into <cwd>/<name>/.
  3. Renders devstack.config.ts from the service selection: the Sui localnet is always present, and each selected service adds its config (walrus()/seal() are one factory line each; deepbook, optionally with pyth, adds a small self-contained block — see Design principles below).
  4. Sets the app name in package.json, prunes the dependencies of unselected services, and injects resolved SDK versions. No other file is touched.
  5. Runs pnpm install and git init + an initial commit, performs a non-fatal Docker preflight, and prints next steps.

Options

pnpm create @mysten-incubation/devstack-app@latest <name> [options]

  <name>              App name. Lowercase, dash-separated, starts with a letter.

  --template <t>      Skip the "What are you building?" prompt: `app` (Web dapp)
                      or `ts` (TypeScript only).
  --services <list>   Comma-separated services to include: walrus,seal,deepbook,pyth
                      (pyth implies deepbook).
  --all               Include every optional service (walrus, seal, deepbook, pyth).
  --minimal           Include no optional services.
  --yes               Non-interactive; defaults apply for anything not flagged
                      (Web dapp, no services).
  --target-dir <dir>  Where to create the app directory. Default: cwd.
  --no-install        Skip pnpm install.
  --no-git            Skip git init + initial commit.

What you get

Both templates are small, complete apps — a counter Move package plus a vitest spec that runs against the booted stack. The app template adds the browser half: vite, dapp-kit, the dev wallet, and a single screen wired to the counter package.

my-app/
  devstack.config.ts   # rendered from your service selection; the rest is verbatim template
  move/counter/        # one Move package, published on boot
  src/                 # app template: one screen on vite + dapp-kit + dev wallet
  package.json         # name + service deps + SDK versions set at scaffold time
  ...                  # tsconfig, vite config (app), vitest spec

Scripts:

  • pnpm devdevstack up (boots the stack; the app template serves the UI as a stack member).
  • pnpm applydevstack apply (one-shot reconcile: CI, or to re-emit live ids without serving).
  • pnpm typechecktsc -b --noEmit (app) / tsc --noEmit (ts); deliberately stack-free, boots nothing.
  • pnpm testvitest run (unit specs; pnpm test:e2e boots a throwaway test stack).
  • pnpm build — app template only (tsc -b && vite build); stack-free, no Docker.

There are no DEVSTACK_APP= tokens in the generated files: the devstack CLI infers the app from the package.json name. The generated devstack.config.ts sets stackName: 'dev' explicitly.

Looking for a richer end-to-end demo? Those live in examples/token-studio, not in the scaffold.

Design principles

  • Every generated file survives into a real app. No demo gallery to delete on day two.
  • Services are config lines, not file sets. Selecting walrus/seal adds one factory line each to devstack.config.ts (plus their npm deps). DeepBook adds a small self-contained block: it pulls its Move package from the upstream repo (localPackage({ git }) — no vendored tree) and omits the pool list, so deepbook(...) synthesizes a default DEEP/SUI pool. Selecting pyth adds local price feeds for that pool (a git-sourced mock-Pyth package + DEEP/SUI feeds) and implies deepbook. No service ever adds or removes source files. See examples/deepbook-trader for the full multi-pool + multi-feed setup.
  • One rendered file. devstack.config.ts is the only file generated from the selection; everything else is copied verbatim from the template.
  • One package.json mutation. App name, pruning unselected-service deps, and injecting resolved SDK versions — nothing else.

Template maintenance

templates/app/ and templates/ts/ are authored as real, runnable apps and copied verbatim at scaffold time — keep them working as apps. Their package.json files are excluded from the pnpm workspace (see the root pnpm-workspace.yaml) so they do not register as workspace projects.

Adding a service:

  1. Add one entry to src/services.ts (its config factory line and the deps it owns).
  2. Add its deps to both template package.jsons.
  3. Add a snippet for it to this README.

Testing

  • Render tests snapshot devstack.config.ts for every template × service combination.
  • Scaffold tests generate into a temp dir and assert the produced file set and package.json mutations.
  • CI (.github/workflows/create-devstack-app.yml) scaffolds real apps from the built package, installs freshly packed workspace tarballs into them, and runs each app's pnpm typecheck. A boot smoke in .github/workflows/devstack-e2e.yml brings a scaffolded app up with devstack up and runs its vitest spec against the live stack.