anhedral 0.4.2 → 0.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +35 -265
- package/assets/anhedral-cli-init-technical.svg +322 -0
- package/assets/anhedral-cli-init.svg +257 -173
- package/dist/bin.js +28 -191
- package/dist/dependencies.d.ts +7 -57
- package/dist/dependencies.js +96 -308
- package/dist/index.d.ts +2 -7
- package/dist/index.js +1 -4
- package/dist/platforms/desktop.js +401 -0
- package/dist/platforms/extension.js +401 -0
- package/dist/platforms/mobile.js +232 -0
- package/dist/project.d.ts +0 -26
- package/dist/standard-products.d.ts +2 -0
- package/dist/standard-products.js +6 -0
- package/dist/standard.d.ts +18 -0
- package/dist/standard.js +595 -0
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/docs/application-stack-standard.md +700 -0
- package/package.json +29 -51
- package/CHANGELOG.md +0 -178
- package/CONTRIBUTING.md +0 -77
- package/SECURITY.md +0 -37
- package/SKILL.md +0 -339
- package/assets/images/svg/ably-symbol-color.svg +0 -8
- package/bin/anhedral.js +0 -2
- package/dist/architecture/contributions.d.ts +0 -28
- package/dist/architecture/contributions.js +0 -125
- package/dist/architecture/index.d.ts +0 -12
- package/dist/architecture/index.js +0 -6
- package/dist/architecture/manifest.d.ts +0 -53
- package/dist/architecture/manifest.js +0 -283
- package/dist/architecture/modules.d.ts +0 -41
- package/dist/architecture/modules.js +0 -187
- package/dist/architecture/plan.d.ts +0 -58
- package/dist/architecture/plan.js +0 -145
- package/dist/architecture/templates.d.ts +0 -10
- package/dist/architecture/templates.js +0 -23
- package/dist/cli.d.ts +0 -32
- package/dist/cli.js +0 -281
- package/dist/composers/root.d.ts +0 -6
- package/dist/composers/root.js +0 -35
- package/dist/print.d.ts +0 -8
- package/dist/print.js +0 -48
- package/dist/prompts.d.ts +0 -6
- package/dist/prompts.js +0 -41
- package/dist/scaffold.d.ts +0 -64
- package/dist/scaffold.js +0 -2102
- package/dist/template-source.d.ts +0 -20
- package/dist/template-source.js +0 -180
- package/dist/templates/api.d.ts +0 -2
- package/dist/templates/api.js +0 -3187
- package/dist/templates/assets-private-proxy.d.ts +0 -3
- package/dist/templates/assets-private-proxy.js +0 -277
- package/dist/templates/desktop.js +0 -792
- package/dist/templates/electron-updater.d.ts +0 -3
- package/dist/templates/electron-updater.js +0 -358
- package/dist/templates/extension.js +0 -856
- package/dist/templates/first-run.d.ts +0 -2
- package/dist/templates/first-run.js +0 -167
- package/dist/templates/mobile.js +0 -861
- package/dist/templates/shared.d.ts +0 -2
- package/dist/templates/shared.js +0 -577
- package/dist/templates/web.d.ts +0 -2
- package/dist/templates/web.js +0 -569
- package/dist/toolchain.d.ts +0 -3
- package/dist/toolchain.js +0 -8
- package/dist/ui.d.ts +0 -33
- package/dist/ui.js +0 -199
- package/dist/workspace-config.d.ts +0 -11
- package/dist/workspace-config.js +0 -372
- package/docs/NORTHSTAR.md +0 -114
- package/docs/conventions.md +0 -94
- package/docs/engineering-principles.md +0 -88
- package/docs/master-stack-map.md +0 -199
- package/docs/output-tree-contract.md +0 -493
- package/docs/references/manual-scaffolding.md +0 -421
- package/docs/references/provisioning.md +0 -577
- package/scripts/render-master-stack-map.mjs +0 -510
- package/templates/api-fastify/apps/api/tsconfig.json +0 -20
- package/templates/catalog.json +0 -23
- package/templates/db-drizzle/packages/db/tsconfig.json +0 -14
- package/templates/desktop-electron/apps/desktop/tsconfig.json +0 -37
- package/templates/extension-wxt/apps/extension/tsconfig.json +0 -41
- package/templates/mobile-expo/apps/mobile/expo-env.d.ts +0 -1
- package/templates/web-next/apps/web/next-env.d.ts +0 -6
- /package/dist/{templates → platforms}/desktop.d.ts +0 -0
- /package/dist/{templates → platforms}/extension.d.ts +0 -0
- /package/dist/{templates → platforms}/mobile.d.ts +0 -0
package/README.md
CHANGED
|
@@ -1,296 +1,66 @@
|
|
|
1
1
|
# Anhedral
|
|
2
2
|
|
|
3
|
-
[](https://github.com/anhedral/anhedral-init/actions/workflows/ci.yml)
|
|
4
|
+
[](https://www.npmjs.com/package/anhedral)
|
|
5
|
+
[](LICENSE)
|
|
5
6
|
|
|
6
|
-
|
|
7
|
+
Initialize client-owned applications using the [Anhedral Application Stack & Delivery Standard](docs/application-stack-standard.md).
|
|
7
8
|
|
|
8
|
-
|
|
9
|
-
> frameworks, and features your product needs; Anhedral assembles them into a
|
|
10
|
-
> production-ready TypeScript workspace for web, iOS, Android, desktop, APIs,
|
|
11
|
-
> and browser extensions. Start free, skip months of repetitive setup and
|
|
12
|
-
> integration work, and focus on what makes your app unique.
|
|
9
|
+
Every new project starts from the official **shadcn pnpm/Turborepo monorepo**. The default creates **Next.js + React + TypeScript + Tailwind + shadcn/ui**, hosted on **Cloudflare Workers through OpenNext**. Select additional apps and services only when needed.
|
|
13
10
|
|
|
14
|
-
.
|
|
20
|
-
|
|
21
|
-
Anhedral is open source under the [Apache License 2.0](LICENSE). You may use,
|
|
22
|
-
modify, and distribute it subject to that license, including its notice and
|
|
23
|
-
redistribution requirements. Generated applications remain ordinary project
|
|
24
|
-
source that their developers can customize and license for their products.
|
|
25
|
-
|
|
26
|
-
## Recommended: use the coding-agent skill
|
|
27
|
-
|
|
28
|
-
Install the Anhedral skill for Codex, Claude Code, or another compatible coding
|
|
29
|
-
agent:
|
|
11
|
+

|
|
30
12
|
|
|
31
13
|
```sh
|
|
32
|
-
pnpm dlx
|
|
14
|
+
pnpm dlx anhedral@latest new my-app
|
|
15
|
+
pnpm dlx anhedral@latest new mobile-app --expo
|
|
16
|
+
pnpm dlx anhedral@latest new product --next --expo --hono --neon --clerk --r2
|
|
17
|
+
pnpm dlx anhedral@latest init --wxt
|
|
33
18
|
```
|
|
34
19
|
|
|
35
|
-
|
|
20
|
+
To use a local checkout, run `pnpm build`, then `node dist/bin.js new <directory>`.
|
|
36
21
|
|
|
37
|
-
|
|
38
|
-
Use $anhedral-init to create and provision my application.
|
|
39
|
-
```
|
|
22
|
+
Applications: `next`, `expo`, `electron`, `wxt`, `hono`.
|
|
40
23
|
|
|
41
|
-
|
|
42
|
-
custom domain. It selects the CLI command with you, detects Computer Use and
|
|
43
|
-
subagent support, generates the project, and walks through the selected cloud
|
|
44
|
-
providers. It pauses for sign-in, MFA, payments, secret generation, and final
|
|
45
|
-
release submissions. Paste secrets directly into the instructed uncommitted
|
|
46
|
-
`.env` file or protected provider field—never into chat.
|
|
24
|
+
Optional capabilities: `neon`, `d1`, `local-data`, `clerk`, `better-auth`, `r2`, `kv`, `realtime`, `queues`, `cron`, `workflows`, `openai`, `ai-sdk`, `workers-ai`, `resend`, `stripe`, `revenuecat`, `sentry`, `basin`, `posthog`, `styling`.
|
|
47
25
|
|
|
48
|
-
|
|
26
|
+
Hono provides an OpenAPI Worker when a shared API is selected. Web-only endpoints belong in Next.js route handlers; `apps/api` is never added automatically. Workers services live under `apps/*`, reusable code under `packages/*`. Mobile-only, desktop-only, extension-only and API-only selections remove the unused Next.js starter after the shadcn bootstrap.
|
|
49
27
|
|
|
50
|
-
|
|
51
|
-
capabilities you need:
|
|
28
|
+
Choose either Neon + Drizzle + Hyperdrive or D1 + Drizzle. Authentication is optional; Clerk and Better Auth are mutually exclusive. Better Auth requires an explicit database selection. Stripe is the web billing choice; RevenueCat is an optional addition for cross-store entitlements. Private files use R2 Worker bindings; clients never receive R2 credentials.
|
|
52
29
|
|
|
53
|
-
|
|
54
|
-
pnpm dlx anhedral@latest new my-product
|
|
55
|
-
cd my-product
|
|
56
|
-
```
|
|
57
|
-
|
|
58
|
-
The suggested selection is a focused web app, and Anhedral shows the complete
|
|
59
|
-
resolved stack before it writes anything. To explicitly create every supported
|
|
60
|
-
surface and capability, use:
|
|
61
|
-
|
|
62
|
-
```sh
|
|
63
|
-
pnpm dlx anhedral@latest new my-product --all
|
|
64
|
-
```
|
|
65
|
-
|
|
66
|
-
The generated `README.md` contains the exact next steps for the selected stack.
|
|
67
|
-
Run `pnpm first-run` to create missing local environment files without
|
|
68
|
-
overwriting anything, then use `pnpm ready` for a secret-safe readiness check.
|
|
69
|
-
For the complete stack, configure the selected managed providers—including a
|
|
70
|
-
Neon `DATABASE_URL`—and create the reviewed initial migration before running
|
|
71
|
-
`pnpm dev`. Anhedral intentionally does not generate a local Postgres substitute
|
|
72
|
-
or pretend that production provider credentials already exist.
|
|
73
|
-
|
|
74
|
-
In noninteractive environments, no module flags retain the complete-stack
|
|
75
|
-
default for compatibility. Prefer `--all` when that is your intent, or name
|
|
76
|
-
only what the product needs:
|
|
77
|
-
|
|
78
|
-
```sh
|
|
79
|
-
pnpm dlx anhedral@latest new my-product --web --api --db --auth
|
|
80
|
-
pnpm dlx anhedral@latest new my-api --api --db
|
|
81
|
-
pnpm dlx anhedral@latest new my-clients --web --mobile
|
|
82
|
-
```
|
|
30
|
+
`--hosting=vercel` explicitly selects Vercel for Next.js. It requires project approval as an architecture exception. Vinext, GPUI/Rust, Containers and alternative source/CI platforms remain deliberate project adaptations rather than generated templates.
|
|
83
31
|
|
|
84
|
-
`
|
|
32
|
+
`--dry-run --json` prints a plan without writes or network calls. `--skip-install` skips the final workspace installation; the official shadcn bootstrap still needs network access and can install dependencies. Generation resolves and retains a workspace lockfile. Commit it with the source.
|
|
85
33
|
|
|
86
|
-
|
|
87
|
-
mkdir my-product && cd my-product
|
|
88
|
-
pnpm dlx anhedral@latest init --web --api --db --auth
|
|
89
|
-
```
|
|
34
|
+
Generated projects include `dev`, `build`, `lint`, `typecheck`, `test`, `audit`, `audit:full`, and `check`, plus GitHub Actions PR checks. Fallow is part of the deterministic gate. Tests run in workspaces that define them; add meaningful product and integration tests as behavior is implemented.
|
|
90
35
|
|
|
91
|
-
|
|
36
|
+
Provider packages and services are **starters**, not finished product features. Generated READMEs identify the remaining setup: resource IDs, migrations, product authorization, webhooks, native adapters and runtime SDK initialization. Initialization does not create cloud resources, activate billing, or deploy. Human approval is required for paid activation, material spending, architecture exceptions and production releases.
|
|
92
37
|
|
|
93
|
-
|
|
38
|
+
The CLI supports `new`, `init`, `--help`, and `--version`. Use `anhedral --help` for options.
|
|
94
39
|
|
|
95
|
-
|
|
96
|
-
my-product/
|
|
97
|
-
├── apps/
|
|
98
|
-
│ ├── web/ # Next.js App Router + source-owned shadcn/ui
|
|
99
|
-
│ ├── mobile/ # Expo Router + React Native Reusables
|
|
100
|
-
│ ├── api/ # Fastify routes, backend modules, auth, providers
|
|
101
|
-
│ ├── desktop/ # Electron + React
|
|
102
|
-
│ ├── extension/ # WXT browser extension
|
|
103
|
-
│ ├── assets-private-proxy/ # Cloudflare Worker for private asset delivery
|
|
104
|
-
│ └── desktop-updater-worker/ # private R2 Electron update delivery
|
|
105
|
-
├── packages/
|
|
106
|
-
│ ├── contracts/ # shared Zod network contracts
|
|
107
|
-
│ ├── api-client/ # typed client used by every frontend
|
|
108
|
-
│ ├── db/ # Drizzle schema and reviewed migrations
|
|
109
|
-
│ └── realtime/ # Ably client when billing is selected
|
|
110
|
-
├── docs/
|
|
111
|
-
│ ├── DEVELOPMENT.md # task-oriented feature recipes
|
|
112
|
-
│ └── STACK.md # tool map and official documentation
|
|
113
|
-
├── README.md # first run and where-to-write-code map
|
|
114
|
-
├── PRODUCTION.md # selection-specific release runbook
|
|
115
|
-
├── SKILL.md # repository guidance for coding agents
|
|
116
|
-
├── ANHEDRAL.md # generator and ownership notes
|
|
117
|
-
└── anhedral.json # modules, versions, provenance, ownership
|
|
118
|
-
```
|
|
40
|
+
Requires Node.js 20.19+ in the 20 series or 22.12+ and pnpm 10.34.5. Version 0.6 replaces the legacy generator and builder with the Cloudflare-first initializer; earlier generator commands and templates are retired. Existing applications are not automatically migrated. Pin a CLI version for reproducible initialization and review upgrades before use.
|
|
119
41
|
|
|
120
|
-
|
|
42
|
+
## Contributing and security
|
|
121
43
|
|
|
122
|
-
|
|
44
|
+
Anhedral is maintainer-led, with a small contribution surface. Focused bug fixes, tests, and documentation corrections are welcome; discuss larger changes before implementation. See [contributing](https://github.com/anhedral/anhedral-init/blob/main/.github/CONTRIBUTING.md), the [code of conduct](https://github.com/anhedral/anhedral-init/blob/main/.github/CODE_OF_CONDUCT.md), and [security reporting](https://github.com/anhedral/anhedral-init/blob/main/.github/SECURITY.md). Use [issues](https://github.com/anhedral/anhedral-init/issues) for reproducible CLI problems and [private reporting](https://github.com/anhedral/anhedral-init/security/advisories/new) for vulnerabilities.
|
|
123
45
|
|
|
124
|
-
|
|
125
|
-
connects the Drizzle table, Zod request/response contracts, Fastify list/create
|
|
126
|
-
routes, typed client calls, and an idiomatic UI for every selected surface. Use
|
|
127
|
-
it to verify the stack, then rename or replace these ordinary user-owned files
|
|
128
|
-
with the product idea:
|
|
46
|
+
## Workspace layout
|
|
129
47
|
|
|
130
48
|
```text
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
packages/api-client/src/app.ts
|
|
135
|
-
apps/web/components/item-list.tsx
|
|
136
|
-
apps/mobile/components/item-list.tsx
|
|
137
|
-
apps/desktop/src/renderer/components/item-list.tsx
|
|
138
|
-
apps/extension/src/components/item-list.tsx
|
|
139
|
-
```
|
|
140
|
-
|
|
141
|
-
Only paths for selected clients are generated. Shared contracts and API calls
|
|
142
|
-
stay consistent while presentation follows Next.js, React Native, Electron, or
|
|
143
|
-
browser-extension conventions.
|
|
49
|
+
demo/
|
|
50
|
+
├── anhedral-factory/ Factory application and service workspaces
|
|
51
|
+
└── default-stack-demo/ Default stack snapshot with security maintenance
|
|
144
52
|
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
export const ItemSchema = z.object({
|
|
150
|
-
id: z.string().uuid(),
|
|
151
|
-
name: z.string(),
|
|
152
|
-
createdAt: z.string().datetime(),
|
|
153
|
-
});
|
|
154
|
-
export const ItemListSchema = z.array(ItemSchema);
|
|
53
|
+
src/ Current initializer implementation
|
|
54
|
+
dist/ Generated JavaScript + declarations
|
|
55
|
+
.artifacts/release/ Generated npm tarball + integrity metadata
|
|
56
|
+
scripts/, tests/, docs/ Tooling, verification, and the stack standard
|
|
155
57
|
```
|
|
156
58
|
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
```text
|
|
160
|
-
contracts -> database/service -> Fastify route -> typed API client -> frontend
|
|
161
|
-
```
|
|
162
|
-
|
|
163
|
-
- Write web product code under `apps/web` using Next.js conventions.
|
|
164
|
-
- Write mobile product code under `apps/mobile` using Expo Router conventions.
|
|
165
|
-
- Register product routes in `apps/api/src/routes/app.ts` and add server-only feature modules under `apps/api/src` using Fastify conventions.
|
|
166
|
-
- Write product tables in `packages/db/src/app-schema.ts` and queries under `packages/db` using Drizzle conventions.
|
|
167
|
-
- Share only network contracts and client-safe packages with frontends.
|
|
168
|
-
- Import the underlying framework directly whenever its API is the right tool.
|
|
169
|
-
|
|
170
|
-
## The stack
|
|
171
|
-
|
|
172
|
-
| Concern | Default | Why Anhedral includes it |
|
|
173
|
-
| --- | --- | --- |
|
|
174
|
-
| Web | Next.js + Vercel | App Router, React server rendering, routing, deployment |
|
|
175
|
-
| Native | Expo Router | One TypeScript application for iOS and Android |
|
|
176
|
-
| API | Fastify | Typed validation, structured logging, plugin boundaries |
|
|
177
|
-
| Database | Neon + Drizzle | Managed Postgres with TypeScript schema and SQL-like queries |
|
|
178
|
-
| Authentication | Clerk | Connected frontend and backend identity/session flows |
|
|
179
|
-
| UI | shadcn/ui + React Native Reusables | Accessible source code the application owns |
|
|
180
|
-
| Storage | private Cloudflare R2 | Signed uploads and controlled asset delivery |
|
|
181
|
-
| Billing/realtime | RevenueCat + Stripe + Ably | Unified billing entitlements and realtime invalidation |
|
|
182
|
-
| Desktop | Electron | Predictable cross-platform TypeScript desktop runtime |
|
|
183
|
-
| Desktop updates | electron-updater + private R2 + Worker | Signed automatic updates through a product-owned custom domain |
|
|
184
|
-
| Extension | WXT | Browser-extension entrypoints, builds, and packaging |
|
|
185
|
-
| Workspace | pnpm + Turborepo | Strict dependencies and dependency-aware tasks |
|
|
186
|
-
|
|
187
|
-
Anhedral does **not** generate or require local Postgres. Database-enabled projects use a managed Neon connection through `DATABASE_URL`; teams should use isolated Neon branches or projects for development, preview, and production.
|
|
188
|
-
|
|
189
|
-
## Commands
|
|
190
|
-
|
|
191
|
-
```text
|
|
192
|
-
anhedral new <directory> [modules...] Generate a new readable workspace
|
|
193
|
-
anhedral init [modules...] Generate in the current empty directory
|
|
194
|
-
anhedral new <directory> --all Explicitly select the complete stack
|
|
195
|
-
pnpm anhedral:add <module...> Add connected stack capabilities
|
|
196
|
-
pnpm anhedral:ui <component...> Add source-owned UI components
|
|
197
|
-
pnpm anhedral:upgrade Transactionally upgrade a supported project
|
|
198
|
-
pnpm anhedral:doctor Check ownership and generator drift
|
|
199
|
-
```
|
|
200
|
-
|
|
201
|
-
Useful examples:
|
|
202
|
-
|
|
203
|
-
```sh
|
|
204
|
-
pnpm anhedral:add storage --dry-run
|
|
205
|
-
pnpm anhedral:add desktop extension
|
|
206
|
-
pnpm anhedral:add electron-updater
|
|
207
|
-
pnpm anhedral:ui button dialog
|
|
208
|
-
pnpm anhedral:ui data-table --target web --dry-run
|
|
209
|
-
pnpm anhedral:upgrade --dry-run
|
|
210
|
-
pnpm anhedral:doctor --json
|
|
211
|
-
```
|
|
212
|
-
|
|
213
|
-
`--dry-run` builds the structural plan without changing the project. For `ui add`, it also shows the exact provider command; registry-generated file paths are resolved only when the plan is applied. `--json` emits machine-readable output. `--verbose` streams child-tool diagnostics.
|
|
214
|
-
|
|
215
|
-
Application lifecycle commands remain visible in the generated root `package.json`:
|
|
216
|
-
|
|
217
|
-
```sh
|
|
218
|
-
pnpm first-run
|
|
219
|
-
pnpm ready
|
|
220
|
-
pnpm dev
|
|
221
|
-
pnpm dev:all
|
|
222
|
-
pnpm dev:web
|
|
223
|
-
pnpm dev:api
|
|
224
|
-
pnpm typecheck
|
|
225
|
-
pnpm verify
|
|
226
|
-
pnpm build
|
|
227
|
-
pnpm db:generate
|
|
228
|
-
pnpm db:migrate
|
|
229
|
-
```
|
|
230
|
-
|
|
231
|
-
`pnpm dev` starts the primary product loop: the first selected client plus the
|
|
232
|
-
API when present, or the API by itself for backend-only projects. In the full
|
|
233
|
-
stack that means web plus API. `pnpm dev:all` appears only when the project has
|
|
234
|
-
additional surfaces and intentionally starts all of them. Only commands
|
|
235
|
-
relevant to selected modules are generated.
|
|
236
|
-
|
|
237
|
-
## Extensibility and ownership
|
|
238
|
-
|
|
239
|
-
Anhedral owns initial assembly and safe structural additions. It does not own product architecture after generation.
|
|
240
|
-
|
|
241
|
-
- `README.md`, `PRODUCTION.md`, application features, pages, routes, services, and domain code are developer-owned.
|
|
242
|
-
- Root workspace configuration is mergeable.
|
|
243
|
-
- Integration substrate is recorded in `anhedral.json`; `pnpm anhedral:add` refuses to overwrite modified managed files.
|
|
244
|
-
- UI components are copied into the application so developers can edit them normally.
|
|
245
|
-
- Provider integrations use ordinary SDKs and configuration files with no hidden control plane.
|
|
246
|
-
|
|
247
|
-
Before a structural change:
|
|
248
|
-
|
|
249
|
-
```sh
|
|
250
|
-
pnpm anhedral:doctor
|
|
251
|
-
pnpm anhedral:add <module> --dry-run
|
|
252
|
-
```
|
|
253
|
-
|
|
254
|
-
When `doctor` reports that a project was generated by a supported older release, run `pnpm anhedral:upgrade --dry-run`, inspect the plan, and then run `pnpm anhedral:upgrade`. Version 0.4 supports transactional upgrades from 0.3 projects while preserving user-owned extension seams. If a 0.3 project changed a file that was generator-managed, the upgrade stops instead of overwriting it. Preserve the change in source control, restore that managed file to its recorded 0.3 content, run the upgrade, and then move the product behavior into the new user-owned `app.ts`, `app-schema.ts`, page, component, or `app-window.ts` seam.
|
|
255
|
-
|
|
256
|
-
## Documentation contract
|
|
257
|
-
|
|
258
|
-
Every generated project teaches both humans and coding agents how to work in it:
|
|
259
|
-
|
|
260
|
-
- `README.md` answers how to run the app and where frontend/backend code goes.
|
|
261
|
-
- `docs/DEVELOPMENT.md` provides end-to-end feature and common-task recipes.
|
|
262
|
-
- `docs/STACK.md` maps generated files to each tool's official documentation.
|
|
263
|
-
- `SKILL.md` gives coding agents concise repository-specific workflow and safety rules.
|
|
264
|
-
- `PRODUCTION.md` covers only the accounts, environment, infrastructure, DNS, stores, and release steps selected for that project.
|
|
265
|
-
|
|
266
|
-
The generator's exact output contract is documented in [docs/output-tree-contract.md](docs/output-tree-contract.md). Contributor architecture remains available in the [source repository](https://github.com/anhedral/anhedral-init/tree/main/docs/architecture).
|
|
267
|
-
|
|
268
|
-
The complete lifecycle, runtime, cloud, command, and coding-agent topology is in
|
|
269
|
-
the [Anhedral master stack map](docs/master-stack-map.md).
|
|
270
|
-
The repository's implementation policy is the
|
|
271
|
-
[Zen of Anhedral](docs/engineering-principles.md).
|
|
272
|
-
|
|
273
|
-
## Module dependency rules
|
|
274
|
-
|
|
275
|
-
Anhedral resolves integrations as a deterministic graph:
|
|
276
|
-
|
|
277
|
-
```text
|
|
278
|
-
auth -> api + db
|
|
279
|
-
billing -> auth
|
|
280
|
-
storage -> auth
|
|
281
|
-
native-subscriptions -> mobile + billing
|
|
282
|
-
electron-updater -> desktop
|
|
283
|
-
```
|
|
284
|
-
|
|
285
|
-
Adding a capability brings the infrastructure it actually requires. Unselected providers do not leave dead source files or environment placeholders behind.
|
|
286
|
-
|
|
287
|
-
## Verification
|
|
288
|
-
|
|
289
|
-
The generator and representative public stacks are checked with:
|
|
59
|
+
Each demo retains its own pnpm workspace and lockfile; the root package remains the initializer. Dependencies, caches, generated artifacts, and local credentials are ignored.
|
|
290
60
|
|
|
291
61
|
```sh
|
|
292
|
-
pnpm
|
|
293
|
-
pnpm
|
|
62
|
+
pnpm --dir demo/anhedral-factory dev
|
|
63
|
+
pnpm --dir demo/anhedral-factory check
|
|
294
64
|
```
|
|
295
65
|
|
|
296
|
-
Generated
|
|
66
|
+
Anhedral is open source under the [Apache License 2.0](LICENSE). Generated applications remain ordinary project source that their developers can customize and license for their products. Preserve applicable license notices for upstream code and dependencies.
|