Об этом проекте

Cratefield Harness — это open-source ядро под лицензией MIT, лежащее в основе Cratefield. Это бэкенд-фреймворк на Rust, из которого вы компилируете собственный бэкенд. Основная идея заключается в том, что каждому продукту нужен бэкенд, и почти никто не должен создавать его с нуля. Вы выбираете модули-крейты, подключаете адаптеры и развертываете один stateless Worker с собственной базой данных. Модель композиции. Проект объявляет строитель (builder) Harness с идентификатором предприятия, публичным URL и CORS-источниками, добавляет модули и выбирает среду выполнения (runtime) с привязкой к базе данных, провайдерами почты и капчи. Сборка отклоняет модуль, если ему требуется порт, который не предоставляет runtime, если два модуля претендуют на одну таблицу или маршрут, или если модуль собран под другой версией контракта. Шаблон проекта запускает композицию через cargo test, поэтому ошибки конфигурации выявляются до развертывания. Модули и порты. Модуль представляет собой крейт, реализующий трейт Module, и монтируется по версионному пути согласно имени модуля. Он объявляет свое имя, требуемые порты, миграции (SQL, встроенный через include_str!, в подмножестве, поддерживаемом SQLite и Postgres) и axum-роутер. Модули никогда не взаимодействуют напрямую с привязками вендоров, переменными окружения или клиентами вендоров; они запрашивают порты, такие как Database, Mailer, Captcha, RateLimiter, Signer и KeyValue, на которые отвечают адаптеры. Согласно README, именно это правило позволяет сменить Cloudflare, просто заменив один крейт runtime. Включенные крейты. Фасад cratefield; cratefield-core с трейтом Module, строителем Harness, трейтами портов, ошибками problem+json, областью видимости запроса, шиной событий и шаблонами; cratefield-runtime-cloudflare; адаптеры для почты Resend, капчи Turnstile и SQLite через rusqlite; модули email-signup с двойным подтверждением (double opt-in), отменой подписки и админ-экспортом, а также waitlist с подтверждением, позицией и реферальными кодами; cratefield-secrets с секретами, зашифрованными конвертом через порт Database; cratefield-kms для оборачивания и распаковки ключей данных с локальным провайдером файлов, который запрещен в продакшене; cratefield-ui, который рендерит интерфейс модулей в HTML по адресу /ui; cratefield-cli, предоставляющий бинарный файл fz с командами collect (миграции), doctor и modules; и cratefield-testing — комплект соответствия, который должен пройти каждый модуль. В планах — cratefield-adapter-postgres на базе sqlx и cratefield-runtime-native на tokio. Миграции и запросы. Запросы проходят через sea-query, поэтому они рендерятся для любой из поддерживаемых баз данных. Ссылки для подтверждения и отписки представляют собой токены, подписанные HMAC с ротацией ключей, поэтому хранилище сессий отсутствует. Область видимости запроса передается в расширениях axum, а не в общем состоянии; комплект соответствия включает тест на параллельные запросы для проверки этого механизма. Монтирование. Модуль либо компилируется в Worker (по умолчанию), либо запускается как sidecar с собственным Worker, который собирается и развертывается отдельно и монтируется по тому же пути через service binding с той же базой данных и секретами. В README указано, что опция sidecar спроектирована, но еще не реализована. Наблюдаемость. Один структурированный span на запрос содержит request_id, method, route, module, status, duration_ms, ip_hash и ua_family, но никогда не содержит email-адрес. Логи Workers включены в шаблон wrangler.toml, а ответы возвращают x-request-id. Таксономия ошибок генерируется из основного реестра и проверяется на соответствие в CI. Дорожная карта. M0 — фундамент (инструментарий workspace, core, Cloudflare runtime, адаптеры Resend, Turnstile и SQLite, fz, комплект тестирования), M1 — первые модули, M2 — запуск первого проекта с публикацией в crates.io, документацией и версионированием контрактов (в процессе), и M3 — переносимость для self-hosted с адаптером Postgres, native runtime, набором тестов на паритет и переносом данных. Указаны еще три эпика, но они не запланированы. Инструментарий и статус. Используется Stable Rust (закреплен в rust-toolchain.toml), целевая платформа wasm32-unknown-unknown, worker-build и wrangler; CI запускает fmt, clippy (с запретом предупреждений), тесты, cargo deny и собирает пример проекта в wasm, чтобы в модуль не попала зависимость только для native. Крейты еще не опубликованы в crates.io, поэтому в README рекомендуется подключать репозиторий через git. Приватные крейты помечены publish = false. Лицензия: MIT.