Voidnet is a terminal-native roguelike creature-collection RPG built in Go.
You play as an Operator infiltrating a corrupted network, capturing rogue AI daemons, fighting through branching nodes, and assembling weird little build synergies out of traits, modifiers, and merges.
curl -fsSL https://voidnet.jimmymcbride.dev/install.sh | shirm https://voidnet.jimmymcbride.dev/install.ps1 | iexAfter install:
voidnet -version
voidnetNotes:
- Linux builds currently need
libasound.so.2available at runtime. - The hosted installer pulls the latest tagged release from GitHub Releases.
- You can pin a Unix install to a specific version:
curl -fsSL https://voidnet.jimmymcbride.dev/install.sh | VERSION=v0.1.0 shVoidnet is a single-binary CLI game with a Go TUI. The current version is built around short, readable runs:
- Move through a small branching node map.
- Enter one encounter per node.
- Fight one enemy daemon at a time in turn-based combat.
- Capture enemies with
Isolateinstead of only defeating them. - Spend a maintenance charge between fights to repair or fortify your roster.
- Rotate your lead daemon or merge two daemons from the node map.
- Reach the boss, win the run, or lose your last daemon and reset.
The core fantasy is not “type commands into a fake shell.” It is a menu-driven tactics game that happens to live inside a terminal.
The current run loop looks like this:
Scan -> Choose Node -> Enter -> Encounter -> Battle -> Capture / Reward -> Maintenance / Node Map -> Boss
In practice:
- You start with a small daemon roster and one unlocked starter.
- Each node gives you a fight and a chance to improve your roster state.
- Winning a battle banks one maintenance charge, capped at one.
- The node map is where you manage your squad between encounters.
- Boss fights are tougher, and boss encounters cannot be isolated.
The current playable archetypes are:
Firewall: defensive, high integrityNullPointer: offense, faster and more fragileMemoryLeaker: damage-over-time and status pressureScheduler: speed and turn disruption
Abilities are built from:
- an
Effect - a
Modifier
Current effects:
CorruptLeakSpikePatchDelay
Current modifiers:
SingleIntensifyUnstable
Current traits include:
VolatilePersistentOverclockedEncryptedGlitched
Traits shape stat lines, resistance, or combat swings, and they are part of what makes captured daemons worth keeping around.
Isolate is the capture action.
- It does not work on bosses.
- It becomes available once the enemy is at 50% Health or lower.
- It gets much stronger at 25% Health or lower.
- Status effects can improve your odds.
- Target Stability pushes back against capture chance.
The maintenance console lives between fights.
Repair Daemonspends 1 charge to restore Health and clear one negative status.Fortify Daemonspends 1 charge to restore a smaller amount of Health and grantStabilized.Rotate Leadis free and lets you pivot to another daemon before the next node.
The current merge rule is +1.
- Pick a base daemon and a fork daemon.
- The fork is consumed.
- The base keeps its core identity and becomes
Name +1. - It gains the fork's archetype move as a third ability.
- It heals on merge and gains a small stat bonus based on the fork archetype.
- Same-archetype merges are not allowed, and
+1daemons cannot merge again in the current version.
Voidnet is menu-driven. You do not need to type free-form commands.
up/downorj/k: move selectionenter: confirm the current actionspaceorenter: accelerate active combat/merge sequencesx: open maintenance from the node mapr: rotate lead from the node mapi: open command detail where availablec: open the command sheetm: toggle audiof: toggle playback fast-forward during combat
Some real things that are fun about how Voidnet is built:
- It is a Go TUI, not a wrapper around shell commands.
- The shipped game is a single binary.
- Core content is data-driven from
internal/content/data/game.json. - Daemon generation and combat feedback lean on deterministic seeded behavior, which makes runs debuggable and repeatable.
- The game has procedural SFX and looping music instead of shipped audio files.
- Audio is semantic inside the game code: gameplay emits events like
Scan,Crash, orDaemonCaptured, and the runtime decides how to play them. - Music has reactive battle themes and tempo intensity, but it stays deterministic and cacheable.
- Progression is saved in the user config directory under
voidnet/meta.json.
Run the game locally:
go run ./cmd/voidnetRun tests:
go test ./...Check the current build version string:
go run ./cmd/voidnet -versionRelated internal docs:
docs/internal/release-install.mdfor release and installer hostingdocs/internal/sfx-runtime.mdfor the runtime audio systemdocs/planning/vision.mdanddocs/planning/prd.mdfor product direction