Released June 2026. Still in active development.
A standalone Riichi Mahjong game built from the ground up in Rust with the Bevy game engine, and shipped on Steam for Windows, macOS, and Linux (Steam Deck included). Buy it once, own it, play it offline. No gacha, no battle passes, no premium currency, no account required.
Why Build It
My wife grew up playing riichi in Japan, and once she taught me we started playing with real tiles whenever we could get four people to a table. Online was the fallback for the rest of the time, and the existing platforms never quite worked for us, between weak AI with no control over play style, anime-styled presentation that was a real barrier to inviting friends, and a hard requirement on an account and a live internet connection. I wanted a clean table, configurable opponents, private rooms, and a game that works on an airplane.
Three Ways to Play
Singleplayer. Fully offline against three AI opponents, East-only (tonpuusen) or full hanchan. No account, no connection.
Private online multiplayer. Two to four players with AI filling any open seats. Share a room code and sit down. No matchmaking, no accounts. Drops are survivable. A disconnected seat converts to AI mid-round so the table keeps moving, and the player gets their seat back at the next round boundary when they reconnect.
Daily Wall. One round a day, the same wall dealt to every player worldwide, derived deterministically from the date. Resets at UTC midnight. Wordle, for mahjong.
Vertical Integration
The game runs on agari, the open-source Riichi scoring library I wrote first and released as a Rust crate. It handles the entire rule engine, from hand decomposition and yaku detection through fu calculation, shanten and ukeire analysis, and wait recognition, cross-validated against established scoring engines across millions of simulated hands. The game client consumes it directly. There is no third-party game logic anywhere in the stack, so bugs get fixed at the source and anyone can check the math.
The full ruleset ships, including all 41 yaku, every yakuman, han and fu scoring, pao, furiten, ippatsu, rinshan kaihou, haitei, chankan, nagashi mangan, abortive draws, and double and triple ron.
The Table
The centerpiece is a 3D table shot with a telephoto-style camera, a narrow 38° vertical field of view that compresses depth the way a long lens does, so the far player's tiles read at nearly the same size as your own. Hand tiles render as a 2D UI layer to stay crisp at any window size, while discard ponds and called melds stay 3D so they read as physical objects. The central compass keeps scores, round, seat winds, riichi sticks, and remaining tile count in one glanceable place.
Decor is configurable, with multiple table surfaces (felt, fabric, leather), several tile face designs, and color swatches down to black tiles.
AI Opponents
Agari's AI system combines statistical models with hand-crafted heuristics, drawing on published mahjong research and refined through self-play.
At the table that means opponents who weigh tile acceptance, shanten distance, five-block theory, and call and discard decisions, all accounting for visible information across ponds, melds, and dora indicators. Tuned parameters drive four play styles (Offensive, Balanced, Defensive, and Menzen), settable per seat, all at once, or randomized across the table, with an overall difficulty setting on top.
Everything Else In the Box
- Match history and replay. Every match recorded locally, with a per-round score ledger down to yaku, han, fu, and dora, and full replay on the 3D table with all four hands face up
- Tenpai helper with live waits and per-tile ukeire counts, on when you want it
- Statistics. First-place rate, deal-in rate, yaku frequency, han distribution
- Voice acting. Real human performances in Japanese for every call, with distinct voice characters you assign to yourself and the AI seats
- Riichi music that kicks in on declaration, plus per-channel volume for menu music, voice, and effects
- Full English and Japanese localization
- Seeded singleplayer matches. Replay the exact same wall and AI decisions from a seed
- Player reactions in multiplayer, emoji and voice clips landing on the opposing player's avatar
Design Philosophy
- Gameplay first. No gacha, no loot boxes, no premium currency. Every feature ships included.
- Bound to roots. Standard Japanese Riichi rules, no novelty modes diluting the core game.
- Offline by default. The internet is optional, and so is an account.
- Performant. Rust and Bevy, with rendering tuned to sip power for quieter machines and longer battery life on laptops and the Steam Deck.
- Simple. A clean interface that stays out of the way. The table, the tiles, and your decisions.
Tech
- Language: Rust (Edition 2024)
- Engine: Bevy 0.18
- Scoring: agari v0.24 (custom open-source library)
- Architecture: Entity Component System (ECS), multi-crate workspace
- Multiplayer: host-authoritative lockstep over a self-hosted relay, with rejoin support
- Platforms: Windows, macOS, Linux (Steam Deck native), with iOS and Android planned
- Build: Cargo, with Xcode for the iOS target
More
- Agari on Steam
- agari.app, the game site, with ruleset reference and roadmap
- Building Agari, a devlog on the engine choice, the telephoto table, multiplayer rejoin, and the shanten bug that only showed up once the game existed
- github.com/agari-industries/agari, the open-source scoring library