You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: CLAUDE.md
+54-7Lines changed: 54 additions & 7 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -10,9 +10,9 @@
10
10
11
11
A CLI installer tool for dAppBooster projects. It supports two **stacks** and two **modes**:
12
12
13
-
-**Stacks:**`evm` (the original dAppBooster for EVM chains) and `canton` (dAppBooster for Canton: Daml ledger, Carpincho wallet, off-chain services). Each stack declares its own source repository, ref strategy (tag-latest vs branch), package manager, env files, optional `removeAfterClone` paths, and features.
14
-
-**Interactive** (default): React + Ink TUI that prompts for the project name first, then the stack, then the installation mode (Canton offers **default** / full / custom; EVM offers full / custom) → optional packages → install → cleanup → post-install. The stack prompt is skipped when `--canton`, `--evm`, or `--stack` is supplied.
15
-
-**Non-interactive**: Flag-driven (`--ni` or auto-detected when not a TTY) for AI agents and CI. Outputs JSON to stdout. Run `--info` for stack + feature discovery, then `--canton`/`--evm` (or `--stack`) + `--name` +`--mode`[+ `--features`]. Canton supports `--mode default` (the recommended set: keeps `carpincho` + `llm`, removes `github` + `precommit`); `default`is rejected for EVM. Omitting a stack flag in non-interactive mode defaults to `evm` for backward compatibility.
13
+
-**Stacks:**`evm` (the original dAppBooster for EVM chains) and `canton` (dAppBooster for Canton: Daml ledger, off-chain services). Each stack declares its own source repository, an optional `ref` to clone (without it the newest tag wins), package manager, env files, an optional `prepare` step, and features. Only EVM has features; Canton has none, so it takes neither `--mode` nor `--features`, and the wizard asks it nothing but the project name.
14
+
-**Interactive** (default): React + Ink TUI that prompts for the project name first, then the stack, then — for a stack that has features — the installation mode, the optional packages and a review step, then clone → cleanup → install → post-install. The stack prompt is skipped when `--canton`, `--evm`, or `--stack` is supplied.
15
+
-**Non-interactive**: Flag-driven (`--ni` or auto-detected when not a TTY) for AI agents and CI. Outputs JSON to stdout. Run `--info` for stack + feature discovery, then `--canton`/`--evm` (or `--stack`) + `--name`, plus`--mode`[+ `--features`] when the stack's `modes` list is not empty. Omitting a stack flag in non-interactive mode defaults to `evm` for backward compatibility.
16
16
17
17
## Stack & Conventions
18
18
@@ -27,7 +27,7 @@ A CLI installer tool for dAppBooster projects. It supports two **stacks** and tw
27
27
| Dead code | knip |`pnpm knip` fails on unused files, exports, and dependencies |
28
28
| Secret scanning | gitleaks | Pinned in `.gitleaks-version`; the hooks install it into `bin/`|
29
29
| Git hooks | husky + lint-staged + commitlint | Installed by `pnpm i`; see [Git hooks](#git-hooks)|
30
-
| Node |v22+ |`engines.node` is the published floor; `.nvmrc` (24) is what CI and development use |
30
+
| Node |v24.15.0+ |`engines.node` is the published floor, matched to what the scaffolded stacks need; `.nvmrc` (24) is what CI and development use |
31
31
| Naming | camelCase vars/functions, PascalCase components/types | Biome enforces the same two cases for filenames |
32
32
33
33
## Code Style
@@ -41,10 +41,11 @@ A CLI installer tool for dAppBooster projects. It supports two **stacks** and tw
41
41
42
42
## Working Rules
43
43
44
-
- Use **pnpm** only for this installer (never npm or yarn). The Canton stack scaffolds an npm project; that's a property of the generated project, not this installer.
44
+
- Use **pnpm** only (never npm or yarn), for this installer and for both scaffolded projects
45
45
- Treat `dist/` as build output — never edit directly
46
46
- User input (`projectName`) must never be interpolated into shell command strings — use `execFile` (args array) instead
47
-
-`source/constants/config.ts` is the single source of truth for stack and feature metadata — all programmatic consumers read it through `getStackConfig(stack)`. CLI `--help` text maintains its own copy.
47
+
-`source/stacks/` is the single source of truth for stack and feature metadata: one module per stack, with `source/stacks/index.ts` holding the record and the accessors. All programmatic consumers read it through `getStackConfig(stack)`. CLI `--help` text maintains its own copy.
48
+
- No file outside `source/stacks/` and `source/cli.tsx` may test a stack by name. Add a `StackConfig` field instead.
48
49
- Stack overrides come from env vars `DAPPBOOSTER_<STACK>_REPO_URL` and `DAPPBOOSTER_<STACK>_REF` (read inside `getStackConfig`) — useful for forks and pre-release testing.
49
50
- Components are presentation-only — business logic lives in `source/operations/`. Every operation that varies per stack takes `stack` as its first argument.
0 commit comments