The more the community invests in a bridge, the more powerful the tool becomes“DomainCraft” is a working title
DomainCraft

Reference

Bridges registry · Docs — DomainCraft

Known bridges, axes and layers, and how composition and replacement work.

A bridge is a set of templates that turns your domain.yaml into code for one language or framework. The registry is hard-coded and clones on demand into ~/.domaincraft/bridges/.

Registered bridges

ID Layer Language Description Composition
csharp-core core C# Thin language core — enum wire, entity types, query schema base
csharp-domain domain C# Domain + Application (services, Generation Gap, ports) extends: csharp-core
csharp-efcore persistence C# EF Core + PostgreSQL + Hangfire extends: csharp-domain
csharp-rest transport C# ASP.NET Core REST + JWT + k8s/tests extends: csharp-efcore
csharp-restful — C# Archived monolith (71 templates) — use csharp-rest (core→domain→efcore→rest) —
ts-core core TypeScript Thin language core — enum wire, types, query schema, permissions base
ts-client client TypeScript Zod validation, JWT client, CRUD API extends: ts-core
react-rest framework TypeScript React — TanStack Query + useCan extends: ts-client
appwrite — JSON Appwrite TablesDB + teams + settings (appwrite.config.json) single layer
admin-alpine — HTML Alpine.js admin panel (--admin) single layer

csharp-rest via core→domain→efcore→rest is byte-identical to the archived csharp-restful — verified on examples/domain.yaml (142 files) and compliance-suite/kitchen-sink.yaml (187 files).

Axes and layers

A layered bridge is one layer in one axis — see Axes and layers for the full model.

Generate with a bridge

domaincraft generate --domain domain.yaml --bridge csharp-rest
domaincraft generate --domain domain.yaml --bridge csharp-rest --replace persistence=csharp-dapper
domaincraft generate --domain domain.yaml --bridge ../domaincraft-bridge-csharp-rest
domaincraft generate --domain domain.yaml --bridge ts-core
domaincraft generate --domain domain.yaml --bridge ts-client
domaincraft generate --domain domain.yaml --bridge react-rest

# with admin panel
domaincraft generate --domain domain.yaml --bridge csharp-rest --admin

Composition details

Base templates/helpers/type_mappings.yaml render first, adapter wins on conflict. output_dir/name/delimiters from the top adapter; migrations:/registry_packages — first enabled top-down. when: (hasAuth, hasSeed, hasAddon:dapr, …) is evaluated per template regardless of owner. Resolution reuses the same path/ID/owner/repo logic as --bridge plus a sibling-checkout fallback for monorepo dev (resolveBaseChain).

Adding a bridge

Append to DefaultRegistry in internal/bridge/registry.go and add layer + optional extends in bridge.yaml:

{
  ID:     "csharp-dapper",
  Name:   "C# Dapper",
  Language: "C#",
  GitHub: "DomainCraft/domaincraft-bridge-csharp-dapper",
},
name: csharp-dapper
layer: persistence
extends: csharp-domain   # thin core → domain → this persistence

Edit this page on GitHub