Preview — v0.1

§ 01  Open-source game backend on the BEAM

Your game
never goes down.

A multiplayer game backend built on Erlang/OTP. Fault-tolerant by design. Zero-downtime deploys. 100K+ concurrent connections per node.

Asobi is early but fully open-source and ready to play with. Spin it up, prototype your next game, and help shape the future of game backends on the BEAM.

02 / Runtime

Built on the BEAM

The same virtual machine that powers WhatsApp, Discord, and RabbitMQ. Designed for millions of concurrent connections with predictable latency.

■ 58 processes up · ■ 2 supervised restart · zero impact to neighbours

Per-Process GC

Each match runs in its own process with isolated garbage collection. No stop-the-world pauses affecting other players.

Preemptive Scheduling

The BEAM scheduler ensures fair CPU time for every match. One expensive operation cannot starve others.

🛡

OTP Supervision

If a match process crashes, it restarts automatically. Players reconnect to a fresh state. The server is unaffected.

Cloud Native

Graceful shutdown, health endpoints, and rolling deploys out of the box. Built for Kubernetes, Fly.io, and any container orchestrator.

📈

100K+ Connections

Lightweight processes and efficient I/O multiplexing. Handle half a million concurrent WebSocket connections per node.

📊

Built-in Observability

OpenTelemetry integration, structured logging, and Telemetry events. Monitor every match, queue, and connection.

03 / Kit

Everything you need

A complete backend for multiplayer games. One release, no external dependencies.

Authentication

Player registration, login, sessions, and OAuth. Built on nova_auth.

Matchmaking

Automatic player pairing with configurable rules. Lobby and queue support.

Real-Time Sync

WebSocket-based state synchronization at configurable tick rates.

Leaderboards

Ranked scoring with ETS-backed storage. Per-game, per-season, global.

Virtual Economy

Wallets, transactions, inventory, and in-game store.

Social

Friends, groups, chat, and notifications.

Cloud Saves

Persistent player data storage with versioning.

Admin Dashboard

Web-based management UI for players, matches, and economy.

04 / Clients

SDKs for every engine

Official client libraries with full API coverage. Pick your engine and start building.

All SDKs cover auth, matchmaking, real-time, leaderboards, economy, social, storage, and more.

05 / Contract

Define your game logic

Implement the asobi_match behaviour. Asobi handles the rest.

-module(arena_match).
-behaviour(asobi_match).

-export([init/1, handle_join/3, handle_input/3,
         handle_tick/2, handle_leave/3]).

init(Opts) ->
    #{max_players => maps:get(max_players, Opts, 8),
      tick_rate   => 10,
      players     => #{},
      projectiles => []}.

handle_join(PlayerId, _Metadata, State) ->
    Spawn = random_spawn_point(),
    Player = #{pos => Spawn, hp => 100, score => 0},
    {ok, State#{players := maps:put(PlayerId, Player,
                           maps:get(players, State))}}.

handle_input(PlayerId, #{<<"action">> := <<"fire">>} = Input, State) ->
    Projectile = spawn_projectile(PlayerId, Input),
    {ok, State#{projectiles := [Projectile |
                    maps:get(projectiles, State)]}}.

handle_tick(_DeltaMs, State) ->
    S1 = move_projectiles(State),
    S2 = detect_collisions(S1),
    {broadcast, S2}.

06 / Position

How Asobi compares

Honest accounting against the engines you’d otherwise pick.

AsobiNakamaColyseus
RuntimeBEAM (Erlang/OTP)GoNode.js
Garbage CollectionPer-process, isolatedStop-the-worldStop-the-world
Fault ToleranceOTP supervision treesManual recoveryManual recovery
Cloud/K8sGraceful shutdown, health checksBasic supportManual setup
Pub/SubBuilt-in (pg module)Requires RedisBuilt-in
Connections/Node100K+~50K~10K
ObservabilityOpenTelemetry + TelemetryPrometheusCustom metrics
LicenseApache 2.0Apache 2.0MIT

07 / Start

Get started in minutes

Four commands between you and a running multiplayer game.

1

Create a new project

rebar3 nova new my_game fullstack

2

Add asobi as a dependency

{asobi, "~> 0.1"}

3

Implement your match logic

Define a module with the asobi_match behaviour

4

Run it

rebar3 nova serve

08 / People

Join the community

Ask questions, share what you're building, and help shape Asobi.

Join us on Discord