Where communities thrive

  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
    Chris Swithinbank
    @mbrinkl Not currently, although I don't think there would be a hard reason this couldn't be supported. A feature request on GitHub issues would be a good place to track this if you could open one.
    Michael Brinkley
    @delucis ok - on a similar note, is it possible to expose the random seed to the client when the game ends? Or would that also be a feature request
    Jeffrey Gao
    Is there a way to show the debug panel in multiplayer using the react lobby? or the lobby api in general
    Chris Swithinbank
    @mbrinkl That would also be a feature request and a more complex one too I suspect because of how the random plug-in is implemented. Out of curiosity, what's your use case for accessing the seed?
    8 replies
    Chris Swithinbank
    @Jeffmagma Yes, adding a debug prop to the component should behave the same way it does with the normal client. (With the plain JS lobby API client, it's up to you how you instantiate the game client so you can also pass debug there.)
    One thing worth noting is that some debug functionality will not work correctly in a multiplayer set up. If you just want the panel to have a look at the current state or dispatch a move, that should be fine, but save/restore or toggling player ID will usually break the connection to the server. For actually debugging game play, I generally recommend running a single-player client.
    Tanner Griffin
    Is codenames.game written with boardgame.io? The websockets look very familiar but I don't know for sure
    4 replies
    Also, has anyone put BGIO into use on anything other than a web / react native app?
    Jeffrey Gao
    For some reason, it seems like my stages are not working. I opened my game in single player on the debug panel and the only available move is stage_1 and after entering stage1 no more moves become available
    1 reply
    each move just moves you onto the next stage for testing purposes
    Hi! I updated from boardgame.io@0.42.2 to boardgame.io@0.49.10. One of the changes is that in interface SocketIOOpts socketOpts? was changed from any to ioNamespace.SocketOptions. Unfortunately, this means I can no longer initialize my Client with multiplayer: SocketIO({ server: server_url, socketOpts: { path: '/sub/socket.io' } }) because path is no longer accepted. Any ideas?
    13 replies
    Theo Salzmann
    Hi, I am currently trying to build a docker-compose setup with a boardgame.io-client, boardgame.io-server and a caddy-reverse-proxy container. It seems to work in general, but I can't get the Socket.io setup right and the socket always hangs up. Does anybody have experience with this and could help me?
    13 replies
    Theo Salzmann

    Hi, its me again 😅
    I am currently having a weird issue (I probably had it before, but did not realize it).
    Inside my game definition I set a seed for randomization. The seed is being generated by a call to nanoid().
    However I noticed that the seed will only be set once for the game, not for each match instance I create.
    Therefore each match will have the exact same randomization output.
    I noticed this issue from 2018 boardgameio/boardgame.io#233 - however if I interpret it correctly, this has long been resolved.
    Now I am wondering what I should be doing differently. I haven't found a way to tell the server to use a new seed when a new match is being created via the lobby API.

    What am I missing here? :)

    AHHHH nvm. I missunderstood how the seed works. The server already generates a new seed for each match. Overriding the seed is only necessary, if I want to use a specific seed (e.g. for testing etc.)

    1 reply
    Hi All,
    I think i'm missing something simple. :) I have a game I've just updated from v0.44 - which used to work.
    Basically, it's the whole "you can pick up until the next player plays" scenario.
    I've implemented it as a stage that the current player goes into just after endTurn() is called... but it's not working any more.
    Code looks like so:
    var activePlayersValue = {}; activePlayersValue[ctx.currentPlayer] = 'pickup'; //store up the current player to put into the pickup stage. ctx.events.endTurn(); ctx.events.setActivePlayers({ currentPlayer: Stage.NULL, value: activePlayersValue, maxMoves: (6 - cardCount) }); //let them draw back to 6?
    Should I be doing this some other way now?
    1 reply
    Is it possible to have a game's state only be modified by one client but also let other clients connect to the server to view the game's state but not be able to modify it? Sort of one person plays the game on their client and others can watch it happen in real-time.
    3 replies
    Ali Jaya Meilio
    Hello, I'm using Vue and typescript. Need some direction here. When I use Client.subscribe(someFunc), how could I declare the type of someFunc? It seems I need to import the type of ClientState<G> but I don't know how.
    4 replies
    Andrew Zielinski
    Hi All,
    Does the AI run on the server or client? If only the client, is it possible to make it run on a server? Also, is it possible to have AI vs AI without a visual client?
    Chris Swithinbank
    @andrewzielinski The current simplest bot set-up is client-only. It is theoretically possible to use the MCTS bot class on the server but currently requires some custom server code. Here's the issue tracking adding this feature in a more friendly way: boardgameio/boardgame.io#383
    If you want to run AI vs AI matches on the client you can provide a bot for every player ID:
      multiplayer: Local({
        bots: {
          0: MCTSBot,
          1: MCTSBot,
    1 reply
    Is there a way to test whether my game data is JSON-serializable? Whenever I start a remote server and connect to it, one of the moves that modifies the game data returns this error (only when connected to the server): "TypeError: Cannot read properties of undefined (reading 'observeArray') at Proxy.mutator." So I feel I must have something I shouldn't in my game object?
    Chris Swithinbank
    Curious. We do have a check that should throw that error in versions 0.43.3 and higher (implemented in this PR boardgameio/boardgame.io#896)
    But it won't run if the NODE_ENV environment variable is 'production'. Maybe double check process.env.NODE_ENV is set to something else during development.
    Chris Swithinbank
    Searching for observeArray throws up mostly results for Vue. Is that what you’re using?
    10 replies
    Adam Gainer
    Hey, Super excited to be here. I just completed the Tic Tac Toe Tutorial! As someone who has always kind of struggled with JS and react, I'm over the moon , I'm working on porting over one of my favorite boardgames to a web version so a friend and I can play across country.
    Chris Swithinbank
    :wave: Welcome, @againerdev!
    Hello everyone!! I have a issue building the app in the serverless option...As it says in the documentation, I've included "build": "parcel build index.html --out-dir build", in the scripts section of the package.json. When I build the project, it builds it self great, but when I open index.html in my browser, it gives me the error "Failed to load resource: net::ERR_FILE_NOT_FOUND". I've searched it on the internet and all I could find is to add "homepage": "./" in the package.json, but still not working. I've tried every file reference possible as well, but I didn't find any solutions. I have my index.html in the root folder and all the js scripts in a src folder. Hope somebody can help me out! Thanks!!
    1 reply
    Theo Salzmann

    Hey folks,

    I am currently a bit confused on how multiplayer credentials work.
    My setup looks like this:

    • I have a react client
    • and I have the boardgame.io koa server
    • I want to authenticate via JWT
    • I have a custom login route, where user POST their username + password
    • the server will then issue a JWT and put it into an HttpOnly cookie, which will be used to authenticate all following requests

    Now as far as I understand the docs I need three things:

    1. A generateCredentials function which retrieves some unique key (the username in my case)
    2. An authenticateCredentials function which checks if the credentials provided are valid
    3. I need to set the credentials prop on the GameClient-react component

    I assume that the authenticateCredentials function takes whatever I put into the React-Components credentials prop as its first parameter. Is that correct?
    This means I would not be able to use an HttpOnly-cookie because I won't be able to access it via JS from the client, so that I can hand it to the GameClient.
    Is there anything I am missing? There does not seem to be a way to access the koa app.ctx inside the authenticateCredentials function, so that I could get the cookie from there.

    3 replies
    Grzegorz Pociejewski
    Hi, Im on boardgama io 0.49.10 instead of game board i see 'connecting'
    where my game server is running
    i see this from socket.io
    "code": 5,
    "message": "Unsupported protocol version"
    Do you have idea of what is wrong ?
    1 reply
    Hi have you guys encountered issues relating to websocket e.g one of the players not getting updated of the state and because the game is a turn-based game, the player only get the state at the last few seconds and couldn't make a move. Any idea how we can simulate that to test and fix it?
    17 replies

    I'm looking for a freelance JS developer to help me finish and maintain my VueJS + BoardGameIO project.

    The second version of my game (www.abak.me) is built on vueJS (3) + boardgame.io + expressJS. I wrote almost entirely the UI and a huge part of the server-side methods. Still, I need a lot of testing, debugging, and implementing some functionalities, messages, and server-side tools to monitor and manage server-side behavior.

    Here you can see the production version (#1): https://www.abak.me Here you can see the new version I'm working on (#2):

    The issue is I'm not in the mood to keep programming. I'm an old guy with a job and a family and, to do this, I need heavy inspiration, which I had six months ago (while I was learning to use vue), but I'm laking right now. But I really want to upgrade my game version, so I need help and decided that this might be the best place to look, given the engine I have used, and yet the boardgame.io part is done.

    These are the tasks needed to finish it; most of them are server-side:

    • Order and unify server APIs: Some are on Koa's internal server; others are in a different express server (a consequence of the learning process).
    • Test and debug P2P invitation system. It is working but barely tested. Some border cases or unexpected scenarios (network loss) might create a problem. (Implemented, barely tested).
    • Test and debug statistics storage (at the end of the game, make some calculations and save to the DDBB (implemented, with bugs).
    • Implement a medal system. Based on statistics. (Nos implemented)
    • Implement firebase auth with google account, Facebook and Twitter (not implemented, A simple cookie-based method is currently implemented).
      • I have an android and iPhone webview app that, when loads the page, uses the native SDK. I want to conserve that.
      • Implement logout and account deletion (not implemented).
    • Improve API security. (Implement a JWT based solution).
    • Create API methods for getting statistics:
      • Games actives.
      • Games today.
      • Games this month.
      • etc.

    I think the code is reasonably well arranged and easy to follow. It is not really commented, though, but I can be your wiki.

    I would love to work with a talented programmer who likes the game and aligns itself with my objectives. I can pay with Paypal and cryptos. We can define payment for each task, and we should need to have an induction session to explain the components.

    Please get in touch with me (abakevolution@gmail.com or @abakevolution) if you are interested.

    I'm sorry I used formatting. I wasn't expecting it to be so extravagant. And I'm sorry if I'm misusing this chat.
    1 reply
    Richard L
    Hi, The home page says, BGIO supports game logs with the ability to time travel (viewing the board at an earlier state). But I did find any documentation about how to do this. Could someone point me in the right direction? Thanks - and apologies for what is probably a beginners question.
    4 replies
    Jeffrey Gao
    Hi, how would you retrieve the id of the player who made a move? If i put everyone into a stage so they can all make a move in real time, where in G or ctx is the playerID? I can see it in props when rendering the board as props.playerID. Would I need to pass it back from there into the move parameters?
    1 reply
    Richard L
    Hi. Is it possible to (temporally) abandon turn order and allow an arbitrary player to make the next move? There are a few occasions when this would be useful for my games. Thanks.
    4 replies
    Hello all =) Is anyone using boardgame.io for CCG's? I didn't see any prebuilt deckbuilding functionality but I may not be looking in the right area.
    16 replies
    Hi All - quick one - I'm implementing a trick taking type card game - and it's all working well, I'm just trying to work out the best way to handle the 'end of trick' - in reality I want to update the state (play the card to the table), wait a couple of seconds (to display who won the trick) and then update the state again (score / clear the table etc). At present it's all working with them in a combined update. I've tried using bgio-effects to animate (which I'm finding very cool) - but that means I have to calculate the intermediate state in the display, or pass then entire intermediate state as payload to the animate method? [I only seem to be able to access the initial state or the final state] Or should I be handling it some other way, like some other additional move with gets triggered on one of the clients?
    4 replies
    Hey, I'm trying to make a simple board game with boardgame.io and I have a mechanism where I select a piece and it displays where I can move it but I have no idea where to place this, on the tic tac toe example everything is done on "moves" but if I place something here to turn automatically ends
    Any hint on how to do that?
    1 reply
    Kevin Chen
    If I want to make a player-viewable game log, is it OK to include it in G? For concreteness, suppose the log is an array of strings that gets longer the game goes on, maybe to ~1000 lines maximum. Will I run into memory issues? I am asking because I don't know if the game state G is copied every move in order to implement the undo functionality, in which case the memory consupmtion grows quadratically? I hope this is not the case, but I just want to double check
    4 replies
    Leo Trubach
    Hi! How to subscribe to "opponent made move" event on client side?
    5 replies
    Theo Salzmann


    is there a way to access match specific data on Game.onEnd()?
    The reason I am asking is the following:
    We have a user section, where the user can see their archived games (so games where they took part in and where the game has ended).
    However it might sometimes happen, that a player is not connected while gameOver is being triggered.
    We want to display a notification inside the archived section in that case.
    What we currently do is, to send an API request updating a column in our DB to our server, from our React-client (inside an useEffect-Hook, which checks if the game has ended and if the user is currently connected).
    However because of this, if a user enters the game afterwards and another player is no longer connected, the notification will be set for the other player. And this will go on and on and on...

    Therefore I would like to send the request inside Game.onEnd, so that it gets triggered once at max.
    Related to this is the question if it is possible to only run onEnd() or certain parts of it on the server?
    This would eliminate the need to send an API-request, as I could simply update the database.

    Ofcourse there are lots of ways to work around this, by setting flags inside the DB. But it would be quite nice if there was an easy way to solve this.

    Thanks in advance :)

    6 replies

    Hi all,
    I am sort of a newbie and trying to figure out how to let the user submit values via a form with moves:

               <form onSubmit={() => moves.selection()}>
                  <label>Check card values and press "Submit" to start:</label>
                  <input type="text" name="userInput" defaultValue={G.fibonacci} />
                  <input type="submit" value="Submit" />

    Though I am sort of confused what goes wrong, when I try to update G.fibonacci and change G.started

    phases: {
        setCards: {
          start: true,
          next: "voteNumbers", 
          onBegin: (G, ctx) => {
            G.started = false;
            G.fibonacci = [0, 1, 2, 3, 5, 8, 13];
          endIf: (G) => G.started == true,
          turn: {
            activePlayers: {
              all: "selection",
              moveLimit: 1,
            stages: {
              selection: {
                moves: {
                  selection: (G, ctx, selection) => {
                    fibonacci = selection.target.userInput;
                    G.started = true;

    I am also getting this error:
    ERROR: move not processed - canPlayerMakeMove=false - playerID=[0] - action[selection]
    I am fairly new to everything – can someone maybe give me some pointers on how to change the value of Fibonacci and change Started?

    9 replies
    Nick Jordan
    Hi all, does anyone have any good examples of using MCTS bot with heuristics? Or really just how to provide a little more logic to the AI more than just giving a list of possible moves
    Nick Jordan

    I have found a small example defiing objectives in ai.test.ts after coming across this thread: boardgameio/boardgame.io#7

    but I can't get the objective checkers to fire... the example in the thread shows defining a custom Bot derivative class that gets passed into the Client's "multiplayer: Local ( bot: CUSTOM_BOT ) " but I dont know how to define objectives for the "ai" section of the Game, and dont know how to pass in a custom Bot class implementing objectives for single player mode.

    any help would be appreciated!