The StarRaid native desktop game client — Godot with C#. See ../docs/client.md.
Thin and server-authoritative: it renders only what the server sends (interest-managed,
sensor-gated), takes player input, runs client-side automation (AI modules), and sends
intent over the wire protocol (Protobuf over TCP).
# Arch / CachyOS
paru -S godot-mono # Godot 4 with the Mono/.NET runtime (matches Godot.NET.Sdk in the csproj)
paru -S dotnet-sdk # .NET SDK for C#Also needs protoc (from the protocol repo's just gen-csharp) to produce the
C# bindings the client compiles.
just gen # regenerate the protocol's C# bindings (../protocol/gen/csharp)
just install # just gen + dotnet restore
just build # just gen + dotnet build
just run # godot-mono --path . (runs scenes/Main.tscn)
just edit # open in the Godot editorIf your Godot binary isn't godot-mono on PATH, override it: just godot=/path/to/godot run.
With the server running (cd ../server && just db-up && just migrate && just run) and the DB
seeded (cd ../admin && just seed), launch the client. The login screen defaults to
127.0.0.1:60000 and test@example.org / 1234 — Connect runs the version handshake + login,
then the game scene renders the controlled ship (camera-followed) plus the 3 seeded NPC ships.
Left-click empty space to move (the ship follows the server's authoritative position).
The client compiles the protocol's generated C# bindings (gen/csharp in the
protocol repo) directly — they are gitignored and regenerated by just gen. The
csproj's ProtocolPath property locates the checkout (default ../protocol); override it with
-p:ProtocolPath=... or the STARRAID_PROTOCOL_PATH env var, mirroring the Go components.
Layout: project.godot (project), scenes/ (Login + Game scenes), scripts/ (C# code:
Net/Connection.cs wire codec, Login.cs, Game.cs), Starraid.Client.csproj (the C# assembly).