Русский
Класс инструмента: живой сервер поверх Markdown-файлов
О чём это: как называется класс, в котором живёт trip2g, кто соседи, и что в позиционировании честно, а что — маркетинг. Короткий ответ: это flat-file CMS — контент в файлах, рендер в рантайме, без отдельной базы-сервера. Ниша существует лет пятнадцать, но осталась тонкой: рынок разъехался на два полюса — статические генераторы и CMS с базой данных, — а середину почти никто не занял. trip2g стоит в этой середине, с двумя отличиями: поверхность редактирования — это локальный Obsidian-vault с синхронизацией, а под капотом не буквальные файлы, а SQLite. Гибрид: редактируешь как файлы, сервер работает как база.
Ощущение, с которого всё началось
Есть простая потребность, под которую годами не было простого инструмента: «сделать маленький сайт из HTML и шаблонов». Почти любой сайт — это заметки, страницы, немного навигации. Хочется что-то вроде nginx плюс API, который умеет точечно сохранять файлы. Положил Markdown — получил страницу. Поправил шаблон — страница изменилась. Без базы, без билд-пайплайна, без деплой-церемоний.
Инструменты под это есть. Класс называется flat-file CMS (ещё говорят database-less или file-based CMS): контент лежит в Markdown-файлах, шаблоны рендерятся в рантайме на сервере, редактирование — через панель или API, отдельной базы нет. Родословная: Grav (PHP, Markdown + Twig), Kirby, Statamic, и мельче — Automad, WonderCMS, Bludit, Pico, HTMLy. Почти все — из PHP-эпохи: скинул папку на shared-хостинг, и работает.
Но класс остался нишевым. Почему — видно, если посмотреть, куда разъехался рынок.
Два полюса, тонкая середина
Рынок публикации раскололся надвое.
Полюс первый — статические генераторы: Hugo, Eleventy, Astro, Zola, Jekyll. Тот же Markdown, те же шаблоны, но рендер на этапе сборки. Результат — статика на CDN. Минус один, но структурный: нет живого сервера. Некому принять запись через API, некому проверить подписку, некому ответить агенту. Любое изменение — это пересборка и передеплой.
Полюс второй — CMS с базой: WordPress и его наследники. Живой сервер есть, но контент живёт в базе, редактор — в веб-админке, файлы — экспортный артефакт, а не источник. Плюс отдельный процесс базы данных, который надо обслуживать.
Середина — живой сервер, файлы на диске, маленькие шаблоны, правка на месте — досталась той самой тонкой прослойке flat-file CMS. И даже внутри неё никто не сделал главного хода: файлы — это не «файлы на сервере», а ваш локальный Obsidian-vault, который синхронизируется. У Grav и Kirby поверхность редактирования — админ-панель или SFTP. Пишешь всё равно у них, а не у себя.
Есть ещё два семейства соседей по другим осям.
Git-based / headless file-CMS: Decap (бывший Netlify CMS), TinaCMS, Keystatic, Sveltia, PagesCMS. Это ровно вторая половина формулы — «API, который сохраняет файлы»: панель редактирования коммитит Markdown в git. Но сами они сайт не отдают — это прослойка, приклеенная к фреймворку и SSG-пайплайну. Сервера, который рендерит, у них нет.
Markdown-рантаймы и вики: SilverBullet — ближайший сосед, self-hosted Markdown-платформа с рантаймом и шаблонизацией; TiddlyWiki, DokuWiki (тоже файлы + рантайм, но это вики, а не сайт-платформа); Obsidian Publish и Quartz — публикация vault'а, но Publish — проприетарный хостинг без своего сервера у вас, а Quartz — обычный SSG.
Ещё два контраста — не соседи по классу, а его противоположность по источнику контента. Notion→сайт (Super.so, Potion, Simple.ink) превращают Notion в сайт: ниша ровно как у trip2g — «хранилище становится сайтом», — но источник проприетарный, контент заперт в Notion, а не в твоих файлах. trip2g — открытая версия того же хода: Obsidian и git clone всего контента. Эгея (Илья Бирман) — вылизанный self-hosted блог-движок: рантайм с базой, свой браузерный редактор, один зашитый дизайн без тем. Она антипод сразу по двум осям: пишешь в её редакторе, а не в файлах, и без шаблонов. Обе точки показывают, чем берёт trip2g — не полировкой одной вещи, а открытостью файлов и правом шаблонировать что угодно.
Эта карта на одной картинке:
quadrantChart
title Render time vs storage
x-axis Build-time --> Runtime
y-axis Flat files --> Database
quadrant-1 DB-CMS
quadrant-2 thin middle
quadrant-3 SSG
quadrant-4 flat-file CMS
Hugo Eleventy Astro: [0.1, 0.1]
Quartz: [0.14, 0.14]
Decap Tina: [0.25, 0.18]
Obsidian Publish: [0.6, 0.45]
Grav Kirby Statamic: [0.72, 0.15]
SilverBullet: [0.8, 0.2]
trip2g: [0.85, 0.55]
WordPress: [0.88, 0.9]
Диаграмма A: когда рендерится страница (сборка ↔ рантайм) и где живёт контент (плоские файлы ↔ база). trip2g — в рантайме, на границе «файлы, но база».
Где стоит trip2g — и честная оговорка
trip2g собирает обе половины формулы в один процесс: живой сервер, который рендерит шаблоны в рантайме (как Grav), плюс точечный write-API (updateNotes — upsert, патч, find/replace по заметке), плюс синхронизация с локальным vault'ом. Один Go-бинарник, без отдельного процесса базы — по операционной простоте это ближе к nginx, чем к WordPress.
Теперь оговорка, без которой позиционирование было бы маркетингом. trip2g — не чистая flat-file CMS. Под капотом — SQLite, и канонична именно база: note_versions, полнотекстовый индекс, эмбеддинги, подписки. Файлы — это поверхность авторинга, а не физическое хранилище. Vault на вашем диске и git-зеркало — это представления базы, а не наоборот.
То есть это гибрид: редактируешь как файлы — сервер работает как база. UX плоских файлов (любой редактор, читаемые диффы, git clone всего контента) при надёжности и скорости базы (транзакции, индексы, версии, поиск). У чистых flat-file CMS всё наоборот: хранилище честно плоское, зато конкурентная запись, история и поиск — вечная боль, которую каждая решает костылями. trip2g выбирает другой компромисс и не притворяется, что файлы на сервере — буквальные.
Второй разворот: app-shell
Кастомный layout в trip2g — это полноценная HTML-страница с доверием админа. А значит, в неё можно положить SPA.
Это не гипотеза — так уже работают два компонента: канбан-доска и редактор темы. Оба — SPA внутри layout-заметки, которые ходят в GraphQL самого trip2g. Данные для такого приложения берутся двумя путями:
- Из заметок. Канбан хранит модель прямо в Markdown-заметках и сохраняет через
updateNotes. Заметки становятся базой приложения — с версионированием и git-зеркалом бесплатно. - Из своего Postgres рядом. Ставишь PostGraphile или PostgREST, Caddy реверс-проксирует
/api, мост для авторизации — и SPA внутри trip2g-layout работает с полноценной реляционной базой. Цена честная: теряется простота одного бинарника, стек снова собирается из частей.
Получается вторая формула позиционирования: trip2g — это ещё и app-shell. «Принеси своё SPA — я дам хостинг, авторизацию, роутинг, ассеты; данные — из моих заметок или из твоего Postgres». Плюс: MCP-эндпоинт (те же заметки как инструменты для агента), платный доступ и федерация между хабами.
Grav 2.0 (вышел в июне 2026) теперь поставляется с первоклассным REST API, встроенным MCP-сервером и SPA-админкой на SvelteKit — и при этом остаётся чистой flat-file CMS без базы данных. Это ближайший сосед trip2g по духу, и в одном отношении более честный flat-file: каноничное хранилище у Grav — файлы, а не SQLite. Специфика trip2g — в другом: Obsidian-vault как поверхность авторинга с двусторонней синхронизацией, гибрид file-UX поверх SQLite и мультиканальная доставка — веб, Telegram, федерация — из одного бинарника.
quadrantChart
title Editing surface vs platform depth
x-axis Raw files --> Vault surface
y-axis Publishing only --> App platform
quadrant-1 vault + apps
quadrant-2 files + apps
quadrant-3 files, publish
quadrant-4 vault, publish
Hugo Eleventy: [0.15, 0.1]
Grav Kirby: [0.2, 0.3]
Decap Tina: [0.28, 0.4]
TiddlyWiki: [0.55, 0.45]
SilverBullet: [0.72, 0.55]
Notion: [0.65, 0.72]
Obsidian Publish: [0.85, 0.15]
trip2g: [0.85, 0.85]
Диаграмма B: что служит поверхностью редактирования (сырые файлы ↔ vault/заметки) и насколько инструмент выходит за публикацию (только сайт ↔ платформа с write-API и агентами). Notion — контрастная точка: похожая поверхность и платформенность, но проприетарное хранилище без файлов.
Ещё три оси
Позиция trip2g не читается с одной картинки — она держится сразу на нескольких осях, и на каждой отделяет его от разных соседей. Три диаграммы ниже дорисовывают то, чего не видно на A и B.
Операционная модель. Сколько процессов надо крутить и живой ли сервер. Здесь trip2g стоит рядом с SSG по простоте (один бинарник), но по «живости» — на стороне WordPress. Именно эта клетка — «один процесс И живой сервер» — заполнена редко: Grav 2.0 (flat-file, без базы) — ближайший сосед в ней, рядом с SilverBullet.
quadrantChart
title Ops model vs liveness
x-axis One process --> Assembled stack
y-axis Static output --> Live server
quadrant-1 stack, live
quadrant-2 one binary + live
quadrant-3 one binary, static
quadrant-4 assembled, static
Hugo Eleventy: [0.15, 0.1]
SilverBullet: [0.2, 0.75]
Grav 2.0: [0.3, 0.78]
trip2g: [0.18, 0.82]
Decap Tina: [0.7, 0.2]
WordPress: [0.75, 0.85]
Диаграмма C: сколько частей надо собрать (один процесс ↔ собранный стек) и живой ли рантайм (статика ↔ сервер). trip2g — «один бинарник И живой сервер»; Grav 2.0 стоит в той же клетке — flat-file PHP, без базы, живой сервер.
Модель контента и способ доставки. Что внутри — документы или записи базы, — и как это отдаётся: страницей или программным интерфейсом. Классические CMS и SSG отдают страницы из документов. Headless-CMS отдают записи по API. trip2g уникален тем, что один и тот же документ отдаётся и страницей человеку, и инструментом агенту через MCP.
quadrantChart
title Content model vs delivery
x-axis Documents --> Database records
y-axis Page only --> API / agent endpoint
quadrant-1 records, API
quadrant-2 docs, API
quadrant-3 docs, page
quadrant-4 records, page
Hugo: [0.15, 0.1]
Grav 2.0: [0.15, 0.65]
Obsidian Publish: [0.1, 0.2]
WordPress: [0.6, 0.25]
Contentful Strapi: [0.72, 0.8]
Decap Tina: [0.35, 0.55]
trip2g: [0.3, 0.88]
Диаграмма D: что за контент внутри (документы ↔ записи базы) и как он отдаётся (только страница ↔ API/эндпоинт для агента). trip2g отдаёт один документ и страницей, и MCP-инструментом — верхний край при документной модели.
Замок и потолок. Насколько контент заперт (открытые файлы ↔ проприетарный формат) против того, как далеко инструмент выходит за публикацию (только сайт ↔ платформа с приложениями). Notion и Contentful дают платформенность ценой замка. SSG дают открытость без платформы. trip2g целит в верхний правый угол: открытые Markdown-файлы, git clone всего — и при этом app-shell.
quadrantChart
title Lock-in vs capability
x-axis Open files --> Proprietary store
y-axis Publish only --> App platform
quadrant-1 proprietary, platform
quadrant-2 open, platform
quadrant-3 open, publish
quadrant-4 proprietary, publish
Hugo: [0.15, 0.1]
Grav 2.0: [0.15, 0.55]
SilverBullet: [0.2, 0.5]
Obsidian Publish: [0.55, 0.2]
WordPress: [0.7, 0.55]
Notion Contentful: [0.85, 0.75]
trip2g: [0.22, 0.85]
Диаграмма E: насколько заперт контент (открытые файлы ↔ проприетарное хранилище) и насколько инструмент — платформа (только публикация ↔ приложения). trip2g — открытые файлы плюс app-shell, тогда как платформенность обычно покупается замком.
Когда это не ваш инструмент
Честный список, чтобы позиционирование не превратилось в «подходит всем».
- Чисто статический сайт без записи. Если нужен блог раз в неделю и ничего живого — Hugo на CDN проще, дешевле и неубиваемее. Живой сервер — это то, что надо где-то крутить.
- Нужен буквальный flat-file на сервере. Если требование — «файлы на диске сервера и есть система», берите Grav или SilverBullet. У trip2g на сервере канонична SQLite; файлы — снаружи, у вас.
- Большое приложение с реляционной моделью. App-shell с Postgres рядом работает, но это уже собранный стек: Caddy, PostGraphile, auth-мост. На этой поляне честнее сравниваться с обычным веб-фреймворком — и часто он выиграет.
- Команда без Markdown-культуры. Поверхность редактирования — vault и файлы. Тем, кому нужен WYSIWYG-редактор для десяти редакторов сразу, привычнее классическая CMS.
Итог
Формула класса: flat-file CMS, у которой поверхность — локальный Obsidian-vault, а сервер — один бинарник с точечным write-API. Гибрид «файлы снаружи, база внутри» — не компромисс, а выбор: UX файлов, надёжность базы. И поскольку сервер живой, а API пишет точечно, тот же инструмент оказывается app-shell'ом для маленьких приложений — от канбана на заметках до SPA с Postgres под боком. Середина между Hugo и WordPress больше не пустая — Grav 2.0, SilverBullet и другие тоже стоят в ней. Специфика trip2g — в другом: Obsidian-vault как поверхность авторинга с двусторонней синхронизацией, гибрид file-UX поверх SQLite и мультиканальная доставка — веб, Telegram, федерация — из одного бинарника.