PongProject is a lightweight multiplayer networking library that delivers sub-10ms state synchronisation over gRPC streams. Built for games, collaborative tools, and anything that can't wait.
Bidirectional streams over HTTP/2. No polling, no WebSocket overhead — just raw stream throughput with backpressure handling built in.
Only changed state fields are serialised. Protobuf wire format keeps payloads tiny even at 60 state updates per second.
Each game room runs in an isolated goroutine pool. A crash in one room never affects another. Graceful rejoin included.
mTLS by default between all nodes. Certificates are rotated automatically. Zero-trust topology with no shared secrets.
// Connect to a PongProject room package main import ( "context" "log" "github.com/pongprj/client-go" ) func main() { client, err := pong.Dial("pongprj.mine.bz", pong.Options{ Room: "room-42", Token: "eyJhbGci...", }) if err != nil { log.Fatal(err) } defer client.Close() client.OnState(func(s *pong.State) { log.Printf("tick %d: %+v\n", s.Tick, s.Players) }) client.Run(context.Background()) }