Where communities thrive

  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
    Francisco Alamino
    I'm trying to implement a maxMoves in my mage but with the possibility of save moves for the next turn. Eg: I have 2 moves per turn, but if I only use 1, the next turn I will have 3 moves, and if the next turn I don't use any, I'll have 5, etc. Is there any /correct/ way to do this? I was looking for something like moves property in my G object and then use something like endIf in my turn object.
    1 reply
    There are so many awesome ideas that I would like to use in my project too! But for now, I draw experience from other challenging games and use other platforms as references. What games are you looking at and want to use cool features for yourself? I have a rather large list, so it's harder to implement this in one project but I think that watchfulness is the key issue.

    Hi, does somebody know how to programmatically dispatch a move. For instance when the user executes the "rollDie" move and it hits 6. I want the "Spawn" move to be executed automatically without any user interaction.

    EDIT: In other words: How can I execute/dispatch a Move<G, Ctx> object.

    1 reply

    Related to @ilivss question, can I execute a move/action with no user interaction at all? An example - on the turn start (OnBegin) I would like to automatically roll a die and more based on the result. with out the user taking any action on his turn unless the die hit 6. then I would like to provide the user the option to take a move.

    My problem is that ctx.currentPlayer or ctx.playerID are not defined at this stage. so I can not refer to the relevant player.

    2 replies

    I'm having trouble trying to run a client from node. I would like to simulate a client to run a bot, but I cannot accomplish that.
    This is my code:
    import { LobbyClient } from "boardgame.io/client"; let lobbyClient = new LobbyClient({ server: 'localhost:8000' }); lobbyClient.listMatches('AbakEvolution') .then((resp)=>{console.log(resp)}) .catch((error)=>{console.error(error)})

    And gives the following error:
    ReferenceError: fetch is not defined

    What puzzles me is that this runs perfectly in a web browser, but not node.

    Is there a package I should use that is missing?

    1 reply
    Hello, I just followed the tutorial with react on my local and the board doesn't update after making a move or when the game ends. Is there anything obvious that I should be looking out for? I've played with this package before on glitch with no issues. Any help much appreciated :)
    6 replies
    Emil Elgaard
    Are the docs / typescript defs out of date?
    I tried to call an event via ctx.events but that is not undefined.
    However I see that there is an object called "events" in the props of the Game object that contains all the methods such as setActivePlayers that shold be in ctx.events.
    James Moon
    Is there a built-in or preferred way to allow a player to move multiple pawns during a turn? I'm looking at the docs, specifically attributes like minMoves and moveLimit, but I'm not seeing how to end a turn when a player moves all of their pawns.
    3 replies
    Noé Bonnet
    Hi ! can anyone guide me on how to handle player disconnection ? is there an event or something in the game logic i can use to update my player state when someone leave the game ?
    8 replies
    Noé Bonnet
    I create an issue about this boardgameio/boardgame.io#1088 I hope someone can help me to achieve that
    Any guide on forking and using the forked dependency? The way I've done it is giving me Module not found: Error: Can't resolve 'boardgame.io/react'
    Bjarke Felbo
    Hey everyone, boardgame.io looks awesome! Excited to play with it.
    Anyone know why what made it take off so dramatically in Dec 2017? :sweat_smile:
    Most repos don't take off like that right after launch :smile:
    Hey! Is there any library for creating a client on, say, Unity3D, while still having the server on boardgame.io ?
    Alex Rod

    Hello! im having trouble fixing the "Error: failed to retrieve list of matches (TypeError: NetworkError when attempting to fetch resource.)"

    I'm attempting to host the backend in heroku and the client will be hosted separately, but I can't seem to get this to work even on localhost

    2 replies
    If I want to have classes for my cards, I can't store them fully in the board state because it doesn't allow that. So I'm just storing the data (i.e. {...someCardClass} and then when I want to use the method having to look that up and use the state rather than this. That seems really hacky. What's the right way to implement something like that? Would I have to store every cards unique methods as moves? (I'm hoping not)
    1 reply
    Judie Thai

    hi all, I'm having a lot of trouble deploying to heroku. I was able to follow the docs to get the game working with a lobby on local, but deployment has been rough.

    could someone check my project here and tell me what I'm doing wrong? https://github.com/djoodi/web-omok

    3 replies
    Good morning, boardgamers. Is there any good way to hook onto specific Game state changes to update the game state for all other players with animations?
    2 replies
    Desmond Rivet
    Hi there. This might be a stupid question, but I'm trying out the basic Tic-Tac-Toe React tutorial. I'm finding that the board doesn't update when I click on it. I'm not sure what I'm doing wrong. Is this a known issue?
    3 replies
    Noé Bonnet
    Hi ! just asking the community again, can someone helps me with this issue ? boardgameio/boardgame.io#1088
    Noé Bonnet
    For now i'm considering creating a new match each time a player leaves. For example for a match of 4 players, player 2 leaves, a second match is created using the first match players data of the 3 other players (points, board positions, etc..) and all the players in the first match are automatically connected to the new match. But it's not the ideal thing to do for our project... does anyone have another idea ? To add some precision, in my game players who leave the game are not allowed to come back.
    Noé Bonnet
    @apollov:matrix.org i tried using plugins to achieve that like you suggested, but the plugin methods are not called when someone leave the match
    Gabriele Castellano

    Thanks for this amazing framework!

    I am encountering a possible limitations in triggering some actions whenever something happens. Indeed, the available Events API is only for predefined events and is only related to the ctx object.

    To my understanding, it is not possible to create a custom event, and trigger / handle it server side from multiple areas of the code. For instance, I could define an event "CardPlayed" that is notified within a move (every time a player plays a card). Then, if there are one or more handler registered for that event, they will be executed. Otherwise nothing would happen.

    Am I missing something?

    2 replies
    is PlayerID on context optional when in a move?
    e.g.: ctx: {..., PlayerID: string | undefined} correct?
    Desmond Rivet

    Hi all. I have a couple of conceptual questions I'm hoping someone can help me out with.

    Let's say I have a game with two stages in the turn section:

    turn {
      stages: {
         doSomething: { 
              moves: { DoSomething }, 
              next: "selectCardsAndShowOne" 
         selectOneCardToShow: {
              moves: { SelectOneCardToShow} 

    Basically, each turn you do some move (the "doSomething" stage) and then you have to, let's say, pick two cards from a deck, show on on the board, and discard the other (the "selectOneCardToShow" stage).

    My issue is that the move in the second stage ("SelectOneCardToShow") consists of taking two cards into your hand from a deck and choosing one to display to everyone. In my mind, and maybe this is the wrong way to think about it, it's only the last part that's the actual move, because the only part where the player has to make a choice. The first part, where the two cards are picked from the deck, isn't really under the player's control. He has to do it, and he has to pick the top two cards.

    So how do you model that first part? What part of the framework runs the code which takes the two cards from the deck and puts them into the player's hand?

    One thought that occurred to me is that I could do it as part of the previous move, the "DoSomething". At the end of that move, I could transfer two cards into the player's hand. But that seems messy, especially since those cards have nothing to do with "DoSomething".

    Is there a "beginStage" hook I can run? That could work but I didn't see one in the docs.

    Another option is to treat the "Pick two cards" part as a separate move. That seems weird too, especially since the player doesn't really have anything to do except pick the cards. No choice to be made or anything. I guess one could do that, but I'm still not sure how I'd "enforce" the move, since it's basically mandatory now.

    Any thoughts or ideas? Thanks in advance.

    3 replies
    Quentin Cavenel

    Hello guys, i have a big problem since few days, when i start my script cmd to launch my server, i get an error which says :
    Error [ERR_REQUIRE_ESM]: require() of ES Module C:\Users\user\Desktop\cardgame\src\server.js not supported.
    Instead change the require of server.js in null to a dynamic import() which is available in all CommonJS modules.] {
    code: 'ERR_REQUIRE_ESM'
    It Strange because my package.json contains "type: 'module' "

    Anyone could help me please ??

    2 replies
    Christopher Magendran
    Hi guys I am currently working on creating a poker game on html 5 and would need help building it. Looking to outsource and pay to anyone here in cash or blockchain. My game would inherently have blockchain integration but would need help mainly in the game logic and code
    4 replies
    Joselito Viveiros Nogueira Filho

    Hi guys. I have a conceptual question. I am working on a game where for each turn, each player should execute some moves and then pass the turn to another player to do the same moves, for example:

    Turn 1:

    • Player 1: GetCard -> Attack -> Move -> Pass to Player 2
    • Player 2: GetCard -> Attack -> Move -> Pass to Player 3
    • Player 3: GetCard -> Attack -> Move -> End Turn 1

    Turn 2:

    • Player 1: GetCard -> Attack -> Move -> Pass to Player 2
    • Player 2: GetCard -> Attack -> Move -> Pass to Player 3
    • Player 3: GetCard -> Attack -> Move -> End Turn 2


    How can I create a game structure for that?

    3 replies
    David Chapman

    Hi there,

    I have added a button to my game to allow the player to undo their last action, but when I click the button nothing seems to happen. I have confirmed that the handler is setup correctly and props.undo() is getting hit. Is there something else that I need to do to utilize undo/redo?

    2 replies

    I'm trying to use typescript with boardgame.io and I get stuck with this error:

    Uncaught Error: Move state is not JSON-serialiazable.
    See https://boardgame.io/documentation/#/?id=state for more information.

    My problem seems to be, that I'm adding an array of very primitive Objects to the state:

    export class Card {
      suit: string;
      rank: number;
      shortname: string;
      constructor(suit: string, rank: number) {
        this.suit = suit;
        this.rank = rank;
        this.shortname = this.suit + this.rank;
    export type Hand = Card[];
    export interface SpadesGameState {
      bids: string[];
      score: number[];
      hands: Hand[];
      currentTrick?: Trick;
      lastTrick?: Trick;
      dealer: number;
      isSpadesOpen: boolean;
    return { ...G, isSpadesOpen: false, currentTrick: undefined, lastTrick: undefined, hands: [[new Card("d", 1),new Card("d", 4)], [], [], []] as Hand[]}

    Is it really true that I cannot have a GameState that has a typed ("classed") property inside or should I search for the error elsewhere..?

    2 replies
    Juliano Rocha Barbosa
    Hi, anyone have the same problem below?
    I have two players in a game, when I call the leave match endpoint in one of then, the player still listed in matchData object with isConnected: true
    I'm using this endpoint: https://boardgame.io/documentation/#/api/Lobby?id=leaving-a-match
    3 replies
    Daniel Lujan
    Hello. I need help please. I'm making a game that has two players. I'm running into an issue where I HAVE to MANUALLY toggle the player in the debug console in order for the player turns to work. You know, click it so that the grey box has an orange outline. How do I get this to happen automatically so that I don't have to click it each time? Thanks.
    2 replies
    Joselito Viveiros Nogueira Filho

    Hi all,

    Does anyone have a good example of using Bots?

    Hello, my board (for a card game) is composed by react components (e.g. player hand) and sub-components (e.g. cards). I don't see how to access the "moves" property from those sub-components. Is it automatically available from any (sub-)component (through props.moves) or do i have to pass it from parent to children ? My intention is to run a move function when I click on a card. Do you have some examples ? Thank you for your help !
    3 replies
    Nithiwat Sirirattanachaikul
    Hi all! I wonder if it's possible to create a game frontend using Phaser JS while using boardgame.io to control the game logic. I think it would be a great way to create a fun and interactive game that people could play online. If anyone has any thoughts or knows of any tutorials that could help me out, I would really appreciate it!
    1 reply
    Nathan Saritzky

    Certain events are double-firing inappropriately, and I'm at a loss for why. I have a phase in which most turns are automatic. In the exceptions, I shunt players into a stage to make a move before ending the turn. An onEnd hook for the turn then fires. My problem is that, sometimes, that onEnd hook fires twice. It seems to happen when either the phase ends or the event needs to call another move function. At least in the latter case, the top of the call stack looks like: (my onEnd hook) > wrapFn > produce > wrapFn, where both wrapFns come from the Immer plugin. This seems weird, and calls to mind this old bug: boardgameio/boardgame.io#544. But I don't know how to fix or work around it.

    Appreciate any help you can give.

    Gabriele Castellano
    Hello everyone!
    I am trying to deploy my game in a multiplayer fashion, using a simple server and the built in lobby. I am encountering a trouble I have no clue how to solve, as client side ctx.playerID is never set, hence I am not able to identify the player (for customizing the interface based on it). Server side, ctx.playerID seems to be set correctly. I think I am missing something big as I cannot find any reference to this error anywhere.
    Thank you very much for your help.

    Hello, I have an array (called 'selection') in my game state (G). I want a react component to refresh when an item is added/removed to/from this array. The problem is that my 'useEffect' function does not trigger.

    export function MyBoard({ ctx, G, moves }) {
    const [selection, setSelection] = useState([]);
    useEffect(() => {
    }, [G.selection]);
    ... }

    Here is the code (in my moves) that adds an element to the array (I avoid using 'push' as it does not change the array) :

    G.selection = [...G.selection, item];

    Thank you for your help !

    3 replies
    Noé Bonnet
    Hi ! i have issues with multiplayer (and only on my staging environment) where the game clients always disconnect and reconnect when the match begins. this is not happenning on localhost, does it happen to anybody else ?
    Noé Bonnet

    Hi i just posted a new issue here : boardgameio/boardgame.io#1100

    "Hi ! i have a custom lobby mechanism on my project which implement basic matchmaking between players.
    When sufficient players have joined the lobby i create the match from my api and send an event to all the players to redirect them to the match page.
    When the match page load, an http call occurs to log the user to the game server.

    It seems that the boardgame implementation cannot handle simultaneous connection changes properly.
    When someone logs into the match (https://github.com/boardgameio/boardgame.io/blob/main/src/master/master.ts#L400)
    the match metadata is fetched from my database, modified to include the new metadata, sent to all clients and then saved to the database.

    When 2 players joins the match simultaneously, this logic is called 4 times simultaneously and it looks like that some players are overriding the metadata changes of previous users.

    For example:

    Player 1 is redirected to match page
    Player 2 is redirected to match page

    Player 1 onConnectionChange method start and fetch metadata
    Player 2 onConnectionChange method start and fetch metadata

    Player 1 onConnectionChange method modify metadata and save it to the database
    Player 2 onConnectionChange method modify metadata and save it to the database

    as Player 2 fetched the metadata before Player 1 finished modifying and saving it to the database, when Player 2 modify and save the metadata into the database, the data is outdated and does not contain Player 1 isConnected and credentials values. Player 2 is correctly logged into the match but Player 1 stay on the "Connecting..." screen indefinitely and the match get stuck when his turn start...

    Sometimes everything plays nicely in the correct order but most of the time, for example in a 4 players match, a player stay on the loading screen and the match is blocked, this is really critical for my project, how can this be fixed ?"

    Does anyone has encountered the same behavior ? and maybe found a solution for it ?

    Nick Mura
    What is a 'game definition' ? How easy would it be to assimilate boardgame.io into my existing game.
    Gabriele Castellano
    Hi everyone! I noticed the AI is not really documented. I managed to add bots through the enumerate function, but I have no way to specify any optimization metric. The tutorial states that it is possible "to specify a set of objectives to optimize for", but I am not able to find any example of this anywhere. Also, it seems that the "ai" object only accepts "enumerate" as child. How can I make the bot maximize a very simple metric, let's say, G.players[playerID].score ?
    Hi Everyone,
    I am new to Boardgame.io so learning as I go and am building my game. It is a 2 player card game, where each player has stats such as resources, and the player pays these resources to either heal themselves or damage the opponent.
    So for example if the player uses a spell that costs 9 mana, it removes 9 mana from them and then deals 10 damage to the opponent's health.
    How can I affect the stats of the other player. I know to use ctx.currentplayer to affect the stats of the current player, however am unsure of how to do "other player" or "not current player". What is the best approach to achieve this without writing unoptimized code?
    4 replies
    Gabriele Castellano
    Hello! I am using the ctx.log object to show a game log client-side. It works fine for moves, as I can add metadata before the move ends. However, what if I want to log something outside of a move? Let's say, on some event? For instance, I have a 'onBegin' method in one of my phases, and I want to log something from that method. If I try to modify ctx.log there, nothing arrives client-side as that happens outside of a move.
    Desmond Rivet

    Hello! I'm currently wrapping my head around the difference between stages and phases.

    I get that a stage works within the concept of a turn, i.e. that it retains the concept of the current player, and that a phase is a lot broader in scope, where you can change turn order, current player, etc.

    One unique thing that a stage provides that a phase does not on its own is the ability for other players to makes moves during the current player's turn, i.e. other players can make moves without modifying the value of the "current player".

    In fact, to me, this is the killer feature of stages - the ability to have more that one player making moves. I say this because if you take this feature out of consideration, then there's not much a difference between stages and phases, is there? Am I wrong about that?

    In particular, if you don't need the ability for other players to make moves on someone else's turn, then I imagine you can just treat phases like stages - especially if the phases all have a turn order of CONTINUE (i.e. the current player in the next phase is the one who ended the previous phase). With phases all having a turn order of CONTINUE, and if we don't need other players to make moves during the current player's turn, is there really a difference between phases and stages?

    7 replies
    Desmond Rivet
    Hello all. As far as I can tell there is no onBegin/onEnd for stages, is that correct? Has anyone ever found the need for that?
    3 replies
    Mike Sukmanowsky
    Hey all - have a bizarre issue trying to replicate the TicTacToe tutorial via NextJS/TypeScript and I oddly keep finding that my clickCell event handler doesn't actually update react state (though it does seem to update state seen in boardgame.io's debugger). Any obvious reason why this might happen? My code is all local, but here's a gist incase it helps https://gist.github.com/msukmanowsky/986fc87ccaa3879a878fef90718fa7bb
    2 replies
    How can I have access to the 'debug' property of the client in my views (i.e. React components) so that I could condition the display of some elements according to the value of this debug flag ? My current idea is to store this information in the game state but any other suggestion is welcomed ... Thank you for your help