Go Lab: an online multi-user go board

TL;DR: I made an online go board that allows for all participants to have control at the same time. Check it out here: https://golab.gg/

Previous post (about a year ago): An online go board with shared control

Hi everyone,

I’ve posted about this before, but the project is now much more mature. I originally made this tool because I wanted to review games online with friends without needing to pass “control” back and forth. I feel confident that other people would find this convenient as well, so I wanted to make an announcement in the go community.

Actually, this project has expanded in scope since I’ve first started it, so I wanted to draw attention to the major points:

  • Each participant has shared control of the go board

  • Free and open-source, both backend and frontend (MIT license – permissive, do whatever you want with the code provided the license remains intact)

  • File formats accepted: SGF, GIB, NGF, ZIP. The SGF parser is pretty good, the GIB and NGF parsers are rudimentary at best. Please do feel free to send me any game files that fail to parse!

  • Sync with live OGS games. (Also reviews/demos). This could, hypothetically, be used for live commentary to follow along with an OGS game/demo.

  • Integrate with twitch. Twitch streamers can connect their stream chat to a go board, and audience members can use the chat to attach branches to the game file

  • Open license asset pack: https://github.com/golab/board/raw/refs/heads/test/assets/assets.zip This is a set of SVGs that I use for the woodgrain of the board and the shell stones. I thought it might be useful for other devs. (Creative Commons BY 4.0 – permissive, do whatever you want with the images, provided the license remains intact)

  • I’ve created some experimental browser extensions that will insert an “Upload to Go Lab” button to OGS (I repeat, experimental): https://addons.mozilla.org/en-US/firefox/addon/golab/ https://chromewebstore.google.com/detail/go-lab/peneikldbccilejglfhleienjdhpbhea?authuser=0&hl=en

Main page: https://golab.gg/ (enter a name for your board in the input bar, or leave it blank and the server will generate one for you)

Discord: https://discord.gg/y4wGZyed3e (feel free to make suggestions or report bugs)

GitHub: https://github.com/golab/board (you can also report issues here)

If you like this project and want to support me: https://tiptopjar.com/golab I just want to say that I’m not doing this for money, and any tips go directly to monthly server costs.

9 Likes

Nice, how do you deal with concurrent / invalid edits?

1 Like

there’s two main controls. the first control is server-side: after one user adds a stone, there is a short interval where the server will ignore input from the other users (this interval is configurable on a per-room basis, but it defaults to 250ms)

the second control is client side: after sending an “add_stone” event, the frontend will wait for the output from the server before sending more stone events.

2 Likes