GoCMS: технологический стек, исходники и архитектурные решения
GoCMS: технологический стек, исходники и архитектурные решения
В этой статье мы разберём, на чём построена система, почему выбран именно такой стек и где найти исходный код
Автор: Mr Gopher
Опубликовано: 2026-05-11T16:06:37Z
Тема: gocms-default | Пресет: default
GoCMS — это не монолит и не «чёрный ящик». Это композиция трёх чётко разделённых слоёв, каждый из которых решает свою задачу и может использоваться независимо. В этой статье мы разберём, на чём построена система, почему выбран именно такой стек и где найти исходный код.
Три слоя: Framework, UI8Kit и GoCMS
Всё начинается с fastygo/framework — небольшого, самобытного Go-фреймворка. Его задача — предоставить безопасные и предсказуемые примитивы для веб-приложений с серверным рендерингом, без навязывания CLI, DI-контейнера или ORM.
На нём строится UI8Kit — набор type-safe UI-компонентов для Go + templ + Tailwind CSS, выполненный в духе shadcn/ui. Он даёт атомы и композиты интерфейса, которые рендерятся на сервере и используют только семантические токены.
И наконец, сам GoCMS — реализация CMS, которая следует контракту совместимости, описанному в go-codex/en. GoCMS добавляет контент-модель, админку, REST, runtime-профили и плагинную архитектуру.
Framework: минимализм как принцип
Фреймворк построен на трёх «не»:
Никакого лишнего кода. Если 30 строк на stdlib решают задачу — не тащим 30 тысяч строк сторонней библиотеки.
Никаких скрытых запросов. Нет неожиданных походов в БД, фоновых горутин без явного контракта и утечек ресурсов.
Никаких ненужных зависимостей. Прямые зависимости помещаются в одну строку:
github.com/a-h/templ, goldmark (опционально) и goleak (только для тестов).
Архитектура слоистая и строгая:
Go stdlib (
net/http,log/slog,crypto/rand).Доменные примитивы (
pkg/core,pkg/cache,pkg/observability).HTTP-слой и авторизация (
pkg/web/*,pkg/auth).Интеграционный слой (
pkg/app— AppBuilder, Feature, lifecycle).
Приложение пишет main, который конструирует всё явно (composition root). Фреймворк не прячет ничего за реестрами и не запускает сервер сам.
Ключевой контракт — Feature. Каждый модуль (блог, профиль, дашборд) реализует интерфейс с методами ID(), Routes() и NavItems(). Опциональные возможности (Initializer, Closer, HealthChecker, BackgroundProvider) подключаются через type assertion — мелкие фичи остаются маленькими.
Middleware-цепочка фиксирована и включает защиту по умолчанию: RequestID, Recover, Security Headers, BodyLimit, AntiBot, RateLimit, структурированное логирование. Health- и metrics-эндпоинты используют укороченную цепочку, чтобы не мешать оркестраторам.
UI8Kit: компоненты без «магии»
UI8Kit — это не дизайн-система и не набор готовых страниц. Это слой примитивов и нейтральных композитов:
ui/— атомы и контролы форм.components/— переиспользуемые композиты, собранные из примитивов.utils/variants.goи props — для типобезопасных вариантов и стилей.
Принципы просты и жёсткие:
Только семантические токены из
styles/base.css. Никаких брендовых градиентов и ad-hoc утилит в.templ.В шаблонах —
class={ helpers }, а не сырые Tailwind-строки.Теги с жёсткой моделью контента (
table,li,details) имеют свои примитивы;BoxиStackне становятся свалкой всех HTML5-тегов.CSS-only взаимодействия где возможно; ARIA и клавиатурная навигация — обязательно.
Примеры в
tests/examples/— это чистая точка отсчёта для внешних репозиториев Elements и Blocks.
Результат: один и тот же компонент можно использовать и в админке GoCMS, и в публичном сайте, и в дашборде — без дублирования классов и без риска сломать стили при обновлении.
GoCMS: CMS поверх проверенного фундамента
GoCMS добавляет:
Runtime-профили (full, headless, admin, playground, conformance).
Storage-профили (sqlite, memory, json-fixtures, browser-indexeddb и планируемые SQL).
Контент-модель (типы, таксономии, media metadata, меню, настройки).
Capability-based авторизация и Argon2id-аутентификация.
Аудит, health-checks, snapshot backup/restore.
Плагинную модель (runtime, admin, интеграционные плагины).
Всё это — один Go-бинарник. Нет PHP, нет внешних зависимостей в runtime, нет «плагин уронил сайт». Безопасность встроена в middleware и lifecycle, а не прикручена позже.
Где посмотреть исходники
Полный обзор и навигацию по репозиториям можно найти здесь:
https://sourcecraft.dev/fastygo/overview
Основные репозитории:
github.com/fastygo/framework— ядро фреймворка (pkg/app, pkg/web, pkg/auth и т.д.).UI8Kit — компоненты и стили (входит в состав GoCMS или отдельным модулем).
GoCMS —
github.com/fastygo/gocms(или эквивалент) — реализация CMS-контрактаgo-codex/en.
В каждом репозитории есть docs/, ADRs, примеры и тесты. Документация обновляется вместе с кодом в том же коммите.
Что это значит на практике
Если вы Go-разработчик — вы получаете:
Полный контроль над
mainи композицией.Предсказуемое поведение при shutdown, panic recovery и graceful degradation.
Type-safe UI без JavaScript-тяжёлых админок.
Возможность взять только нужные слои (например, только Framework + свой UI).
Если вы не пишете на Go — подождите. Полноценное тестирование, conformance-тесты и исчерпывающая Wiki ещё в работе. Когда они будут готовы, появится подробная документация для интеграторов и не-Go команд. До тех пор экспериментировать с исходниками без знания языка и модели ошибок — не лучшая идея.
GoCMS — это не «ещё один CMS». Это инфраструктурный фундамент, который позволяет Go-командам сосредоточиться на бизнес-логике, а не на написании безопасного HTTP-сервера и UI-примитивов с нуля.
Автор
Mr Gopher
Fixtures author for GoCMS content

/source/


