Just for fun

SYN City: pushing packets, arcade-style

A side project I built just for fun. SYN City is a hold-and-release arcade jumper where every level is a different networking or sysadmin idea - the TCP handshake, a TLS negotiation, a split-brain failover, a wardrive across the neighbourhood's Wi-Fi. It started as a derivation of 100 Jumps, with its author's blessing, and grew into 27 levels of packet-pushing nonsense.

Not everything has to be work

Most of what I write about here is earnest: CSPs, config management, high availability, the usual sysadmin serial. This post is not that. This post is about a game I made on the weekends just for fun.

It's called SYN City, and you can go play it right now at syn.mig5.net . No install, no account, no cookies, no ads, no framework, no game engine.

It runs in any modern browser and installs as a PWA on your phone if you want it to.

SYN City's level select screen - a neon city skyline with the level picker open
The level picker - 27 protocols to pick from.

Where it came from

The seed was 100 Jumps , a deceptively simple one-touch platformer by the good people at Bored Zebra: hold to charge your jump, release to leap, land on the next platform, count down from 100 to 0. That's it. That's the whole game.

What stayed with me was the core mechanic - hold to build power, release to hop, land on the pad. There's a purity to it that feels like the arcade games I grew up on. I started wondering what would happen if you kept that core and dressed it in something I think about all day anyway: networking. Hold to build send power. Release to transmit. Land on the next host. Beat the retransmit timer. Linger long enough and you might just learn something about networking.

I reached out to the author of 100 Jumps to make sure I wasn't being a jerk about it, and they generously gave their blessing to make a derivation based on some of the same mechanics. So: thank you, Bored Zebra. SYN City owes its jump to 100 Jumps. Go play that one too.

How it plays

One thumb is enough for most levels, which is the whole point.

  1. Hold anywhere on the screen to charge the shot. The longer you hold, the farther the packet flies.
  2. Release to transmit. Tap the left or right edge of the pad you're on to tilt your next hop backward or forward - useful for recovering a pad you overshot, or choosing a branch when the route forks.
  3. Beat the RTO. A retransmit-timer bar is always draining. Land the next pad before it empties, or the packet is retransmitted and you lose a life. TTL is your lives; checksum is your score, and clean landings build a streak multiplier.
  4. Stealth. IDS, MITM and WIDS scanners sweep the route. Get caught waiting inside a beam and you're flagged and knocked back. Hold STEALTH to go invisible while a beam passes overhead - but Stealth drains faster, so don't sit in it.

That's the loop. Everything else - the timers, the scanners, the hazards, the litany of ways to lose - is a networking idea wearing an arcade costume.

Every level is a different protocol

There are 27 of them, each unlocking the next, and each one rebuilds a different corner of the stack. A few of my favourites:

  • ACKrobatics - the three-way handshake as a side-scroller. Open the connection, dodge RST firewalls, filter Martian packets, land the FIN gate.
ACKrobatics - a packet mid-flight over the city skyline, hopping between pads
Level 1, ACKrobatics: the three-way handshake as a side-scroller.
  • Tell me a secret - negotiate a TLS 1.3 session a MITM can't crack. Resist downgrade traps, wait for the certificate VERIFY gate, complete ephemeral key exchange for Perfect Forward Secrecy. Fall once and you lose PFS.
  • Onion Skin - you're an onion packet in three layers of encryption, six hops, two circuits, zero IPs leaked. Fetch the descriptor, plant a secret at the rendezvous, reach the hidden .onion service.
  • Kernel Panic - the first boss level. You're an open file handle. Hold to float the FD up, release to sink. Shred crawls up the lane behind you, BOFH sysadmins hurl chmod/rm/tar from above, and only fsync() and close() commit you cleanly.
Kernel Panic - the file descriptor floats up the lane while Shred crawls behind
Level 9, Kernel Panic: you're an open file handle. Shred is right behind you.
  • Tunnel Temper Trap - a padless VPN rush. Forward motion is automatic and ramps up toward the exit; hold to steer upward, release to sink. Touch the tunnel wall and you're demasked for five seconds, opening a window where MITM probes can reach you through the tunnel. Thread the mssfix/PMUD squeeze gates, dodge replay packets that knock you backward with an AEAD bad-packet-ID error, and reach FIN at the tunnel exit with the data-channel cover intact.
Tunnel Temper Trap - a packet floats through a VPN tunnel, squeeze gates ahead
Level 16, Tunnel Temper Trap: a padless rush through the VPN tunnel. Don't touch the walls.
  • Everything is a DNS Problem - because it's always DNS. This time you're the resolver. Hold XFER to push the zone to secondaries, then serve a split-horizon route where every fork randomly demands the INTERNAL row or the EXTERNAL bridge.
  • In the balance - a role reversal: you're not the packet, you're the load balancer. Drag the two backend pads - one with each thumb on a phone - so falling requests land safely. Round robin accepts either backend; when least-connections mode is ready to flip, a striped pass-through and a route beam show which narrower pad must catch the next request. Keep the connection alive until the keepalive expires.
In the balance - two backend pads being dragged apart to catch falling requests
Level 8, In the balance: you're the load balancer, not the packet. Two thumbs, two backends.
  • Next Hop - a traceroute where the road doesn't exist until you probe it. Hold to charge a THROW: release and the next pad is flung ahead of you, and you ride the probe onto it in the same motion. You get 29 pads for the whole trace. Throw too far and the probe answers * * *.
  • Logical Volume - the route is a volume group and you are its allocator. Flex sets how far the next pad lands and how big it grows, billed in physical extents from one shared pool. Spend the pool short of /dev/vg/root and it's insufficient free extents.

And, naturally, there's a level where you're a humble little pico editor lost in a scrolling maze while roaming vim and emacs zealots chase you home. The vim-vs-emacs holy war has gone hot, and only ^X can save you.

Go play it!

It's free, it runs anywhere, and it'll happily install to your phone's home screen and play offline. If you make it through all 27 levels, write in and tell me which one broke you - my money's on Kernel Panic or Grep Gunner :)

Go push that packet: syn.mig5.net .

At a glance
  • Type: browser arcade game (PWA)
  • Theme: networking & sysadmin
  • Levels: 27, each a different protocol
  • Cost: free, no install, no account
  • Plays: any modern browser, mobile-first
Need something slightly more serious?
When you're done pushing packets, I do sysadmin, networking and DevSecOps consulting for real.
Contact me