Page 1 of 1

The forum newsletter - Q1 2026

Posted: 03 April 2026, 10:48
by thoun
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 :
  • 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)
function to get an image url

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!