Перейти к основному содержимому

Технологический стек

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-плагины вместо этого выполняются в отдельном ограниченном процессе.

О том, как части сочетаются друг с другом, см. Обзор монорепозитория, а о том, кто за что отвечает, — Пакеты.