Opsville is a small pixel-art town where every district is broken, and you are the one on call. 🏘️ Each district is one DevOps topic: Linux, Docker, Git, CI/CD, Kubernetes, monitoring, security and databases. The people there hand you quests. Most quests open one of our browser simulators, then ask three questions. Fix all eight districts and the town gets its Launch Day.
It is free, it runs in your browser, and you can play it now at devops-daily.com/opsville.
▶️ Watch the full 30-second trailer
Disclosure: we build Opsville at DevOps Daily. It is free and needs no sign-up.
How to play, in 60 seconds ⏱️
- Open the game and press Start. Make a character, or skip that and change your look later at the Wardrobe.
- Move with the arrow keys or WASD. On a phone you get a joystick and a Talk button. A gamepad works too.
- Walk up to Mayor Chris in the town square and press E. He explains the plan: the town goes live soon, and no district works.
- Head west to Linux Lodge. Alex says the lodge server keeps saying "No space left on device". Take the quest, and the Linux terminal simulator opens in a panel (on a phone, in a new tab).
- Finish it, then answer three questions from our quiz bank. Two right answers pass. You get XP and a badge.
- Finish every quest in a district, and the next one opens. Clearing Linux Lodge also gets you a bike (press B) and Pip, a penguin pet who follows you around.
Handy keys: Q for quests, M for the map, P for your profile, H for help, F for photo mode, and 1 to 4 for emotes.
There are 8 districts and 34 quests. Progress saves in your browser, so you can close the tab and come back later.
Three moments we like
1. The boss fight is a live incident 🚨
From Docker Docks on, each district ends with a boss, which opens after the quests before it. The boss quiz plays as an incident: a status board with three systems that go from Down to Fixed as you answer.
In Docker Docks the board shows the container runtime, the host kernel and the image registry. In Git Garden it is the main branch, the release tags and the team clones. In the Observatory it is checkout, the status page and the on-call channel. Get two of the three questions right and the incident closes. Sophia at the Docks sums it up: "Every container stays in its box. Incident closed."
2. The pager 📟
Once you clear Linux Lodge, the pager starts. It stays quiet for the first three minutes, then pages you every 6 to 10 minutes, never while a panel is open. Each page comes from a district you have already opened:
Disk full on the Lodge server!
Press On my way and you have two minutes to get there and 30 seconds to fix it. You see the symptom (df -h shows / at 100%, and /var/log/app.log is 38 GB and growing) and three possible fixes. Pick "Reboot the server" and the game tells you why that fails: the disk is still full after a reboot, and the log keeps growing. The right fix is to truncate the log and set up logrotate.
There are ten pages across the eight districts, from a container stuck in a restart loop to an expired TLS certificate. If the pager gets too much, snooze it for 15 minutes or turn it off in Help.
3. The secret server room 🗄️
Twelve lost packets are hidden around town, and each one has a short story. "A DNS query from 2009" is still waiting for an answer. "A retry with no backoff" tried 9,000 times a second and is tired now.
Find all twelve, and an old hatch by the lake in the town square opens. Below it is a basement full of blinking racks and one terminal:
$ uptime 09:00:00 up 3652 days, 1 user, load average: 0.01, 0.01, 0.00 $ cat /var/log/packets.log delivered: A lonely TCP SYN delivered: A DNS query from 2009 ... $ echo "12 of 12 packets home" 12 of 12 packets home It is the oldest server in town, ten years without a reboot. Finding every packet also gets you the golden packet cap.
How we built it 🛠️
Vite, TypeScript and Phaser 3. Phaser draws the world: the map, the people, the weather and the effects. The panels, quizzes and HUD are plain DOM on top of the canvas.
Maps from text. The whole world is one text file of 72 x 50 characters, where one character is one 16 x 16 tile. A build script turns it into Tiled JSON with ground, decor, collision and object layers. Three rows from the top of the map:
P..*.:::.......::::.*..P................ggggg...P..%%%%........%%%%....P P.v........)..:....v...P................SSDSS...P..HHHH........HHHH.T..P P..*..T.:::::::.*..T.*.P........[.........:.....P..HHHH....]...HHHH....P P is a pine, : a stone path, g a grey roof, S a stone wall, D a door and H a castle wall. Moving a building is a diff you can review.
Static files on Cloudflare Pages. The game builds with the base path /opsville/. A release script copies the build into our main site, and Cloudflare Pages deploys it with everything else. The game needs no server of its own.
XP that the server decides. Sign-in is optional, with a free DevOps Daily account. When you are signed in, the game only tells our learning platform's API "I finished quest X". The API looks the quest up in its own list and decides the XP. Each quest counts once per player, two quests must be at least 30 seconds apart, and one player can count at most 24 quests in 24 hours. A test in the game fails when its quest list drifts from the server's list, so the weekly leaderboard stays fair.
The launch post has the rest of the build story: how a simulator in a frame tells the game you finished, and how we made two art sources look like one game.
Your turn
Start in Linux Lodge and see how far you get before the pager goes off: play Opsville free.
If you could add a ninth district, what would it be, and what would its boss incident look like? Tell us in the comments. 👇





