Day-2 safety · Generation Gap
Кастомный код переживает регенерацию. Сгенерированные части обновляются, ваши хуки остаются — без затирания.
DomainCraft превращает один domain.yaml в полностью рабочий код — CRUD, авторизация, права, миграции, админка. Детерминированный вывод, чистая компиляция, безопасная регенерация.
project:
name: MyShop
database: postgresql
auth:
type: jwt
entity: User
roles: [Admin, User]
entities:
User:
fields:
id: uuid [primary]
email: string [email, unique]
password: string [hidden]
Product:
features: [audit, soft_delete]
fields:
id: uuid [primary]
title: string [required, min:3]
price: decimal [required, gte:0]
permissions:
read: ["*"]
create: [Admin]Стек, который поставляется с коробки
Проблема
CRUD-эндпоинты, репозитории, DTO, миграции, настройка авторизации, валидация, права доступа — дни однообразной работы, где легко ошибиться и скучно.
Руками писать 50+ файлов на сущность
Определить 1 сущность в ~10 строках YAML
Повторять CRUD-логику в каждом проекте
Генерировать одинаково каждый раз
Чинить одни и те же баги бойлерплейта
Чинить баги в шаблонах — сразу везде
Сменить язык? Перепиши всё
Сменить мост, оставив тот же домен
Права доступа разбросаны по всему коду
Объявлены рядом с сущностью, связаны сквозно
Как работает
Ваш domain.yaml проходит через детерминированный компилятор — а не через чёрный ящик.
Сущности, поля, связи, права, фичи и сид-данные живут в одном читаемом и диффуемом domain.yaml.
Строгие парсер, лексер и валидатор ловят логические ошибки до генерации; промежуточное представление связывает каждую связь.
Подключаемые шаблоны моста превращают IR в идиоматичный код для вашего стека — с манифестом файлов и снимком миграций.
Возможности
Каждая фича — пара декларативных слов в domain.yaml. Шаблон делает остальное — одинаково, каждый раз.
Кастомный код переживает регенерацию. Сгенерированные части обновляются, ваши хуки остаются — без затирания.
read: ["*"], update: ["@Owner", Admin] — публичный, ролевой и ownership-доступ, собранный в политики.
Снимки, old_name-ренеймы, очистка сирот и --prune — безопасный рефакторинг домена.
Мост — это обычные шаблоны и манифест, без Go-кода. Новый язык — за один вечер.
domaincraft generate --admin собирает CRUD-админпанель для вашего API без настройки.
Опишите очередь, кэш, секреты и хранилища — подключите Dapr, event_sourced и enterprise-инфраструктуру декларативно.
Агент описывает домен, DomainCraft генерирует 40+ файлов продакшн-кода, агент вписывает бизнес-логику в хуки — и docker compose up всё запускает. Ничего не забыто, ничего не вручную.
Один файл — весь спецификатор: сущности, связи, права, фичи. Всё остальное генератор выводит из него.
domaincraft generate выдаёт полное ASP.NET Core решение — контроллеры, DTO, репозитории, миграции, тесты, Docker — детерминированно при каждом запуске.
Агент реализует хуки в Services/<Entity>Service.cs (overwrite: false) — ровно в тех файлах, которых генератор никогда не касается.
docker compose up поднимает API + Postgres. Изменили модель и перегенерировали — таблицы переименуются за вас, данные сохранятся.
Вы → агент
You are building an online store with DomainCraft.
1. Draft the domain: Product + Category entities with
relations, audit + soft_delete features and permissions
(public read, Admin create/delete, @Owner update).
2. I'll run: domaincraft generate
3. Then I'll write the custom business logic in the hooks.
4. And deploy it: docker compose up
Output only a valid domain.yaml.Агент → domain.yaml
entities:
Product:
features: [audit, soft_delete]
fields:
id: uuid [primary]
title: string [required, min:3]
price: decimal [required, gte:0]
categoryId: relation(Category) [optional]
permissions:
read: ["*"]
create: [Admin]
update: ["@Owner"]
Category:
fields:
id: uuid [primary]
name: string [required, unique]$ domaincraft generate
✓ Schema valid (2 entities)
✓ 42 files generated · compiles clean
src/WebApi/Controllers/ProductsController.g.cs
src/Application/Generated/ProductService.g.cs
tests/ApiTests.g.csАгент → бизнес-хуки
// ProductService.cs — your file, overwrite: false
protected override async Task<HookResult> OnBeforeCreateAsync(
Product entity, CancellationToken ct)
{
if (entity.Price <= 0)
return HookResult.Fail("Price must be positive");
return HookResult.Success();
}$ docker compose up
[+] Running 2/2
✔ Container postgres Started
✔ Container api Started
✓ API :8080 · Postgres · health readyDomainCraft Studio
Перетаскивайте диаграммы сущностей, редактируйте матрицу прав и YAML в реальном времени с WASM-валидацией — всё, что вы рисуете, это валидный domain.yaml.

Мосты
Каждый мост — это подключаемый пакет шаблонов. Ядро не знает языков — оно поставляет IR и ничего не навязывает.
ASP.NET Core REST API · чистая архитектура · EF Core + PostgreSQL + JWT + аддоны Dapr.
Spring Boot REST API для JVM. В планах.
Бэкенд TypeScript / Express / Prisma. В планах.
Сообщество
Читайте исходники, запускайте, форкайте — без аккаунта, без ограничений, без привязки.
Разрешительная лицензия — ваш сгенерированный код остаётся вашим, без условий.
Понятные гайды и строгое протестированное ядро.
Больше БД, больше стилей API, больше аддонов — открытый трекинг в репозитории.
Звёзды — сигнал реальной востребованности. Помогите другим разработчикам найти DomainCraft.