Super simple real-time multi-user paint app:
- Client: Odin + raylib (
1920x1080black canvas) - Server: Elixir
mixapp on OTP TCP/ETS primitives - Draw with left click (white), erase with right click (black)
- Network sends only changed pixels in batches
See PROTOCOL.md for message format.
client/main.odin- raylib painter + TCP clientserver/mix.exs- Elixir server projectserver/lib/paint_together/server.ex- listener, accept loop, snapshot + broadcast flowserver/lib/paint_together/client.ex- per-client TCP process and frame parsingserver/lib/paint_together/canvas.ex- ETS-backed authoritative canvas state
Start server:
cd server
mix run --no-haltStart client (default server 127.0.0.1:4000):
cd client
odin run .Or specify host:port:
cd client
odin run . -- 192.168.1.50:4000Open multiple clients and draw to verify real-time sync.
- Single shared room
- Server stores authoritative canvas in memory
- New clients receive snapshot chunks with only non-black pixels
- Deltas are broadcast to every client except the sender
