Технологический стек
NeoTavern работает на намеренно скучном стеке: Node.js 24 LTS, Fastify 5, React 19, Vite 8, строгий TypeScript, SQLite с Drizzle ORM и десктопная оболочка Tauri 2.
Рантайм и язык
- Node.js 24 LTS — рантайм для backend и встроенного десктопного sidecar. Код остаётся совместимым с Node.js 22 там, где это практично.
- Строгий TypeScript — включён везде. Необоснованные
any,as unknown as,@ts-ignoreи non-null-утверждения запрещены. Границы систем используютunknownи явную проверку. - Только ESM — все приложения и пакеты используют ES-модули.
Backend
- Fastify 5 — фреймворк API. Каждый backend-модуль — изолированный плагин Fastify.
- TypeBox + Fastify Type Provider — каждый вход и выход API имеет JSON
Schema, генерируемую из
@neotavern/contracts. - SSE — стриминговая генерация работает поверх Server-Sent Events. WebSocket зарезервирован для настоящих двунаправленных каналов.
- AbortSignal — каждая длительная операция принимает
AbortSignalи корректно завершается по таймауту при отключении клиента.
Фронтенд
- React 19 — одностраничное приложение без серверного рендеринга.
- Vite 8 — бандлер и сервер разработки. Vite — только инструмент сборки, а не API плагинов приложения.
- React Router — маршрутизация с единым рабочим пространством чата и системными поверхностями поверх него.
- TanStack Query — единственное хранилище серверного состояния.
- Zustand — только кратковременное состояние UI: активная панель, предпочтения темы и языка, закреплённый персонаж и ограниченные черновики в рамках сессии.
- Radix Primitives — доступные бесголовые компоненты, обёрнутые в
@neotavern/ui.
Данные
- SQLite через better-sqlite3 — единый файл базы данных, открываемый с
WAL,
foreign_keys = ON,busy_timeoutи подготовленными выражениями. - Drizzle ORM — типизированная схема, репозитории и миграции.
- FTS5 — полнотекстовый поиск по персонажам, чатам и сообщениям.
Стилизация
- CSS Modules + кастомные свойства + каскадные слои + container queries — набор инструментов стилизации. Темы переопределяют дизайн-токены и правила слоёв, не борясь со специфичностью.
Шаблонизация и локализация
- Handlebars — шаблоны instruct-форматов, рендерящиеся в песочном окружении без доступа к файловой системе и выполнению кода.
- i18next — все пользовательские строки с пространствами имён и ресурсами по локалям.
Десктоп
- Tauri 2 — десктопная оболочка, где сервер Node.js поставляется как самодостаточный бинарник sidecar.
- tauri-plugin-shell и tauri-plugin-updater — управление процессами и подписанные обновления.
Инструменты
- pnpm workspaces — менеджер пакетов монорепозитория.
- Vitest — модульные и интеграционные тесты.
- Playwright — сквозные тесты, включая смоук-тесты десктопной оболочки.
Что сознательно отсутствует
- Никаких PostgreSQL, Redis, Docker или других сервисов, которые нужно устанавливать или запускать.
- Никакого SSR или Node-сервера для фронтенда, кроме процесса API.
- Никакого
node:vmкак песочницы безопасности для плагинов — недоверенные backend-плагины вместо этого выполняются в отдельном ограниченном процессе.
О том, как части сочетаются друг с другом, см. Обзор монорепозитория, а о том, кто за что отвечает, — Пакеты.