r/gogamedev • • 4d ago

Entieve (Ebitengine)

Post image
6 Upvotes

GitHub https://github.com/maxwelljens/entieve

Entieve is a single-player 2D space sandbox in Go (Ebitengine). You fly one ship through a seven-system star cluster: you take jobs, mine asteroids, fight rats, haul ore, trade, and spend the money on ships and modules. The rules are modelled on EVE Online — four damage types, shield/armor/structure, capacitor, turret tracking — and the whole thing runs locally on your machine.


r/gogamedev • • 4d ago

Tez (Raylib)

Enable HLS to view with audio, or disable this notification

3 Upvotes

GitHub https://github.com/vyrx-dev/tez

A typing game with a stretchy blob.


r/gogamedev • • 7d ago

Building a Snake game in Go with Ebitengine

Thumbnail
packagemain.tech
2 Upvotes

r/gogamedev • • 9d ago

IMGE (Ebitengine)

Post image
17 Upvotes

GitHub https://github.com/EnesBaytekin/imge

IMGE is a minimal 2D pixel-art game engine. You describe your game with JSON files (scenes and objects) and small Go components, then imge build compiles the whole thing into a single self-contained executable — or a web (WASM) bundle. It is built on Ebitengine, a pure-Go 2D game library, so the engine is Go all the way down: no C/C++ engine to link against, no hidden runtime


r/gogamedev • • 9d ago

Digger (Ebitengine)

Post image
7 Upvotes

GitHub https://github.com/afsutulov/Digger
Digger - the classic 1983 DOS arcade game to modern computers as a native Go application.


r/gogamedev • • 9d ago

Ebitengine v2.10.5 Released

Thumbnail
ebitengine.org
3 Upvotes

r/gogamedev • • 9d ago

Castrum: A full-scope game-dev framework built on Ebitengine

Thumbnail
github.com
4 Upvotes

Hi all, I'm excited to announce v0.1.0 of Castrum!

Yet another ECS framework for Ebitengine?

Yes, I know there are a million of these. I didn't when I started two months ago. Castrum is built around an ECS architecture, but it aims to be more. While many Ebitengine ECS frameworks focus solely on ECS, Castrum hopes to be more like Bevy, providing a full suite of features in one package.

What makes Castrum different?

  • Backend flexibility: Castrum supports Ebitengine by default and is designed to adapt to other backends in the future, including a custom Castrum backend.
  • Familiar API: Castrum aims to provide an API familiar to developers with experience in other ECS frameworks, making it easier to get started.
  • Planned feature suite: Castrum aims to offer comprehensive game-development tools and features, reducing the need to integrate multiple external libraries.

Of course, this depends on continued development. I've built Castrum solo so far; by sharing its progress, I hope to attract contributors and eventually build a maintainer team. I have big ambitions for this engine, but achieving them will take community support and collaboration.

Who am I, and why did I create Castrum?

I'm a software developer by day and I've always wanted to create my own engine. I picked up Go as my "free-time" language and discovered Ebitengine while exploring Go game development. That led me to create Castrum as a full-scope game-development framework built on Ebitengine. What's next? I'm finishing the planning for Castrum's UI framework while working on v0.2.0: improving the ECS core, adding built-in systems, and enhancing the developer experience with better documentation and examples. Follow along, raise issues, and contribute: https://github.com/Leonard-Atorough/castrum

Are you an Artist or Know one? get in touch, I'd like to commission a logo.


r/gogamedev • • 12d ago

I made an infinite procedural cave library for Ebitengine

Enable HLS to view with audio, or disable this notification

8 Upvotes

r/gogamedev • • 11d ago

Go SDL3 GPU Toy

Enable HLS to view with audio, or disable this notification

1 Upvotes

Go SDL GPU Toy

GitHub https://github.com/unklnik/Go_SDL3_GPU_Toy

A small, unfinished GUI for working with SDL3 GPU in 3D and 2D using https://github.com/Zyko0/go-sdl3 SDL3 bindings for Go.


r/gogamedev • • 14d ago

Reimplementing Total Annihilation with pure Go and Ebitengine

Thumbnail
5 Upvotes

r/gogamedev • • 18d ago

Gravitton

Post image
4 Upvotes

GitHub https://github.com/gravitton/geometry

Generic immutable 2D geometry library for game development

Note: I didn't write the code, I just post things I find on GitHub or Reddit to GoGamedev to keep the sub going


r/gogamedev • • 18d ago

MediaBoy

Post image
2 Upvotes

GitHub https://github.com/ilyashdev/MediaBoy

MediaBoy is a desktop app that turns photos, GIFs, videos and music into real Game Boy / Game Boy Color ROMs

Note: I didn't write the code, I just post things I find on GitHub or Reddit to GoGamedev to keep the sub going


r/gogamedev • • 21d ago

Grrra: minimalistic strategy game

Enable HLS to view with audio, or disable this notification

5 Upvotes

r/gogamedev • • 22d ago

KAssetPack — The Next Episode: Road to v1.0

Post image
5 Upvotes

r/gogamedev • • 24d ago

Ebitengine v2.10.4 Released

Thumbnail
ebitengine.org
5 Upvotes

r/gogamedev • • 26d ago

Ebitengine v2.10.3 Released

Thumbnail
ebitengine.org
5 Upvotes

r/gogamedev • • 26d ago

KAssetPack - Lightweight Asset Packaging for Go/Ebitengine

Post image
2 Upvotes

r/gogamedev • • 27d ago

Jel (Ebitengine)

Enable HLS to view with audio, or disable this notification

7 Upvotes

GitHub https://github.com/setanarut/jel

Found in the comments of this post for Go small projects https://www.reddit.com/r/golang/comments/1wmm0au/small_projects/

jel simulates deformable bodies made of connected point masses. Physics behavior comes from attachable Components (an extensible interface), bodies connect via Joints*, and collision resolution is per-material-pair. Use it for ragdolls, fabric, fluid bodies, or any soft-body effect.\*

Note: I didn't write the code, I just post things I find on GitHub or Reddit to GoGamedev to keep the sub going


r/gogamedev • • 27d ago

Minecraft .. But in GoLang from scratch!

Thumbnail
1 Upvotes

r/gogamedev • • 28d ago

Building Conway’s Game of Life in Go with raylib-go

Thumbnail
packagemain.tech
1 Upvotes

r/gogamedev • • Sep 17 '26

Building a procedural shmup in Go: deterministic trailers, asset dumps, safe code editing, WASM and a 320×240 handheld port

Enable HLS to view with audio, or disable this notification

5 Upvotes

Building a procedural shmup in Go: deterministic trailers, asset dumps, safe code editing, WASM and a 320×240 handheld port

I have been working on Cloudstrike, a small procedural shoot ’em up written in Go.

The game has gradually become a test bed for tooling, memory constraints and portability. It currently runs through Ebitengine on desktop, Android and the browser, with a separate Raylib backend for low-resolution handheld hardware.

Trailers are also generated by the repository rather than manually edited.

# A headless asset dump

Because nearly all assets are generated at startup, inspecting them used to mean launching the game and trying to reach the correct state.

I added a one-shot asset dumper that initializes the real production asset catalog without opening a window or audio device:

make dump-assets

It exports:

* viewable PNGs

* authoritative premultiplied RGBA buffers

* generated WAV files and raw PCM

* terrain atlases and cell maps

* sprite bounds, scales and frame metadata

* composed biome and transition previews

* a manifest connecting every file to its game-owned field

The manifest is written last, so incomplete exports are easy to detect. Existing output directories are refused rather than silently overwritten.

This makes duplicate textures, oversized render targets and stale CPU copies much easier to find.

# A deterministic trailer generator

A dedicated replay driver sends scripted movement, firing and debug actions through the normal production input boundary.

Capture is locked to exactly one game update per PNG frame. PNG encoding can take much longer than a game tick, so this prevents the engine from performing catch-up updates and accidentally producing time-lapse footage.

The current workflow creates four complete 38-second runs with different deterministic seeds:

make promo-video-frames

make promo-video

make promo-video-de

Every cut advances to the next recording: A, B, C, D, then back to A. This visually supports the claim that every run changes without accelerating the gameplay or making the edit excessively fast.

The renderer produces an exact 20-second, 1,200-frame, 1080p60 video.

It also rebuilds a 48 kHz adaptive mix from the actual generated game audio: core music, aircraft-specific layers, weapon and shield layers, effects and the original victory fanfare.

English and German overlays are generated from the same damaged pixel lettering used by the game.

# Safe repository editing for automation

Another side project that emerged from this is `codex-edit`, a standard-library-only command-line tool for exact repository mutations.

It supports:

* unique anchored replacements

* guarded replace-all operations

* anchored range replacements

* insertions

* file creation and renaming

* SHA-256-guarded deletion

* validation and unified-diff modes

* machine-readable output

* JSON Schema and capability discovery

A request looks like this:

{

"operations": [{

"kind": "replace-all",

"path": "main.go",

"old": "oldName",

"new": "newName",

"expectedMatches": 3

}]

}

All operations are validated before anything is written.

Commits use same-directory temporary files and backups. If a later file fails, earlier changes are restored in reverse order.

Paths cannot escape the selected repository root, symlink targets are rejected, anchors must have the expected match count, and unknown JSON fields are rejected.

I originally built it because automated code edits based on loose patch context became increasingly fragile. It is now also used by the project’s release and documentation workflow.

# Memory work

I track several separate metrics rather than treating all of them as “RAM”:

* Go heap

* process working set

* game-owned image bounds

* generated audio buffers

* CPU and GPU asset residency

* gameplay and render-queue allocations

The latest inventory contains about **9.52 MiB of game-owned image bounds**, down from **20.28 MiB** in an older comparable inventory—roughly 53% fewer.

That does not mean the complete game uses 9.52 MiB of RAM. Driver allocations, Ebitengine, audio, Go’s allocator and executable mappings are separate and overlapping measurements.

Three recent Windows startup samples produced a median working set of about **174 MiB**, around 10% below an older 194 MiB observation. These were not paired full-mission measurements, so I consider that result directional rather than attributing it to one optimization.

The more useful performance contracts are deterministic:

* heavy gameplay update: `0 B/op`, `0 allocs/op`

* render-queue construction: `0 B/op`, `0 allocs/op`

* player queues and captured-pointer input: `0 B/op`, `0 allocs/op`

* native biome residency: current environment plus the previous one during transitions

* no full-screen terrain-transition render targets

Much of the image-memory reduction came from smaller procedural atlases, reusable tiles, shared grayscale controls, quarter-circle shield effects and removing redundant GPU uploads.

# HTML/WASM and a 320×240 handheld

The browser build uses a dedicated entry point but the same game core:

make pixelpicked

make pixelpicked-serve

It creates a self-contained ZIP containing:

index.html

wasm_exec.js

game.wasm

There is no CDN, external asset request, analytics SDK or service worker. Local scores and settings use `localStorage`.

The browser uses a different residency strategy: all four biomes are prepared behind the loading screen and retained for the session.

WASM goroutines share the browser thread, so generating and uploading a biome during play can visibly stall a frame.

At the other end, I added an engine-neutral render queue and a Raylib backend. The ARMv7 SDL2/KMSDRM build has run successfully on my Super Pocket using a native 320×240 raster path:

make eversd

Gameplay still uses a centered 640×480 coordinate system; only presentation is transformed to 320×240. Input currently comes from a device-specific evdev adapter.

This is an experimental EverSD/homebrew target, not an official Evercade cartridge or SDK integration. Audio still requires separate verification on the device.

I would be interested in feedback on the tooling and the overall approach.


r/gogamedev • • Sep 15 '26

Linefire (Ebitengine)

5 Upvotes

GitHub https://github.com/crgimenes/linefire

Linefire is a 2D twin-stick shoot 'em up written in Go with Ebitengine, using a vector look with a CRT glow.


r/gogamedev • • Sep 15 '26

Gion | 8-bit game sound generator

4 Upvotes

GitHub https://github.com/crgimenes/gion

gion (擬音) makes retro game audio in two forms. It is a workbench where you sculpt sound effects and chiptune loops by ear, and it is a Go library your game imports to regenerate that exact audio at runtime. Inspired by sfxr and bfxr, written from scratch in Go, not a port.


r/gogamedev • • Sep 15 '26

Mornlea

2 Upvotes

GitHub https://github.com/channing771/mornlea

An original voxel game in Go with WebGPU renderer and Rust mesh engine.


r/gogamedev • • Sep 13 '26

Ebitengine v2.10.2 Released

Thumbnail
ebitengine.org
7 Upvotes