Runit
August 21, 2026 · View on GitHub
Описание
Runit — это среда для написания и выполнения кода, которая активно используется на платформах © ООО «Хекслет Рус». Ближайший аналог — сервис repl.it.
Возможности (текущие и будущие):
- Редактирование кода онлайн
- Шаринг кода по ссылке
- Встраивание сниппетов на страницы
- Совместное редактирование
Документация
Здесь — что это за проект и как его запустить. Всё остальное вынесено рядом, чтобы нужное не приходилось искать в длинном файле.
| Документ | О чём |
|---|---|
| docs/auth.md | Как устроен вход: cookie, JWT, CSRF, политика паролей |
| docs/runner.md | Серверное исполнение кода: изоляция песочницы, настройки, замечания для деплоя |
| docs/deployment.md | Развёртывание (контейнеры, свой стенд, PaaS), переменные окружения, выпуск версии |
| docs/legal.md | 152-ФЗ: документы, согласие, что обязательно сделать до запуска |
Технологии
- Язык: TypeScript
- Фронтенд: React, Mantine, TanStack Query, Vite
- Бэкенд: Fastify, tRPC, Drizzle ORM, Node.js
Системные требования
- node >= 24
- npm >= 9
- PostgreSQL >= 13 — и локально, и в проде
Одна и та же СУБД везде намеренно: держать в Drizzle два диалекта можно только двумя копиями схемы, а они неизбежно разойдутся. Расхождение диалектов — источник ошибок, которые видны только в проде: при переезде со SQLite молча перестало работать распознавание конфликта уникальности, потому что опиралось на текст ошибки SQLite.
Версия 13 и выше нужна тестам: они создают и удаляют свою базу через
drop database … with (force).
Установка зависимостей для бэкенда и его запуск
Нужна запущенная PostgreSQL. Проще всего поднять её из compose:
docker compose up -d db
Или указать свою в DATABASE_URL.
npm install
cp .env.example .env
npm run dev
Установка зависимостей для фронтенда и его запуск
cd frontend
npm install
npm run start
Миграции базы данных
Миграции лежат в drizzle/ и версионируются вместе с кодом. Приложение применяет их само при старте, отдельного шага в деплое не нужно.
После правки схемы в src/db/schema/schema.ts:
npm run db:generate # создаст файл миграции в drizzle/
Полученный файл нужно закоммитить. Генерировать миграции в сборке или в CI нельзя: тогда в образ попадает свежая «нулевая» миграция, журнал в боевой базе считает её уже применённой, и изменения схемы молча не доезжают — на первом деплое всё работает, а на втором данные расходятся со схемой.
Применить миграции к своей базе вручную:
npm run db:migrate
Типы для фронтенда
Бэкенд генерирует TypeScript-типы для фронтенда через tRPC. При изменении схем или роутеров на бэкенде нужно перегенерировать типы:
npm run generate:types
Типы сохраняются в папку types/ и используются фронтендом для автодополнения и проверки типов.
Линтер (Biome)
На бэкенде используется Biome — линтер и форматтер в одном инструменте. Конфиг находится в biome.json, покрывает папку src/.
Запуск линтера:
# Проверка только бэкенда
npm run lint
# Автоисправление только бэкенда
npm run lint:fix
Или через Makefile:
make lint-backend # проверка
make lint-fix-backend # автоисправление
В VSCode Biome работает автоматически при сохранении файла — нужно установить расширение Biome.
Старая API документация
Структура API старого проекта находится здесь.
Полезные ссылки
Этот репозиторий создаётся и поддерживается командой и сообществом © ООО «Хекслет Рус», образовательный проект. Подробнее о Хекслете.
