Recipe Books
Recipe books map business-level packages to technical modules. They are the bridge between V2Genome (packages/apps) and CLI execution (modules).
Overview
Recipe books define:
- Package recipes: How packages map to modules
- Provider recipes: Different implementations of the same package
- Target resolution: Where modules should be placed
- Dependencies: Package-level dependencies
Structure
{
"version": "1.0.0",
"packages": {
"auth": {
"defaultProvider": "default",
"providers": {
"default": {
"modules": [
{
"id": "capabilities/auth",
"version": "1.0.0",
"targetPackage": "auth"
}
],
"dependencies": {
"packages": ["database"]
}
}
}
}
}
}Package Recipes
Basic Package
{
"packages": {
"auth": {
"defaultProvider": "default",
"providers": {
"default": {
"modules": [
{
"id": "capabilities/auth",
"targetPackage": "auth"
}
]
}
}
}
}
}Result: auth package → capabilities/auth module → packages/auth/ directory
Framework Package
{
"packages": {
"nextjs": {
"defaultProvider": "default",
"providers": {
"default": {
"modules": [
{
"id": "capabilities/nextjs",
"targetPackage": null,
"targetApps": ["web"]
}
]
}
}
}
}
}Result: nextjs package → capabilities/nextjs module → apps/web/ directory
Key Points:
targetPackage: nullmeans app-specifictargetApps: ["web"]specifies which apps
Package with Dependencies
{
"packages": {
"payments": {
"defaultProvider": "default",
"providers": {
"default": {
"modules": [
{
"id": "capabilities/payments",
"targetPackage": "payments"
}
],
"dependencies": {
"packages": ["database", "auth"]
}
}
}
}
}
}Result: payments package depends on database and auth packages.
Provider Recipes
Packages can have multiple providers:
{
"packages": {
"auth": {
"defaultProvider": "better-auth",
"providers": {
"better-auth": {
"modules": [
{ "id": "capabilities/auth-better-auth", "targetPackage": "auth" }
]
},
"supabase": {
"modules": [
{ "id": "capabilities/auth-supabase", "targetPackage": "auth" }
]
}
}
}
}
}Usage: User can specify provider in V2Genome:
packages: {
auth: {
provider: 'supabase' // Use supabase provider
}
}Target Resolution
Package Modules
{
"modules": [
{
"id": "capabilities/auth",
"targetPackage": "auth" // Generates in packages/auth/
}
]
}App Modules (Frameworks)
{
"modules": [
{
"id": "capabilities/nextjs",
"targetPackage": null, // Not a package
"targetApps": ["web"] // Generates in apps/web/
}
]
}Framework Compatibility
Recipe books can specify framework requirements:
{
"modules": [
{
"id": "capabilities/nextjs-middleware",
"requiredFramework": "nextjs",
"requiredAppTypes": ["web"]
}
]
}Result: Module only resolves if app uses nextjs framework and is web type.
Example
V2Genome
{
packages: {
auth: {},
payments: {}
},
apps: {
web: {
framework: 'nextjs',
packages: ['auth', 'payments']
}
}
}Recipe Book
{
"packages": {
"auth": {
"providers": {
"default": {
"modules": [{ "id": "capabilities/auth", "targetPackage": "auth" }]
}
}
},
"payments": {
"providers": {
"default": {
"modules": [{ "id": "capabilities/payments", "targetPackage": "payments" }],
"dependencies": { "packages": ["auth"] }
}
}
},
"nextjs": {
"providers": {
"default": {
"modules": [{ "id": "capabilities/nextjs", "targetPackage": null, "targetApps": ["web"] }]
}
}
}
}
}Resolution
authpackage →capabilities/auth→packages/auth/paymentspackage →capabilities/payments→packages/payments/(depends onauth)nextjsframework →capabilities/nextjs→apps/web/
Related
- Recipe Book Resolver - How recipes are resolved
- Composition Engine - Uses recipe books
- V2Genome Structure - How packages are defined