Runit — это среда для написания и выполнения кода, которая активно используется на платформах © ООО «Хекслет Рус». Ближайший аналог — сервис repl.it.
Возможности (текущие и будущие):
- Редактирование кода онлайн
- Шаринг кода по ссылке
- Встраивание сниппетов на страницы
- Совместное редактирование
Здесь — что это за проект и как его запустить. Всё остальное вынесено рядом, чтобы нужное не приходилось искать в длинном файле.
| Документ | О чём |
|---|---|
| docs/auth.md | Как устроен вход: cookie, JWT, CSRF, политика паролей |
| docs/runner.md | Серверное исполнение кода: изоляция песочницы, настройки, замечания для деплоя |
| docs/deployment.md | Развёртывание (контейнеры, свой стенд, PaaS), переменные окружения, выпуск версии |
| docs/legal.md | 152-ФЗ: документы, согласие, что обязательно сделать до запуска |
| CONTRIBUTING.md | Порядок работы: ветки, мерж, ограничения main |
- Язык: 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 devcd 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.json, покрывает папку src/.
Запуск линтера:
# Проверка только бэкенда
npm run lint
# Автоисправление только бэкенда
npm run lint:fixИли через Makefile:
make lint-backend # проверка
make lint-fix-backend # автоисправлениеВ VSCode Biome работает автоматически при сохранении файла — нужно установить расширение Biome.
Структура API старого проекта находится здесь.
Этот репозиторий создаётся и поддерживается командой и сообществом © ООО «Хекслет Рус», образовательный проект. Подробнее о Хекслете.
