Go-сервис для разработчиков игр, который принимает protobuf-команды, последовательно применяет их в комнате и раздаёт всем клиентам одну согласованную ленту ревизий.
Сайт проекта · Документация на русском · English documentation
В многопользовательской игре клиент не должен быть источником истины. Ruleshift выносит авторитетное состояние на сервер: клиенты отправляют намерения, сервер упорядочивает команды, вызывает stateless-модуль игры, сохраняет результат и транслирует его всем участникам комнаты.
Игра подключается как внешнее gRPC/protobuf OCI-изображение. Поэтому игровой модуль можно разрабатывать и выпускать отдельно — ядро Ruleshift пересобирать не требуется.
flowchart LR
C["Unity / player client"] -->|"protobuf v2"| G[Gateway]
G --> R["bounded sequential room"]
R -->|"gRPC ABI + current state"| M["developer OCI module"]
M -->|"next state + projections"| R
R --> S["events + snapshots"]
D["trusted backend / SDK"] --> A["Developer API v2"]
A --> K["validation + Kubernetes scheduler"]
| Если вы хотите… | Начните здесь |
|---|---|
| Понять устройство системы | Архитектура · русская версия |
| Подключить player client | Unity client · клиент Unity на русском |
| Создать и опубликовать игровой модуль | Module development · русская версия |
| Разобраться с wire protocol | Protocol v2 · русская версия |
| Управлять модулями и комнатами | Developer API v2 · русская версия |
| Подключить Steam-аутентификацию | Steam integration · русская версия |
| Настроить production-наблюдаемость | Observability · k3s deployment |
| Настроить промокоды для game jam | Game jam promotions · OpenAPI |
| Посмотреть модель хранения | Database · русская версия |
| Изучить benchmark scope | Performance report · русская версия |
- бинарный WebSocket-протокол на protobuf v2;
- последовательную обработку команд в комнате с bounded queues;
- непрозрачное состояние модуля и recipient-specific public/private/full projections;
- immutable pinning комнаты на developer, module, version и image digest;
- snapshots и generic event replay через точно зафиксированную версию модуля;
- Developer API v2 для публикации OCI-модулей, валидации, активации и создания комнат;
- PostgreSQL control DB и изолированные module databases;
- tenant isolation и безопасное планирование модулей в Kubernetes.
Требования: Go 1.26, Docker и PostgreSQL для локального запуска gateway.
# Запустить локальный PostgreSQL
docker compose up -d postgres
# Проверить проект
go test ./...
go vet ./...
# Запустить gateway
go run ./cmd/gatewayДля production gateway нужны PostgreSQL и Kubernetes. Основные переменные окружения:
RULESHIFT_DATABASE_URL
RULESHIFT_DATABASE_ADMIN_URL
RULESHIFT_DEVELOPER_API_KEY
RULESHIFT_KUBECONFIG # опционально при запуске внутри кластера
Полный список endpoint'ов и конфигурации находится в Developer API и документации по observability.
- Player protocol schema
- Module Runtime ABI
- OpenAPI: Developer API
- OpenAPI: Observability API
- OpenAPI: Game Jam Promotions API
- External modules
- Hidden Number example
- Xiangqi example
- Card Game v2 example
- Unity Developer SDK
- .NET Developer SDK
Production WebSocket endpoint: /v2/ws. Протокол v1 намеренно несовместим и
отклоняется сервером.
Горячий путь построен вокруг небольшого количества предсказуемых компонентов:
bounded queues, один последовательный room runtime, бинарная сериализация
protobuf и отсутствие сетевых записей внутри room loop. Долгие операции используют
context.Context, а ошибки игрового модуля не меняют состояние и revision.
Измерения и команды для воспроизведения находятся в Performance report.
Каждый tenant получает отдельный namespace, pull Secret, ResourceQuota, LimitRange и default-deny network policy. Module pods запускаются без root, с read-only filesystem, RuntimeDefault seccomp, без capabilities, service-account token и внешнего egress.
Некорректный, слишком большой или несоответствующий типу ответ модуля считается нарушением протокола. После трёх таких нарушений за 60 секунд версия деградирует, и новые комнаты не смогут её использовать.
Уже реализовано: authoritative room runtime, protobuf v2 gateway, persistence, 24-часовые коды приглашения комнат, module ABI, Developer API v2, OCI module lifecycle, Kubernetes scheduling, observability, Unity/.NET SDK и conformance examples.
В дальнейших итерациях: расширение SDK для player-клиентов, полноценный Steam-поток авторизации, более глубокие load tests и расширение card-game state.
Проект находится в активной разработке. Перед изменением архитектуры сверяйтесь с AGENTS.md и соответствующим разделом документации.