CMS 4.0.0-rc2 released

We are pleased to announce release candidate 2 for the 4.0 version of Xibo. The codename for this version is “Westphal”.

20D/Westphal was a periodic comet with an orbital period of 61 years. It fits the classical definition of a Halley-type comet with (20 years < period < 200 years). It was originally discovered by the German astronomer J. G. Westphal on July 24, 1852.

4.0.0-rc2 is a development preview only and should not be used in production. We recommend testing this release with a fresh installation of Xibo.

Please note, due to an error during the release process, the release-4.0.0-rc2 Docker tag and release files report 4.0.0-rc1 as the version on login and about.

Earlier test releases working towards 4.0:

Feedback, Feedback, Feedback

This release candidate allows all users to test the v4 functionality we have included so far and provide feedback. This is a huge help to us in identifying bugs with new functionality or areas we ought to note for further improvement.

Feedback can be made in reply to this post where a member of the team will pick it up and ask for further details if required.


This release requires PHP 8.1 or later. We also recommend MySQL 8.

Please use the links below to download this release:

You can also get a 14 day trial of v4.0.0-rc2 using Xibo’s Cloud hosting.


The following beta test players are available to try with this release:

All latest v3 players (Android, Tizen, webOS and Windows) will communicate with a v4 CMS in legacy mode.


This release builds on the prior alpha/beta/rc releases, further refining the scheduling and layout editing experience.

  • Commands: multiselect displays to run commands
  • Dashboard: refresh the media manager dashboard with relevant information
  • Layout Editor: group elements
  • Layout Editor: pin/repeat data slots for elements
  • Layout Editor: preview playlists on the canvas with previous/next arrows
  • Widgets: dataset elements
  • Widgets: mastodon username filter
  • Widgets: PDF duration fixes
  • Widgets: various fixes to static templates
  • Various bug fixes

Content Synchronisation

The content synchronisation feature is available for beta testing on Android. The ideal configuration is a wired network connection, to the same physical switch, with identical devices. We hope to support different devices on networks which are “further apart” and will update these recommendations once we have further feedback.

We hope to bring this feature to webOS/Tizen and Windows players in due course.

Elements and “pin/repeat slot”

We have added an option to elements for pinning/repeating a data slot. Pinning a slot makes the first data item to appear in that slot stay there for the entire duration of that widget - it will not cycle with the others.

Repeating items to fill all data slots will ensure that you don’t have any empty slots in case you have 2 slots and 3 items (you will see items 1, 2 and then 3,1).

The pin slot options appears underneath the data slot:


And the repeat option can be found on the advanced tab.


Neither of these options are fully operational yet, and we will be updating them ahead of release.

4.0.0 is nearly here!

This will be our final release candidate before a stable release is available in due course!

Text and Shape elements are still not respecting the layers when a video is on the lower layer. In this pic, the video is on layer 1, and everything else is on layers above it, but the text and shape elements will not get in front of the video.

Elements placed directly on the layout have their own Canvas layer, which determines where they appear in relation to other natively rendered elements such as playlists and videos.

You can find this option by clicking on any element and opening the positioning tab:


We’re very conscious that you’re all having issues with layering, so we will introduce a layer panel before the stable release so that they are more easily managed/understood.

Yes, thats what I am talking about. In the picture every element has its own layer with the video being layer 1

Video - 1
Xibo Logo - 2
Shape - 3
Text - 4

As you can see, when a video is involved the layers don’t matter, I also noticed data elements seem to hide behind the video as well.

Also is there no way to loop video anymore? it played once and stops, no matter how long I set the duration for.

Hey Dan,

Apart from the fact that it took me a bit of effort to set up access for the user ‘cms’ to the ‘cms’ database (but that might be due to my tinkering installation ^^), my very first impression is that something is missing in the left menu (in the picture, the left side shows an older version, and the right side shows version 4.0rc2). I’m not a big tester for various options, just a humble behind-the-scenes admin, but I wanted to report that already. :slight_smile:


Thanks Albert - its missing on purpose. The about page can be reached via the user profile menu as before, and the handbook will appear on each page in the final release. Thanks for pointing it out!

I think you’ll find that the “Shape / Text” have a “Canvas Layer” of 0 moving all of those elements behind the video/image.

It looks like that checkbox isn’t being activated - we will look at that now!

1 Like

You were correct. I did not notice the canvas layer option. I was stuck and confused by the element layer. May I ask the difference between canvas and element layer? It looks like it moved the whole canvas forward. I am assuming the video is not rendered on the canvas.

1 Like

Sorry, this will be made much clearer with the layer panel.

That’s right - elements are rendered on the canvas, other things (static templates, video, web page, embedded, etc) are rendered outside. We had hoped to make images render on the canvas for 4.0, but we have run out of time and will do that for 4.1.

One of the more powerful things about Elements (which is perhaps a touch on the technical side) is that they are all rendered by the player in the same webview.

4 posts were split to a new topic: V4 calendar widget schedule not returning events

2 posts were split to a new topic: V4 release candidate closes on start

2 posts were split to a new topic: DataSet: two datasets update at the same time (v4?)

Below is our work in progress layer panel, designed to make it easier to select items completely covered by other items, and to see the duration of each item.

We have some adjustments still to make, but broadly this is what you can expect.


is the “10” a representative of the duration for that layer? It will be helpful to see the duration for each layer as I have layouts jump all over the duration time and spend a bunch of time digging into each layer looking for the cause.

Looking good, by the way.

1 Like

Yes it is, and it will be 00:00 format to make it easier to read.

1 Like

Hi, Thanks for the job !!

For information : With rss ticker i have this error :

GetResource Unknown error during getResource. E = Cache not ready

Usually this is because you don’t have the XTR task running operating correctly and therefore the Widget Sync Task (which warms up the cache) has not run.

1 Like

i just tried to upgrade to 4.0.0-rc2 in a local, docker-based test environment from 3.3.7.

The Migrations are failing with the following statement:

xibo-cms-web-1         | PDOException: SQLSTATE[23000]: Integrity constraint violation: 1451 Cannot delete or update a parent row: a foreign key constraint fails (`cms`.`lkwidgetmedia`, CONSTRAINT `lkwidgetmedia_ibfk_2` FOREIGN KEY (`mediaId`) REFERENCES `media` (`mediaId`) ON DELETE RESTRICT ON UPDATE RESTRICT) in /var/www/cms/vendor/robmorgan/phinx/src/Phinx/Db/Adapter/PdoAdapter.php:192
xibo-cms-web-1         | Stack trace:
xibo-cms-web-1         | #0 /var/www/cms/vendor/robmorgan/phinx/src/Phinx/Db/Adapter/PdoAdapter.php(192): PDO->exec()
xibo-cms-web-1         | #1 /var/www/cms/vendor/robmorgan/phinx/src/Phinx/Db/Adapter/AdapterWrapper.php(157): Phinx\Db\Adapter\PdoAdapter->execute()
xibo-cms-web-1         | #2 /var/www/cms/vendor/robmorgan/phinx/src/Phinx/Migration/AbstractMigration.php(199): Phinx\Db\Adapter\AdapterWrapper->execute()
xibo-cms-web-1         | #3 /var/www/cms/db/migrations/20220915100902_add_fonts_table_migration.php(92): Phinx\Migration\AbstractMigration->execute()
xibo-cms-web-1         | #4 /var/www/cms/vendor/robmorgan/phinx/src/Phinx/Migration/Manager/Environment.php(108): AddFontsTableMigration->change()
xibo-cms-web-1         | #5 /var/www/cms/vendor/robmorgan/phinx/src/Phinx/Migration/Manager.php(388): Phinx\Migration\Manager\Environment->executeMigration()
xibo-cms-web-1         | #6 /var/www/cms/vendor/robmorgan/phinx/src/Phinx/Migration/Manager.php(359): Phinx\Migration\Manager->executeMigration()
xibo-cms-web-1         | #7 /var/www/cms/vendor/robmorgan/phinx/src/Phinx/Console/Command/Migrate.php(122): Phinx\Migration\Manager->migrate()
xibo-cms-web-1         | #8 /var/www/cms/vendor/symfony/console/Command/Command.php(298): Phinx\Console\Command\Migrate->execute()
xibo-cms-web-1         | #9 /var/www/cms/vendor/symfony/console/Application.php(1040): Symfony\Component\Console\Command\Command->run()
xibo-cms-web-1         | #10 /var/www/cms/vendor/symfony/console/Application.php(301): Symfony\Component\Console\Application->doRunCommand()
xibo-cms-web-1         | #11 /var/www/cms/vendor/robmorgan/phinx/src/Phinx/Console/PhinxApplication.php(70): Symfony\Component\Console\Application->doRun()
xibo-cms-web-1         | #12 /var/www/cms/vendor/symfony/console/Application.php(171): Phinx\Console\PhinxApplication->doRun()
xibo-cms-web-1         | #13 /var/www/cms/vendor/robmorgan/phinx/bin/phinx(28): Symfony\Component\Console\Application->run()
xibo-cms-web-1         | #14 /var/www/cms/vendor/bin/phinx(119): include('...')
xibo-cms-web-1         | #15 {main}

Is this already a known problem?

Hi, yes we found that ourselves just the other day. Somehow your CMS has a font directly assigned to a layout (which is odd as that shouldn’t be possible).

We’ve adjusted the migration for 4.0.0, which will be released later today.


Thank you!
Looking forward to the release.
Is there a way to find the corrupted Layout and fix it (even if migrations are running then), maybe its better to keep the system consistent?

You could run some SQL to do that:

  FROM `lkwidgetmedia` 
 WHERE `mediaId` IN (
    SELECT `mediaId`
      FROM `media`
     WHERE `type` = 'font'
1 Like