Tanked was inspired by the classic artillery games of the early PC era. Simple rules, deep strategy, and unforgettable tension built from angle, power, wind, and destructible terrain. I wanted to bring that feeling back, but in a way that fit how people actually interact online today. Reddit isn't a lobby-based platform. It's asynchronous, social, and post-centric. Instead of fighting that, I leaned into it: what if a Reddit post itself was the game? That question became the core of Tanked.
Tanked is a two-player, turn-based ASCII artillery game built natively for Reddit. Every post is a game lobby. The first user to open the post becomes Player 1. The second user becomes Player 2. Everyone else becomes a spectator. Gameplay is fully server-authoritative. Players adjust angle and power. Wind and terrain affect every shot. Explosions permanently deform the battlefield. Turns are enforced by the server, not the client. No matchmaking, no invites, no accounts, just open the post and play.
Tanked was built using Devvit Web, with a clean separation between server and client responsibilities. The server owns all game state including terrain, tanks, wind, and turns. It runs deterministic shot simulation and collision logic. It persists per-post state in Redis using the post ID as the game key. It assigns player roles based on first and second viewer. It exposes a minimal API at /api/tanked/init and /api/tanked/fire. The client renders the game as ASCII in a pre element. It sends only player intent like angle, power, and fire. It polls for state updates to stay in sync. It uses Reddit identity directly with no separate auth layer. The entire system is scoped to Reddit posts, which makes the experience uniquely Reddit-native and frictionless.
I ran into several challenges. Understanding Devvit's execution model was the first. Unlike traditional web apps, Devvit runs in a sandboxed environment without access to local node modules. This required careful bundling and server architecture decisions. Server-side rendering versus client expectations was another challenge. Ensuring the server returned valid JSON responses consistently was critical to avoiding silent failures. Async multiplayer without sockets required me to design Tanked to work perfectly with polling and turn-based play, which fits Reddit's async culture better than real-time networking. Build pipeline complexity meant coordinating Vite builds, Devvit playtest updates, and post-scoped state took iteration to get right. Each challenge forced me to better understand and ultimately embrace how Devvit is meant to be used.
I'm proud of turning Reddit posts into multiplayer game lobbies. I achieved real two-player gameplay with real Reddit users. I built a server-authoritative game without any external infrastructure. I created an experience that feels nostalgic while being technically modern. I designed a game that genuinely couldn't exist on another platform in the same way.
I learned that Devvit shines when you design for Reddit's structure, not against it. Post-scoped state is an incredibly powerful primitive for games. Multiplayer doesn't need lobbies, invites, or accounts when identity is built in. Async, turn-based games are a natural fit for Reddit's engagement patterns. Simplicity in presentation can coexist with robust server-side systems.
What's next for Tanked includes spectator enhancements like turn indicators and shot replays. Inbox notifications when it's your turn would keep players engaged. Rematch and rotation modes could extend gameplay. Global leaderboards using persistent Reddit identity would add competitive elements. Expanded terrain and weapon variations would increase strategic depth. Tanked is just the beginning of what's possible when games are built for Reddit instead of merely embedded in it.
Built With
- and-the-client-renders-ascii-gameplay-via-html/css-while-communicating-with-the-server-using-fetch.-vite-is-used-to-bundle-both-client-and-server-code
- ascii-rendering
- async
- creating-a-fully-reddit-native
- css
- devvit-web
- html
- javascript
- multiplayer
- node.js
- player-identity-comes-directly-from-reddit
- redis
- server-authoritative-architecture
- turn-based-game
- typescript
- vite
- with-a-server-authoritative-architecture-running-inside-reddit?s-execution-environment.-game-state-is-stored-per-post-using-devvit-redis

Log in or sign up for Devpost to join the conversation.