Чем больше сообщество вложится в мост, тем мощнее инструмент«DomainCraft» — рабочее название
DomainCraft
Open source · доменный компилятор

Опишите домен один раз в YAML и скомпилируйте весь продукт — API, веб, мобильное приложение.

DomainCraft компилирует один domain.yaml в продакшн-API, типизированный веб-клиент и админку. Типы, валидация, запросы и права остаются согласованными во всех слоях — по построению.

Скачать бинарникWindows · macOS · Linux · ARM64
domaincraft generate
▸▍
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]

Стек, который поставляется с коробки

  • Ядро Go
  • ASP.NET Core
  • EF Core
  • PostgreSQL
  • TypeScript
  • Dapr
  • Docker

Проблема

Каждый проект начинается с одного и того же скучного бойлерплейта.

CRUD-эндпоинты, репозитории, DTO, миграции, настройка авторизации, валидация, права доступа — дни однообразной работы, где легко ошибиться и скучно.

Традиционный подход
С DomainCraft
×

Руками писать 50+ файлов на сущность

✓

Определить 1 сущность в ~10 строках YAML

×

Повторять CRUD-логику в каждом проекте

✓

Генерировать одинаково каждый раз

×

Чинить одни и те же баги бойлерплейта

✓

Чинить баги в шаблонах — сразу везде

×

Сменить язык? Перепиши всё

✓

Сменить мост, оставив тот же домен

×

Изменился API — фронтенд молча сломался

✓

Регенерация: все слои обновляются из одной модели

×

Права доступа разбросаны по всему коду

✓

Объявлены рядом с сущностью, связаны сквозно

Как работает

Одна модель, весь конвейер.

Ваш domain.yaml проходит через детерминированный компилятор — а не через чёрный ящик.

  1. 01

    Опишите домен

    Сущности, поля, связи, права, фичи и сид-данные живут в одном читаемом и диффуемом domain.yaml.

  2. 02

    DomainCraft валидирует и строит IR

    Строгие парсер, лексер и валидатор ловят логические ошибки до генерации; промежуточное представление связывает каждую связь.

  3. 03

    Мосты рендерят продакшн-код

    Подключаемые шаблоны моста превращают IR в идиоматичный код для вашего стека — с манифестом файлов и снимком миграций.

domain.yamlParserValidatorIRRenderercode

Возможности

Всё, что нужно вашему продукту, декларативно, не вручную.

Каждая фича — пара декларативных слов в domain.yaml. Шаблон делает остальное — одинаково, каждый раз.

Одна модель — весь контракт

Типы, валидация, запросы, права и ошибки собираются из одного IR для каждого слоя — бэкенд, веб-клиент, админка. Им невозможно разойтись.

Day-2 safety · Generation Gap

Кастомный код переживает регенерацию. Сгенерированные части обновляются, ваши хуки остаются — без затирания.

Права RBAC + ABAC

read: ["*"], update: ["@Owner", Admin] — публичный, ролевой и ownership-доступ, собранный в политики.

Движок миграций схемы

Снимки, old_name-ренеймы, очистка сирот и --prune — безопасный рефакторинг домена.

Подключаемые мосты

Мост — это обычные шаблоны и манифест, без Go-кода. Новый язык — за один вечер.

Админка одним флагом

domaincraft generate --admin собирает CRUD-админпанель для вашего API без настройки.

Инфраструктурные аддоны

Опишите очередь, кэш, секреты и хранилища — подключите Dapr, event_sourced и enterprise-инфраструктуру декларативно.

Для кого это

Одна модель, три задачи.

DomainCraft служит каждому, кто касается продукта — API, веб-клиента и экранов между ними.

Бэкенд-разработчикам

Продакшен-API на ASP.NET Core + PostgreSQL сразу из коробки — JWT-авторизация, миграции, проверки прав. Бизнес-логика живёт в хуках Generation Gap, а не в сгенерированных файлах.

  • REST API с авторизацией, ролями и изоляцией @Owner
  • EF Core + PostgreSQL с миграциями базы
  • Хуки для бизнес-логики без правки сгенерированного кода

Фронтенд-разработчикам

Типизированный клиент, скомпилированный из той же модели — типы, запросы и права не могут разойтись с API, потому что собраны из одного IR.

  • Типы + Zod-валидация из одного промежуточного представления
  • Типизированная грамматика запросов path:op:value
  • Фреймворк-агностичное ts-core, React через react-rest

ИИ-агентам

Экраны строятся поверх сертифицированного клиента: права и схема запросов уже часть типов, поэтому агент пишет интерфейс, а не угадывает API.

  • Скиллы агента для каждого моста с рецептами UI
  • Матрица прав на уровне типов
  • Никакого угадывания контракта API
AI-native · Создан для ИИ-разработки

Весь ИИ-цикл, одной сессией.

Агент описывает домен, DomainCraft компилирует API и его типизированный TypeScript-клиент из одной модели, агент вписывает бизнес-логику в хуки — и docker compose up всё запускает. Ничего не забыто, ничего не вручную.

01

Опишите домен

Один файл — вся спецификация: сущности, связи, права, фичи. Всё остальное компилятор выводит из него.

02

Компиляция стека

domaincraft generate выдаёт продакшн-API на ASP.NET Core плюс типизированный TypeScript-клиент и админку — детерминированно при каждом запуске.

03

Бизнес-логика в хуки

Агент реализует хуки в Services/<Entity>Service.cs (overwrite: false) — ровно в тех файлах, которых генератор никогда не касается.

04

Запуск и итерации

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 ready

DomainCraft Studio

Спроектируйте домен визуально.

Перетаскивайте диаграммы сущностей, редактируйте матрицу прав и YAML в реальном времени с WASM-валидацией — всё, что вы рисуете, это валидный domain.yaml.

  • ✓Граф и код с двусторонней синхронизацией
  • ✓Мгновенная WASM-валидация
  • ✓Общий реестр ролей и матрица прав
domaincraft-studio↗

Мосты

Один домен, любой стек.

Каждый мост — это подключаемый пакет шаблонов. Ядро не знает языков — оно поставляет IR и ничего не навязывает. Композиция даёт 1 ядро + N тонких адаптеров вместо N×M мостов. Экраны строят ИИ-агенты поверх типизированного клиента.

csharp-rest

Готов

ASP.NET Core + EF Core + PostgreSQL + JWT (core → domain → efcore → rest).

ts-core

Готов

Тонкое TypeScript-ядро — типизированный DSL запросов, wire-значения enum, матрица прав.

ts-client + react-rest

Готов

Zod, fetch-клиент, CRUD, хуки TanStack Query (extends ts-core).

admin-alpine

Готов

Админ-панель для любого REST-бэкенда — один флаг --admin.

Создайте свой мост

Мосты — это обычные шаблоны и манифест. Без Go-кода — добавьте язык за один вечер.

Хватит писать бойлерплейт. Начинайте выводить свой домен.

Go не нужен — скачайте бинарник и скомпилируйте первый проект уже сегодня.

или установить через Go

go install github.com/DomainCraft/DomainCraft/cmd/domaincraft@latest