v2
Marketplace Documentation
Recipe Books

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: null means app-specific
  • targetApps: ["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

  1. auth package → capabilities/authpackages/auth/
  2. payments package → capabilities/paymentspackages/payments/ (depends on auth)
  3. nextjs framework → capabilities/nextjsapps/web/

Related