About this project
Gamend is an open-source backend for multiplayer games, written in Elixir. It is intended to be self-hosted: there is no hosted service to buy, and the project positions itself as the server-side layer around a game rather than the game itself. The game still renders and simulates locally, while server-side scripting lets real logic run on the server, so scoring, rewards, matchmaking rules and validation are decided where players cannot edit them. Background and scheduled jobs also run there.
Feature set described in the README:
- Auth: email/password, magic link, OAuth (Discord, Google, Apple, Facebook, GitHub, Steam) and JWT API tokens.
- Users: profiles, metadata, device tokens and account lifecycle.
- Lobbies: host-managed, maximum users, hidden/locked states, passwords and real-time updates.
- Groups: public, private or hidden communities with roles, join requests and invites.
- Parties: ephemeral invite-based groups, 2–32 players by default, integrated with lobbies.
- Friends: requests, accept/reject and blocking.
- Chat: lobby, group, party and friend direct messages with read cursors and unread counts.
- Notifications: typed notifications for social events, read/unread state and real-time delivery, plus FCM and APNs-direct mobile push routed per device token.
- Quests and progression: an event-driven engine covering achievements, daily/weekly quests, event windows and chains, with exactly-once rewards into the economy.
- Leaderboards: global and per-user rankings.
- Payments: Stripe Checkout, Google Play, App Store and Steam provider flows with receipt validation, webhooks, entitlements, refunds and admin tools.
- Key-value store: server-side storage with access control hooks.
- Server scripting: hooks on server events such as login, lobby created or quest completed, written in Elixir, GDScript (compiled rather than interpreted) or any BEAM language.
- Background jobs: durable, retryable background and cron jobs from server hooks, on Postgres or SQLite.
- Economy and inventory: virtual-currency wallets with an atomic, auditable ledger, plus item stacks; server-authoritative grant/spend/consume with live balance updates.
- Object storage: avatar and UGC uploads with a pluggable backend, either local disk or any S3-compatible service such as AWS S3, Cloudflare R2 or MinIO.
- Admin portal: a built-in web dashboard for managing resources.
Client SDKs are provided for Godot (also listed on the Godot Asset Library), Rune via Balaur addons, C++17 with pluggable transports, JavaScript on npm, and an Elixir SDK of stub modules for IDE autocomplete in custom hooks. The Godot, Balaur and C++ SDKs are rebuilt on every change to main and attached to the latest release.
Running locally requires Elixir 1.20 and Erlang/OTP 29, Rust for the WebRTC native dependency (ex_sctp), and optionally PostgreSQL — development uses SQLite by default, with the database adapter chosen at compile time. First run is `cp .env.example .env`, `mix setup`, `mix dev.start`, then visiting localhost:4000. Docker Compose files cover a single instance and a multi-instance setup with nginx, PostgreSQL and Redis. Deployment guidance and a starter template target production deployment on fly.io.
The README also includes a performance chart comparing concurrent idle players by machine size, memory and monthly price, citing a measured figure of 37,854 concurrent idle players on one core with 3 GB against a published comparison figure, with links to performance and load-testing documentation for reproduction details. An AGENTS.md file is provided for AI tooling.
Comments
0 people shared their preference · Deer Point appears after 10 participants
Sign in to join the discussion.