Read in:
Русский

Класс инструмента: разбор с проверкой фактов

О чём это: тот же вопрос, что и в первом эссе — в каком классе живёт trip2g и кто соседи, — но после сверки с реальностью июля 2026. Короткий ответ изменился. trip2g — не «пустая середина flat-file CMS»: середину уже занял Grav 2.0, причём честнее-плоский и с тем же MCP-сюжетом. Настоящая, узкая и защитимая ниша trip2g — пересечение двух вещей, которого больше нет ни у кого: поверхность авторинга — твой личный Obsidian-vault с двусторонней синхронизацией, а доставка — веб + Telegram + агент (MCP) + федерация между хабами, поверх канонической SQLite. Всё остальное — write-API, app-shell, MCP — с июня 2026 уже не отличия, а гигиена нового класса.

Это разбор к первому эссе «Класс инструмента: живой сервер поверх Markdown-файлов». v1 остаётся актуальным; здесь — что изменил Grav 2.0 и где trip2g стоит после этого изменения.

Что изменилось против v1 / исправления

Короткий вывод: тезис v1 наполовину устарел за месяц. 22 июня 2026 вышел Grav 2.0 — и ровно те три вещи, которые эссе назвало «чего у соседей нет совсем» (MCP-эндпоинт, точечный write-API, выход за публикацию), Grav теперь делает из коробки, оставаясь при этом честнее-плоским, чем trip2g. «Середина почти пустая» — преувеличение: середина тонкая, но в ней уже сидит зрелый инструмент, который только что выкатил тот самый AI-сюжет, который trip2g считал своим козырем. Тезис выживает только если сузить нишу с «пустая середина flat-file CMS» до «твой личный Obsidian-vault как поверхность живого сервера с публикацией в несколько каналов и федерацией».

Исправления по убыванию влияния на аргумент:

1. Grav 2.0 (22.06.2026) убивает три «уникальных» отличия trip2g

Grav 2.0 вышел стабильным 22 июня 2026 и принёс:

  • первоклассный REST API в ядре — CRUD по страницам (чтение, создание, правка, перемещение, копирование, удаление), фронтматтер, медиа, конфиг, юзеры, плагины; аутентификация по API-ключу / JWT / сессии; оптимистичная конкурентность через ETag (два клиента не затрут друг друга) — прямой аналог версионной защиты updateNotes в trip2g;
  • первоклассный MCP-сервер — «AI-агент делает всё, что может человек в админке, через тот же API и те же права». Это дословно то, что v1 назвал «чего у соседей нет совсем»;
  • Admin Next — SPA-админка на SvelteKit 5, целиком поверх API, с real-time совместным редактированием, тёмной темой, кастомным дашбордом;
  • при этом всё осталось плоским: файлы, никакой базы, никакого билд-шага, правка идёт в лайв мгновенно.

Вывод, который бьёт по эссе:

  • «MCP-эндпоинт — то, чего у соседей нет совсем» → ложь с 22.06.2026.
  • «Точечный write-API» как отличие → больше не отличие: у Grav ядровый REST API с ETag-конкурентностью.
  • «Из живого сервера с write-API следует app-shell, чего flat-file CMS не обещали» → ослаблено: Grav 2.0 сам построен api-first, headless/decoupled — first-class.
  • Ирония: Grav честнее-плоский, чем trip2g. У Grav канонично файлы, базы нет вообще. У trip2g канонична SQLite. То есть на оси «настоящий flat-file» trip2g проигрывает Grav, а не наоборот.

Источники: getgrav.org/blog/grav-2-stable-released, /blog/grav-2-api, alternativeto.net (новость 06.2026).

2. «Середина почти пустая» — преувеличение

В середине (живой сервер + файлы + маленькие шаблоны) уже сидят: Grav 2.0 (теперь ещё и с API+MCP), Statamic (Laravel-сервер, флат-файл по умолчанию), SilverBullet (self-hosted рантайм). Клетка «один процесс И живой сервер» на диаграмме C не пустая — там как минимум Grav (PHP без базы) и trip2g. Точнее: середина тонкая, но не пустая, и с июня 2026 в ней есть прямой конкурент по AI-сюжету.

3. Statamic — не чистый flat-file, а спектр «файлы ИЛИ база»

Statamic (v5, на Laravel) хранит контент плоскими файлами по умолчанию, но умеет переключаться на базу через Eloquent-драйвер. То есть «гибрид файлы/база» как выбор — уже существует у соседа, только через конфиг, а не через «файлы-снаружи / SQLite-внутри». Это подмывает подачу trip2g «наш компромисс уникален»: уникальна конкретная форма (файловая поверхность как представление канонической SQLite), а не сама идея жить между файлами и базой.

4. SilverBullet v2 — не сервер-рендер и не издательская платформа

Эссе ставит SilverBullet как «ближайшего соседа», «self-hosted Markdown-платформу с рантаймом» на оси «рантайм, плоские файлы». Реальность v2 (2025): local-first / browser-first PWA — ~90% логики (рендер, редактор, индекс, Space Lua) исполняется в браузере, сервер низведён до файлового хранилища. И это приватный PKM, а не издалка сайтов — публичной публикации из коробки нет. Значит: (а) рантайм переехал в клиент, а не на сервер; (б) как «издательский сосед» SilverBullet слабый — он записная книжка. Точку надо двигать и оговаривать.

5. Мелкие правки фактуры (не меняют аргумент, но нужны для честности)

  • Astro больше не чисто билд-тайм: с адаптером даёт SSR / on-demand / server islands — то есть живой сервер. Пул «SSG = нет живого сервера» не чист, Astro сидит на границе.
  • TinaCMS — не чисто git-коммиты: есть рантайм-слой данных (GraphQL над git+DB-индексом) и live-редактирование. Но публичный сайт всё равно отдаёт фреймворк, не Tina — так что «сами сайт не отдают» для семьи в целом остаётся верным.
  • Decap CMS практически заморожен после передачи от Netlify (2023); живой преемник — Sveltia (v1.0 целят на начало 2026). Стоит обновить, чтобы не выглядело, будто Decap — актуальный лидер.
  • Эгея в v1 описана верно (рантайм + база MySQL, свой редактор, зашитый дизайн) — правок не требует.
  • WordPress: «файлы — экспортный артефакт, а не источник» — подтверждено, честно (контент в MySQL, Gutenberg-блоки — HTML с метаданными в комментариях внутри post_content).

Разбор: где стоит trip2g

Что случилось с исходным тезисом

v1 держался на четырёх опорах: (1) trip2g стоит в пустой середине между SSG и DB-CMS; (2) поверхность редактирования — Obsidian-vault, а не админка; (3) гибрид «файлы снаружи, база внутри»; (4) сверху то, «чего нет у соседей»: MCP, платный доступ, федерация.

Сверка с июлём 2026 оставила стоять две опоры из четырёх.

  • (1) пустая середина — преувеличение. Grav 2.0, Statamic, SilverBullet уже там.
  • (4) MCP как отличие — умерло 22 июня 2026: у Grav 2.0 первоклассный MCP-сервер поверх ядрового REST API.
  • (2) Obsidian-vault как поверхностьвыжило целиком. Ни один сосед не даёт редактировать через твой существующий локальный Obsidian-vault с двусторонней синхронизацией. У Grav — админка/SFTP/git, у SilverBullet — свой браузерный редактор, у Obsidian Publish — да, твой vault, но проприетарный хостинг, только публикация, без сервера и API у тебя.
  • (3) гибрид файлы/база — выжило частично. Идея «жить между файлами и базой» уже есть у Statamic (файлы ИЛИ база по конфигу). Уникальна не идея, а форма: файловая поверхность как представление канонической SQLite с FTS, эмбеддингами, подписками. И у этой формы есть цена: на оси «настоящий flat-file» trip2g стоит дальше от файлов, чем Grav.

Отсюда разворот: отличия trip2g надо перенести с осей, где Grav 2.0 его теперь догнал (API, MCP, app-shell, платформенность), на оси, где он всё ещё один — поверхность авторинга (свой vault) и каналы доставки (веб + Telegram + агент + федерация).

Два полюса, тонкая — но не пустая — середина

Рынок по-прежнему расколот на два полюса.

Полюс статических генераторов — Hugo, Eleventy, Zola, Jekyll: тот же Markdown и шаблоны, но рендер на сборке, на выходе статика на CDN, живого сервера нет. Одна оговорка против v1: Astro уже не чисто билд-тайм — с адаптером у него SSR, on-demand-рендер и server islands, то есть настоящий рантайм. Граница полюса размылась именно здесь.

Полюс CMS с базой — WordPress и headless-платформы (Contentful, Strapi). Живой сервер есть, но контент в базе или в проприетарном облаке, редактор — веб-админка, файлы — экспортный артефакт. «Файлы — не источник» здесь точная характеристика: у WordPress пост — это строка в MySQL, у Gutenberg — HTML с блочными метаданными в комментариях внутри post_content. Это подтверждается, спора нет.

Середина — живой сервер, файлы на диске, маленькие шаблоны, правка на месте — по-прежнему тоньше полюсов. Но назвать её пустой уже нельзя. В ней:

  • Grav 2.0 (PHP, Markdown + Twig, флат-файл без базы) — и с 22.06.2026 это не «нишевый PHP-движок», а api-first CMS с REST API, MCP-сервером и SPA-админкой на SvelteKit. По AI-сюжету — прямой конкурент.
  • Statamic (Laravel, Antlers/Blade) — флат-файл по умолчанию, но с переключением на базу; Control Panel, REST/GraphQL, headless.
  • Kirby (PHP, txt-файлы, Panel) — платная, флат-файл, headless-режим.
  • SilverBullet — self-hosted, но v2 переехал в браузер и это записная книжка, а не издалка.

Даже в этой середине никто не сделал главного хода trip2g: поверхность редактирования — это не «файлы на сервере» и не собственная админка, а твой локальный Obsidian-vault, который синхронизируется в обе стороны.

Соседи по другим осям (уточнено против v1):

Git-based / headless file-CMS — Decap, TinaCMS, Keystatic, Sveltia, PagesCMS. Правки: Decap фактически заморожен после передачи от Netlify, живой преемник — Sveltia (v1.0 к началу 2026). TinaCMS — не просто git-коммиты: есть рантайм-слой (GraphQL над git+DB-индексом) и live-редактирование. Но для всей семьи главное остаётся верным: сайт они не отдают — это прослойка-редактор поверх отдельного SSG/фреймворка.

Markdown-рантаймы и вики — SilverBullet (см. выше: v2 браузерный, PKM, не издалка), TiddlyWiki и DokuWiki (файлы + рантайм, но это вики), Obsidian Publish (твой vault, но проприетарный хостинг, только публикация) и Quartz (обычный SSG для vault'а, v4 на TS).

Контрасты по источнику контента — Notion→сайт (Super.so, Potion, Simple.ink): «хранилище становится сайтом», но источник проприетарный, контент заперт в Notion. Эгея (Илья Бирман): рантайм с MySQL, свой редактор, зашитый дизайн — однозадачный антипод.

Карта A: render-time vs storage (исправленная)

Правки против v1: trip2g поднят по оси «база» (у него канонична SQLite — честнее ставить выше 0.55); Grav вынесен отдельной точкой, потому что после 2.0 он значим сам по себе; SilverBullet подписан как клиентский рантайм.

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 Zola: [0.1, 0.1]
    Astro SSR: [0.35, 0.12]
    Quartz: [0.14, 0.14]
    Decap Sveltia: [0.25, 0.12]
    Tina: [0.3, 0.28]
    Obsidian Publish: [0.6, 0.4]
    Grav 2: [0.75, 0.12]
    Kirby Statamic: [0.72, 0.22]
    SilverBullet v2: [0.78, 0.15]
    trip2g: [0.85, 0.62]
    WordPress: [0.88, 0.9]

Диаграмма A: когда рендерится страница и где живёт контент. trip2g — выше по оси «база», потому что у него канонична SQLite; Grav 2.0 — честнее-плоский сосед в правом-нижнем углу.

Карта B: где trip2g всё ещё один — поверхность авторинга

Именно тут отличие живёт после Grav 2.0. По оси «насколько инструмент — платформа» Grav 2.0 подскочил вверх (API + MCP + SPA-админка) и стоит теперь рядом с trip2g по высоте. Разводит их горизонтальная ось — поверхность редактирования: у Grav это админка/git, у trip2g — твой Obsidian-vault. Отличие переехало с оси «платформенность» на ось «где ты пишешь».

quadrantChart
    title Editing surface vs platform depth
    x-axis Admin/repo surface --> Your own vault
    y-axis Publishing only --> App platform
    quadrant-1 vault + apps
    quadrant-2 admin + apps
    quadrant-3 admin, publish
    quadrant-4 vault, publish
    Hugo Eleventy: [0.15, 0.1]
    Kirby: [0.2, 0.35]
    Grav 2: [0.25, 0.78]
    Tina Keystatic: [0.32, 0.4]
    SilverBullet v2: [0.7, 0.5]
    Notion: [0.65, 0.72]
    Obsidian Publish: [0.82, 0.2]
    trip2g: [0.88, 0.85]

Диаграмма B: где ты пишешь (чужая админка/репозиторий ↔ твой личный vault) и как далеко инструмент за публикацией. Grav 2.0 догнал trip2g по высоте (платформенность), но остался слева — пишешь всё равно у него. trip2g и Obsidian Publish — единственные справа; но Publish только публикует, а trip2g — платформа.

Карта C: ops vs liveness (клетка больше не пустая)

Клетка «один процесс И живой сервер» — не пустая. В ней Grav (PHP, без базы) и trip2g (один Go-бинарник). 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 sparse, not empty
    quadrant-3 one binary, static
    quadrant-4 assembled, static
    Hugo Eleventy: [0.15, 0.1]
    SilverBullet v2: [0.25, 0.6]
    Grav 2: [0.28, 0.8]
    trip2g: [0.18, 0.82]
    Strapi: [0.75, 0.75]
    Decap Sveltia: [0.7, 0.2]
    WordPress: [0.8, 0.85]

Диаграмма C: сколько частей собирать и живой ли рантайм. Квадрант переименован из «empty cell» в «sparse, not empty»: рядом с trip2g теперь Grav 2.0. Отличие по операционной простоте сохранилось, но оно уже не «клетка пустая».

Карта D: content model vs delivery (MCP больше не только у trip2g)

Главная правка. v1 ставил trip2g в одиночестве у верхнего края «API/агент». С 22.06.2026 Grav 2.0 тоже там — у него REST API и 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.12]
    Obsidian Publish: [0.1, 0.2]
    WordPress: [0.6, 0.35]
    Contentful Strapi: [0.75, 0.85]
    Tina: [0.35, 0.55]
    Grav 2: [0.2, 0.8]
    trip2g: [0.32, 0.85]

Диаграмма D: документы ↔ записи базы и страница ↔ API/агент. Grav 2.0 поднят к верхнему краю рядом с trip2g: у него теперь тоже MCP+REST над документной моделью. «trip2g уникален тем, что отдаёт документ и агенту» больше не читается — это делает и Grav.

Карта E: lock-in vs capability (открытость+платформа — уже не только у trip2g)

Ещё одна правка. v1 держал верхний-левый угол (открытые файлы + платформа) за trip2g. Grav 2.0 туда же: открытые файлы, никакой базы, плюс API/MCP/SPA. Отличие сжалось.

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.15]
    SilverBullet v2: [0.2, 0.45]
    Grav 2: [0.18, 0.78]
    Obsidian Publish: [0.5, 0.2]
    WordPress: [0.7, 0.55]
    Notion Contentful: [0.85, 0.75]
    trip2g: [0.25, 0.85]

Диаграмма E: заперт ли контент и насколько инструмент — платформа. Grav 2.0 стоит прямо под trip2g в квадранте «open, platform». Открытость + платформенность больше не покупается только у trip2g.

Карта F (новая): чем trip2g действительно один

Пять карт v1 меряли то, где Grav 2.0 теперь догнал. Настоящее отличие — на осях, которых в v1 не было: поверхность авторинга (чужая админка ↔ твой Obsidian-vault) против каналов доставки (только веб ↔ веб + Telegram + агент + федерация). Здесь trip2g стоит один в верхнем-правом углу.

quadrantChart
    title Authoring surface vs delivery channels
    x-axis Their admin --> Your Obsidian vault
    y-axis Web page only --> Web + Telegram + agent + federation
    quadrant-1 vault, multi-channel
    quadrant-2 admin, multi-channel
    quadrant-3 admin, web only
    quadrant-4 vault, web only
    Grav 2: [0.2, 0.35]
    WordPress: [0.55, 0.3]
    Statamic: [0.25, 0.3]
    Obsidian Publish: [0.85, 0.1]
    Quartz: [0.8, 0.08]
    SilverBullet v2: [0.6, 0.15]
    trip2g: [0.9, 0.9]

Диаграмма F: где пишешь и куда доставляешь. Это единственная карта, где trip2g стоит в углу один. Obsidian Publish и Quartz — тоже «твой vault», но доставляют только веб. Grav/Statamic — многоканальнее по API, но пишешь в их админке. Пересечение {свой vault} × {веб+Telegram+агент+федерация} — пустое, и его занимает trip2g.

Проверенная сравнительная таблица

Оси: Рендер (build ↔ runtime); Хранилище (файлы / база / проприетарное облако); Поверхность правки; Механизм записи; За публикацию (API/MCP/app); Хостинг.

Инструмент Рендер Хранилище Поверхность правки За публикацию Хостинг
trip2g runtime SQLite канон + файлы-представление локальный Obsidian-vault (2-way sync) write-API, MCP, app-shell, Telegram, федерация self-host, 1 Go-бинарник
Grav 2.0 runtime флат-файл, без базы админка/SFTP/git REST API + MCP + SPA-админка (с 06.2026) self-host, PHP
Statamic 5 runtime флат-файл ИЛИ база (по конфигу) Control Panel REST/GraphQL, headless self-host, Laravel
Kirby runtime флат-файл (txt) Panel headless-режим self-host, PHP (платный)
SilverBullet v2 браузер (local-first) .md на сервере + IndexedDB свой браузерный редактор Space Lua, но это PKM self-host
WordPress runtime база (MySQL) wp-admin REST API, headless self-host/SaaS, PHP+DB
Эгея runtime база (MySQL) свой редактор нет (однозадачный) self-host, PHP+DB
Strapi — (headless) база (PG/MySQL/SQLite) админка REST+GraphQL self-host/SaaS, Node
Contentful — (headless) проприетарное облако веб-админка API-first SaaS only
Hugo/Zola/Jekyll build-time файлы свой редактор файлов нет (статика) любой CDN
Astro build или SSR файлы свой редактор файлов SSR/endpoints CDN или сервер
Decap (заморожен)/Sveltia нет (редактор) файлы в git панель→git-коммит не отдаёт сайт self-host
TinaCMS нет (+рантайм-слой данных) git + DB-индекс live-редактор→git GraphQL-слой, но сайт отдаёт фреймворк SaaS/self-host
Keystatic/PagesCMS нет (редактор) файлы в git панель→git-коммит не отдаёт сайт self-host
Obsidian Publish облако Obsidian локальный MD → их облако твой vault только публикация проприетарный SaaS
Quartz v4 build-time MD → статика твой vault нет (статика) self-host/CDN
Notion→сайт (Super/Potion) статика/облако Notion (проприетарное) Notion только публикация SaaS only

Самая узкая честная формула ниши

v1: «flat-file CMS в пустой середине, с MCP/write-API/app-shell, которых нет у соседей». Это больше не проходит проверку.

v2, узко и защитимо: trip2g — это когда твой существующий локальный Obsidian-vault становится живым сервером, который публикует в несколько каналов (веб + Telegram), отдаёт write-API и MCP-инструменты агенту, хостит маленькие приложения и федерируется с другими хабами — поверх канонической SQLite, дающей поиск, версии и подписки.

Что тут выдерживает адверсариальную проверку, а что — риторика:

  • Держит: поверхность авторинга = твой Obsidian-vault с двусторонней синхронизацией (ни у кого больше); мультиканальность (Telegram-публикация + веб из одного источника); федерация между хабами; Obsidian-нативная семантика (wikilinks, embeds). Это и есть моат: скопировать его нельзя, не став Obsidian — контент живёт в твоём уже-установленном редакторе, а не в админке движка. И это НЕ «flat-file CMS»-фичи.
  • Больше не держит как отличие: MCP-эндпоинт (у Grav 2.0 есть), точечный write-API (у Grav REST+ETag), app-shell/платформенность (Grav api-first), «гибрид файлы/база» как идея (Statamic — файлы-или-база).
  • Держит с оговоркой: «один бинарник + живой сервер» — да, но рядом стоит Grav (PHP без базы), клетка не пустая. И «flat-file CMS» как самоназвание — слабое: канонично у trip2g база, он честнее описывается как DB-CMS с файловой поверхностью авторинга, а не как flat-file CMS.

Иначе: перестать продавать «пустую середину» и «уникальный MCP». Продавать пересечение, которого правда нет ни у кого — пиши в своём Obsidian, отдавай в веб, в Telegram, агенту и в федерацию из одного живого сервера.


Источники

Grav 2.0:

Kirby / Statamic:

SilverBullet v2 / вики / Obsidian:

Git-CMS / SSG:

WordPress / Notion / Эгея / headless: