CLI runs on Node 20+: npx storebound (bunx keeps working)

- cli/lib/rt.ts: the runtime layer on node: modules (spawn / spawnSync with Bun's defaults, exit codes and
  "Executable not found", which with PATHEXT, sleep, serve, Glob, hasher, gunzip, stdin, SQLite, packageRoot,
  config imports with a type-stripping fallback for Node 20); every Bun.* use in cli/ goes through it
- tools/gen-embedded.ts -> cli/lib/embedded.ts: templates/, cli/shots/*.html and Play's Data safety form embedded
  (replaces Bun text imports; the bundle and the compiled sidecar carry them), checked fresh by bun run ci
- package.json: bin dist/storebound.mjs (Node ESM bundle, tools/build-node.ts, prepack), engines node >=20
- bun run ci: node bundle + node smoke (real node: --version, help, check same as Bun, scan, release plan --help,
  init, MCP handshake + tool call); Forgejo CI sets up Node 20; tests/node-compat.test.ts guards cli/
- install writes npx MCP commands when run with Node; bin/storebound falls back to Node
- docs: npx storebound init (Node 20+) or bunx storebound init
This commit is contained in:
CRTkafa 2026-10-13 04:03:09 +08:00
parent 614c32bcba
commit 36a8bf9625
73 changed files with 1195 additions and 251 deletions

View file

@ -10,12 +10,12 @@ in-app products and prices, the compliance forms, even the consoles that have no
[![npm](https://img.shields.io/npm/v/storebound?label=npm&color=cb3837)](https://www.npmjs.com/package/storebound)
[![license: MIT](https://img.shields.io/badge/license-MIT-blue)](LICENSE)
[![version 0.6.0](https://img.shields.io/badge/version-0.6.0-informational)](CHANGELOG.md)
[![runtime: Bun](https://img.shields.io/badge/runtime-Bun%201.1%2B-f9f1e1)](https://bun.sh)
[![runtime: Node 20+ or Bun 1.1+](https://img.shields.io/badge/runtime-Node%2020%2B%20%7C%20Bun%201.1%2B-f9f1e1)](#install-and-start)
[![runtime dependencies: 0](https://img.shields.io/badge/runtime%20dependencies-0-brightgreen)](package.json)
[![Agent Skills: 25](https://img.shields.io/badge/Agent%20Skills-25-8a63d2)](skills)
[![MCP: 2026-07-28](https://img.shields.io/badge/MCP-2026--07--28-black)](docs/mcp.md)
**Website: [storebound.dev](https://storebound.dev) · Docs: [docs/](docs/README.md) · `bunx storebound init`**
**Website: [storebound.dev](https://storebound.dev) · Docs: [docs/](docs/README.md) · `npx storebound init`**
[![The storebound teaser: from an empty folder to Submit for review in under a minute (opens the video on storebound.dev)](https://git.crt.fyi/CRT/storebound/raw/branch/main/site/img/teaser-poster.webp)](https://storebound.dev/#teaser)
@ -80,16 +80,18 @@ Per-tool setup: [docs/getting-started.md](docs/getting-started.md#install-for-yo
## Install and start
You need [Bun](https://bun.sh) 1.1+ (and `ffmpeg` for icons, screenshots and video).
You need [Node](https://nodejs.org) 20+ or [Bun](https://bun.sh) 1.1+ (and `ffmpeg` for icons, screenshots and video).
```sh
cd my-app
bun add -d storebound playwright
bunx storebound init # --profile app (default) | subscription-app | game
bunx storebound install --agent claude # or codex, cursor, gemini, copilot, windsurf, opencode
bunx storebound check # offline: config, limits, Data safety, products, files
npm i -D storebound playwright # or: bun add -d storebound playwright
npx storebound init # --profile app (default) | subscription-app | game (Bun: bunx storebound init)
npx storebound install --agent claude # or codex, cursor, gemini, copilot, windsurf, opencode
npx storebound check # offline: config, limits, Data safety, products, files
```
Every `npx storebound ...` below works as `bunx storebound ...` too.
Then ask your agent: "take my app to Google Play and the App Store". Claude Code plugin, credentials, coming from
fastlane: [docs/getting-started.md](docs/getting-started.md). Desktop app: [storebound.dev/#download](https://storebound.dev/#download).