The forum newsletter - Q1 2026
Posted: 03 April 2026, 10:48
Dear developers,
A number of changes have been introduced on the Studio and the BGA Framework since the last newsletter (sent in the end of 2025). If you missed it, you can find them here : end of 2025 newsletter.
This thread list all changes that have been make on the Studio and the BGA Framework side. We highly recommend you to read it, to know all the added or updated tools that are available. It should make coding of BGA games easier and faster
In green: information about migration, if you want to migrate an old game to the most recent ways
Studio
Auto-reload of gameinfos / gameoptions / stats
No need to click on the buttons on the manage game page anymore.
Framework
JS State classes
You can now declare JS State classes in a similar fashion to PHP class, allowing to cut the Game class into smaller pieces. Each JS State class will handle a matching state declared in PHP.
https://en.doc.boardgamearena.com/Game_ ... .js#States
Create state classes to and move the code from onEnteringState/onLeavingState/onUpdateActionButtons in it.
User preferences: toggleVisibility
You can now hide or show a user preference programmatically.
https://en.doc.boardgamearena.com/Game_ ... references
If you hid preferences accessing the HTML selects directly, use this new API call instead.
Player panels: getScoreCounter
API function to avoid direct access to BGA property scoreCtrl. https://en.doc.boardgamearena.com/Game_ ... s#Counters
Replace direct access to scoreCtrl by this function
Exception on warnings
There is a new flag exception_on_warning on gameinfos.inc.php to help detect bugs that are caused by undetected warnings.
Add 'exception_on_warning' => true to gameinfos.inc.php
Magic param in getAllDatas
If the getAllDatas function have a parameter int $currentPlayerId, it will be filled with the current player id automatically
Remove $current_player_id = $this->getCurrentPlayerId(); in your getAllDatas and add int $currentPlayerId as the parameter of getAllDatas. Note it now returns the correct (int) type.
New Tournament API
We've introduced a new API to the framework, to allow games to better integrate with BGA tournaments. We are hoping this will incentive developers to implement tournament-specific game features. For example:
forcing players to reuse the same deck (or any kind of player setup) for an entire tournament.
allowing all tournament encounters in the current step (semi-finals, ...) to use the same randomly selected map
https://en.doc.boardgamearena.com/Main_ ... A%A7_Beta)
Concede callback
Defining a onConcede function allows to execute code when a player concedes.
https://en.doc.boardgamearena.com/Main_ ... er_concede
Removing deprecated columns on player table
Player_canal and player_avatar are not populated anymore
Remove them from the game setup
Player elimination
The eliminatePlayer should be easier to use :
A new JS function getImgUrl is added when you need to get the URL of an image on the JS side (of course continue to use CSS whenever possible).
https://en.doc.boardgamearena.com/Game_ ... ge_loading
Replace usage of g_gamethemeurl to load images by this new function.
Result neutralization when a player quits
For some games, a player leaving the game doesn't necessarily mean the end game result should be neutralized, for example in roll & write games with no interaction between players. For that we added a new flag to allow the game to continue normally, see all details here:
https://en.doc.boardgamearena.com/Main_ ... ralization
Sounds preloading
Similar to what is done with the img folder, you can now have a sounds folder to store your sounds (you don't need to put the in the img folder anymore. Sounds in this folder will be preloaded automatically.
https://en.doc.boardgamearena.com/Game_ ... _directory / https://en.doc.boardgamearena.com/Game_ ... .js#Sounds
Move the sounds from the img dir to sounds dir and remove this.bga.sounds.load calls and <audio> tags you may have needed.
Fonts preloading
Similar to what is done with the sounds folder, you can now have a fonts folder to store your fonts (you don't need to put them in the img folder anymore). Fonts in this folder will be preloaded and declared automatically.
https://en.doc.boardgamearena.com/Game_ ... _directory
Move the fonts from the img dir to fonts dir and remove the associated @font-face declaration.
Other
MySQL 8
We are currently testing the migration to MySQL 8.4 on the Studio. The production is still in MySQL5, so keep your games compatible with both versions!
Game maintainance
If you like a game that is not maintained anymore, and you want to fix some bugs and/or modernize the UI (make it beautiful!), please contact the Studio support!
A number of changes have been introduced on the Studio and the BGA Framework since the last newsletter (sent in the end of 2025). If you missed it, you can find them here : end of 2025 newsletter.
This thread list all changes that have been make on the Studio and the BGA Framework side. We highly recommend you to read it, to know all the added or updated tools that are available. It should make coding of BGA games easier and faster
Studio
Auto-reload of gameinfos / gameoptions / stats
No need to click on the buttons on the manage game page anymore.
Framework
JS State classes
You can now declare JS State classes in a similar fashion to PHP class, allowing to cut the Game class into smaller pieces. Each JS State class will handle a matching state declared in PHP.
https://en.doc.boardgamearena.com/Game_ ... .js#States
User preferences: toggleVisibility
You can now hide or show a user preference programmatically.
https://en.doc.boardgamearena.com/Game_ ... references
Player panels: getScoreCounter
API function to avoid direct access to BGA property scoreCtrl. https://en.doc.boardgamearena.com/Game_ ... s#Counters
Exception on warnings
There is a new flag exception_on_warning on gameinfos.inc.php to help detect bugs that are caused by undetected warnings.
Magic param in getAllDatas
If the getAllDatas function have a parameter int $currentPlayerId, it will be filled with the current player id automatically
New Tournament API
We've introduced a new API to the framework, to allow games to better integrate with BGA tournaments. We are hoping this will incentive developers to implement tournament-specific game features. For example:
forcing players to reuse the same deck (or any kind of player setup) for an entire tournament.
allowing all tournament encounters in the current step (semi-finals, ...) to use the same randomly selected map
https://en.doc.boardgamearena.com/Main_ ... A%A7_Beta)
Concede callback
Defining a onConcede function allows to execute code when a player concedes.
https://en.doc.boardgamearena.com/Main_ ... er_concede
Removing deprecated columns on player table
Player_canal and player_avatar are not populated anymore
Player elimination
The eliminatePlayer should be easier to use :
- if you throw an exception after eliminating a player, you won't have a elimination status out of sync
- you can now eliminate the active player, as long as he's not active anymore at the end of the action that triggered it
- you can now eliminate all the players, as long as at the end of the action you are at state 99 (the framework will jump to it if you didn't)
A new JS function getImgUrl is added when you need to get the URL of an image on the JS side (of course continue to use CSS whenever possible).
https://en.doc.boardgamearena.com/Game_ ... ge_loading
Result neutralization when a player quits
For some games, a player leaving the game doesn't necessarily mean the end game result should be neutralized, for example in roll & write games with no interaction between players. For that we added a new flag to allow the game to continue normally, see all details here:
https://en.doc.boardgamearena.com/Main_ ... ralization
Sounds preloading
Similar to what is done with the img folder, you can now have a sounds folder to store your sounds (you don't need to put the in the img folder anymore. Sounds in this folder will be preloaded automatically.
https://en.doc.boardgamearena.com/Game_ ... _directory / https://en.doc.boardgamearena.com/Game_ ... .js#Sounds
Fonts preloading
Similar to what is done with the sounds folder, you can now have a fonts folder to store your fonts (you don't need to put them in the img folder anymore). Fonts in this folder will be preloaded and declared automatically.
https://en.doc.boardgamearena.com/Game_ ... _directory
Other
MySQL 8
We are currently testing the migration to MySQL 8.4 on the Studio. The production is still in MySQL5, so keep your games compatible with both versions!
Game maintainance
If you like a game that is not maintained anymore, and you want to fix some bugs and/or modernize the UI (make it beautiful!), please contact the Studio support!