Socotra
YAML reference

socotra.yaml reference

Schema 1.1. Every field, type, default, and validation rule.


Full example

socotra.yaml
socotra:
  version: "1.1"
  solution:
    name: "MyApp"
    rootNamespace: "MyCompany.MyApp"
    dotnetVersion: "net9.0"
    outputPath: "./src"
    nullable: true
    implicitUsings: true
    treatWarningsAsErrors: true
  architecture:
    pattern: modular-monolith
    enforceLayerConstraints: true
    allowedDependencies:
      - from: "*.Domain"
        to: "*.Domain"
  modules:
    - name: "Orders"
      namespace: "MyApp.Orders"
      description: "Order processing module"
      layers:
        - name: "Domain"
          type: ClassLib
          templates: ["base-entity", "value-object"]
        - name: "Application"
          type: ClassLib
          references: ["Orders.Domain", "../SharedKernel"]
          packages: ["FluentValidation:11.9.2"]
        - name: "Infrastructure"
          type: ClassLib
          references: ["Orders.Application"]
          packages: ["Microsoft.EntityFrameworkCore.SqlServer:8.0.0"]
        - name: "Api"
          type: WebApi
          references: ["Orders.Application", "../SharedKernel"]
  shared:
    - name: "SharedKernel"
      type: ClassLib
      templates: ["base-entity", "result-pattern"]
  host:
    name: "MyApp.Api.Host"
    type: WebApi
    references: ["**/*.Api"]

Root: socotra

FieldTypeRequiredDescription
versionstringYesSchema version. Must be "1.0" or "1.1"
solutionobjectConditionalRequired if no modules are defined
architectureobjectNoArchitecture constraints and dependency rules
modulesarrayConditionalRequired if no solution is defined
sharedarrayNoShared projects referenced by modules
hostobjectNoHost / entry-point project
SCT-000
At least one of solution or modules must be present.

socotra.solution

FieldTypeRequiredDefaultDescription
namestringYesSolution name (used for .sln filename)
rootNamespacestringNonameRoot namespace for generated code
dotnetVersionstringYesTarget framework
outputPathstringNo"./"Directory where projects are created
nullableboolNotrueEnable nullable reference types
implicitUsingsboolNotrueEnable implicit usings
treatWarningsAsErrorsboolNofalseTreat all warnings as errors

Valid dotnetVersion: net8.0, net9.0, net10.0, netstandard2.0, netstandard2.1

socotra.architecture

FieldTypeRequiredDefaultDescription
patternstringNomodular-monolithArchitecture pattern
enforceLayerConstraintsboolNofalseValidate references against allowedDependencies
allowedDependenciesarrayNoAllowed dependency rules

Patterns

  • modular-monolith — monolithic solution decomposed by business modules with DDD-style layers (Domain, Application, Infrastructure, Api). Recommended for large team-scale monoliths that may later extract to microservices.
  • clean-architecture — single-module solution with strict layer dependency inversion (WebApi → Application → Domain). Recommended for smaller projects or strict onion/hexagonal architectures.

socotra.modules[]

FieldTypeRequiredDescription
namestringYesModule name. Must be unique (SCT-003)
namespacestringNoOverride namespace for this module's projects
descriptionstringNoHuman-readable description
layersarrayYesList of layer definitions within this module

layers[]

FieldTypeRequiredDescription
namestringYesMust be unique within the module (SCT-004)
typestringYesProject type — see enum below
templatesarrayNoTemplate names to apply to this project on creation
referencesarrayNoProject references
packagesarrayNoNuGet packages — format "PackageId:Version"

socotra.shared[]

Shared projects not tied to any specific module but referenceable by any layer.

FieldTypeRequiredDescription
namestringYesUnique across all shared, modules, and host
typestringYesProject type
templatesarrayNoTemplate names to apply
referencesarrayNoProject references
packagesarrayNoNuGet packages

socotra.host

Host / entry-point project — typically a WebApi or Worker that references module Api projects.

FieldTypeRequiredDescription
namestringYesHost project name
typestringYesProject type
templatesarrayNoTemplate names to apply
referencesarrayNoProject references
packagesarrayNoNuGet packages

Reference resolution

PatternExampleResolution
Exact nameMyApp.DataMatches project by exact name
GlobMyApp.*Converted to regex, matches multiple projects
Module.LayerOrders.DomainResolves to Orders module's Domain layer project
Local prefix./DataStrips ./ prefix, resolves relative to current context
Relative path../MyApp.DataUses last segment (Data) for name matching

Glob patterns support * (single-segment) and ** (multi-segment).

ProjectType enum

Value.NET templateDescription
ClassLibclasslib.NET class library
WebApiwebapiASP.NET Core Web API
WorkerworkerWorker service
ConsoleconsoleConsole application
Mauimaui.NET MAUI app
BlazorblazorserverBlazor Server
BlazorWasmblazorwasmBlazor WebAssembly
WpfwpfWPF application
WinFormswinformsWindows Forms
XunitTestxunitxUnit test project
NUnitTestnunitNUnit test project
MsTestmstestMSTest test project
RazorrazorclasslibRazor class library

Package format

packages:
  - "FluentValidation:11.9.2"
  - "Microsoft.EntityFrameworkCore.SqlServer:8.0.0"
  - "Serilog.AspNetCore:8.0.0"

Both PackageId and Version are validated against NuGet naming conventions (SCT-009).

Schema migration: 1.0 → 1.1

  • socotra.architecture for constraint enforcement
  • socotra.shared for cross-module shared projects
  • socotra.host for explicit entry-point projects
  • allowedDependencies for fine-grained layer access

Use socotra migrate to upgrade a 1.0 file. The original is backed up with a .bak extension.

Schema 1.1 · CLI 1.0