Space Shmup (Go + Raylib)
A shoot-em-up built in Go and Raylib to learn the language, with a live leaderboard API and site at leaderboards.prestonchoate.dev.
Go Raylib Game dev REST API
Overview
A shoot-em-up side project in Go using Raylib, part learning exercise and part nostalgia. Game development is what got me into programming; I never did it professionally, but I still like tinkering with gameplay and systems problems. This one also has a small leaderboard service so scores are not trapped on one machine.
Goals
- Learn Go in a context more fun than tutorial exercises
- Ship something playable end-to-end, not just a tech demo
- Practice game loop, input, collision, and simple enemy patterns
- Add a thin online layer (leaderboards) without over-engineering
Gameplay
Outline: describe the actual game.
- Core loop (move, shoot, waves, lives, score)
- Enemies / patterns implemented so far
- Power-ups or mechanics if any
- What “done enough to share” means for this project
Architecture
Outline:
- Game binary: Raylib loop, rendering, physics/collision approach
- Leaderboard API: endpoints, validation, how scores are submitted
- leaderboards.prestonchoate.dev: how the site talks to the API
- Deployment for API + static leaderboard UI
Tech stack
| Piece | Choice |
|---|---|
| Game | Go + Raylib |
| Leaderboard | Go API (shared module or separate service; TODO clarify) |
| Hosting | TODO: where game builds vs where API runs |
Challenges and decisions
- Go idioms coming from other languages
- Raylib ergonomics vs other engines you have used
- Preventing junk scores on the public leaderboard
- Build/release story for a desktop game (platforms you target)
What’s next
- Gameplay features you want next (bosses, levels, audio, etc.)
- Leaderboard improvements (auth, anti-cheat, seasons)
- Distribution: itch.io, binaries in GitHub releases, etc.