Showcase 26.x release notes
Showcase 26.09.6
Released September 2026
This release fixes three problems authors ran into when building content: content items can be duplicated again and a duplicated content set keeps its items, widgets created from a slot or duplicated in the Widget Library now appear and can be edited, and a newly added item opens straight away with its file or URL field.
Bug Fixes
- Content items can be duplicated, and a duplicated content set keeps its items — a content item's menu in a Content Set now offers Clone, which copies the item, or a folder with everything in it, and selects the copy. Duplicate on the Content Sets page previously created an empty set; it now copies every item. A widget item's copy has its own settings, so changing one does not change the other; a widget placed from the Widget Library stays linked to its library entry.
- Create new and Duplicate in the Widget Library create widgets you can see — choosing + Create new… for a slot created a widget that never appeared, so nothing opened and the slot stayed empty. The new widget now opens for editing in the Widget Library and is added to the slot when saved. Duplicate and Copy to a structure in the Widget Library now produce a visible widget as well. The name prompt now reads "Create New Widget".
- A newly added item opens straight away — Add Widget, adding from the library, New Folder and new content in a Content Set added the item at the bottom of the list with nothing selected, so it looked as if nothing, and no file or URL field, had been added. The new item is now selected and scrolled into view, with its settings open.
Showcase 26.09.5
Released September 2026
This release restores email through the built-in MultiTaction relay, keeps a Personal Space's items on the wall after they are emailed and lets a visitor email a single item by dropping it on the envelope, lets authors put decorations such as a title bar on Cloud items, and gives every new app an Email service and a Data Gatherer from the start.
New Features and Improvements
- Cloud items can carry decorations — the Cloud widget has two new slots, In-cloud decorations and Expanded decorations. Widgets placed in them, such as a title bar showing the item's name, appear on every item while it sits in the cloud and on an item that has been dragged out, configured separately. Both slots are empty to begin with, so existing showcases look exactly as before, and a change to either slot reaches a running wall without a restart. Title bars and name bars are the supported use; annotation and interaction overlays rely on toolbar buttons the cloud hides.
- Drop a single item on the envelope to email only that item — in a Personal Space, releasing a tile with its center on the envelope emails just that item; tapping the envelope still sends everything. The tile snaps back into place afterwards. If no address is known yet the drop asks for one, exactly as a tap does, and the address entered sends only the dropped item; Cancel forgets the drop. Items still uploading or awaiting approval are ignored, and nothing is sent if the item leaves the space before an address is entered.
- A new app starts with an Email service and a Data Gatherer — creating an app in the App Launcher gave it an empty service set, so the new app could not email a Personal Space or gather data until both services were created by hand under Services and the sender name, subject and message typed in again. A new app now arrives with both, named after the app and filled in with the standard settings, ready to be edited. Apps brought in with an import keep the services in the archive.
Bug Fixes
- Email through the built-in MultiTaction relay works again — Personal Folder "email to me" and the email popup could not send through the built-in relay: the wall reported failed to send contents to your email, please contact the system administrator and the player logged a login failure. The player offered the relay a login method it does not accept; it now logs in with the method the relay, and virtually every other mail server, supports.
- Emailing a Personal Space no longer empties it — after a successful email the Personal Space on the wall cleared itself, which made the items look deleted although the person's folder on the server still held them and they returned the next time the marker was placed. The space now shows that the email was sent and keeps every item in view.
Showcase 26.09.4
Released September 2026
This release brings Widget Triggers to Codice: a card placed on the surface opens the content authored for it — widgets around the card, widgets at fixed places, or a menu — as 1.14's Codice content markers did, and a trigger can belong to one app so the same card number does different things in different apps. It also stops the player crashing when it closes, keeps each visitor's Personal Folder content with them through an export and import, and stops every server restart from leaving unused records behind.
Please note: a Codice marker is potentially renumbered when it is imported, if its card number conflicts with an entry already in the Codice DB. Identical duplicates are merged instead; any other conflicting marker is given a new number (a digit is added in front, for example 612 becomes 1612), and its printed card will not work until the number is fixed in the Codice DB. Markers that do not conflict keep their numbers. The Import Wizard lists every renumbered code. The same check runs once on upgrade, where it can affect markers that two apps had imported under the same number, and the editor then shows a banner with a report of any changes. On upgrade, 1.14 markers with Codice content also become Widget Triggers.
New Features and Improvements
- Widget Triggers work — a Widget Trigger is no longer marked Coming Soon. Placing its card launches the content authored for it, edited with Edit trigger content exactly like a Structure: widgets that appear around the card, widgets that appear at fixed positions, or a menu that opens at the card.
- A trigger can fire once or while the card is present — Fire and Forget leaves the content open after the card is lifted; Hold closes it when the card is lifted. A trigger can instead launch its content when the card is lifted, and its content can move with the card.
- The same card can do different things in different apps — a Widget Trigger is either Global, firing in every app, or belongs to one app. App-specific triggers in different apps may share a card number; a number used by a Global marker cannot be reused. Every other marker type is Global, and the code field in the Codice DB names the marker already holding a number and whether it is Global or belongs to an app.
- Imports never overwrite a marker — a marker whose number is already taken is merged when it is identical to the existing one, and otherwise given a new number. The Import Wizard lists every renumbered and merged code. Importing a 1.14 showcase turns its markers with Codice content into Widget Triggers.
- A folder dropped on a slot asks what to build — dropping a folder onto a Structure slot offers the widgets that can be built from it (Image Movie, Video Carousel, Item Cloud, Teaser Menu, Finger Menu, Rotating Menu or Group), limited to what the slot accepts. Cancel creates nothing, and a build that fails removes exactly what it created and says why.
- Content Set items accept widgets in their slots — an item's Toolbar, Decorations, Behavior operators, Menu content operators and Sound effects slots offer Add Widget and accept drops, as the same widget does under Structures.
- Bulk removal explains itself — Remove all from an imported archive shows how many items it removes, explains what it does, names the count and the archive in its confirmation, and keeps any item that is still in use, as a single delete does.
- The Launcher Menus and Teaser Animations demos work — tapping a Launcher Menus tile opens its menu, and the Teaser Animations launchers produce teasers again.
Bug Fixes
- The player no longer crashes when it closes — closing the player could end in a crash after it had finished shutting down, leaving a crash report behind each time. A connection handler registered by the Codice input service was called after the service had been unloaded; it is now released first, and the player closes cleanly.
- An imported personal marker keeps its own content — exporting and importing a showcase left each personal marker pointing at whatever content happened to share its internal number on the new server, so a visitor could see, and add uploads to, someone else's Personal Folder, or find their own empty. A personal marker's content now travels with the export and is linked to its own copy on import; where the content was not in the export, the marker gets a fresh, empty folder and the import says so. Exports that include the Codice DB are larger as a result.
- Server restarts no longer leave unused records behind — every restart replaced each Defaults set's text viewer setting with a new one, leaving the old record unused and returning customized text viewer settings to their defaults. Restarts now leave them alone, and the unused records already created are removed once on upgrade.
- A Widget Trigger from an older editor no longer breaks — older editors could save a trigger with the name of a saved widget instead of a widget type, which the player could not create, so the card did nothing. Such a trigger now arrives with empty content that can be filled in, and the upgrade report names it.
- The Widget Library no longer fills up at every start — imported toolbars and menus were added to the Widget Library again on every server start. They are now added once; entries already added can be removed from the library.
- Changing a pinned widget's size takes effect immediately — a live size or position change on a pinned widget kept its old size and a shifted position until the player was relaunched.
- MT Launcher starts Showcase on current appliances — Showcase's launcher entry also started an audio service that current appliances no longer have, so MT Launcher discarded the whole entry. It now starts only Showcase.
- The start-up check of stored assets works again — it reported every asset as failed and gave no reason. It now reads asset addresses correctly.
- The server's recovery commands keep working when a plugin is broken — the command-line recovery tools, such as resetting or unlocking a user, no longer stop when a plugin's settings file is damaged.
- Reverting a PDF's viewer shows the effective choice — after revert to default, the Book and Flow toggle shows the viewer that will actually be used.
Showcase 26.09.3
Released September 2026
A maintenance release for everyone on 26.09.2, and a required upgrade for anyone who installed the interim build 26.09.2.1402 from the update feed: that build removed content items' viewer choices at its first restart, and this release stops it. It also makes Personal Folders keep what a visitor collected from a menu, completes the Widget Library's linking, and closes eight faults found in a full test pass of the 26.09.2 features.
New Features and Improvements
- Saved widgets stay linked in more places — placing a Widget Library entry only kept the link when the slot it went into happened to share a name with the widget's own type; anywhere else it was copied, so library edits stopped reaching it and it never appeared under Used in. Placement now keeps the link wherever a slot can hold one, and the same saved widget can be linked into several differently-named slots. Existing copies are left exactly as they are. Please note: widgets placed into a layer — the main area, a menu, an overlay, a background, or a group's contents — are still copied; those hold a list of widgets rather than a single setting, and linking there is being worked on separately.
- A scan station's test panel plays the lottery — Fire test marker on a Codice Input service now behaves as a real scan: it reports a lottery loss or a win, respects the cooldowns, and appears in the scan feed. With Test mode on, a fire is a rehearsal that consumes no prize, so a limited draw can be tried before the real one.
- Content Set browser items offer their address and a schedule — a web browser item in a Content Set now shows its URL and its Schedule slot, exactly as the same widget does on a Structure.
Bug Fixes
- A server restart no longer removes a content item's chosen viewer — build 26.09.2.1402 introduced a start-up clean-up that deleted per-item viewer choices, such as a PDF set to open as a page flow, because it mistook them for leftovers of deleted apps; after the first restart those items vanished from the menus that showed them. The clean-up has been removed and the tidy-up on app deletion now recognizes every place a viewer can be referenced from. If you installed 26.09.2.1402: viewer choices lost at that restart do not come back on their own — set them again on the affected items, or restore the automatic backup the installer took before upgrading.
- A Personal Space keeps what was collected from a menu — collecting a PDF, picture or video that had been opened from a menu stored an empty widget, so reopening it from the space showed nothing, while the same file collected from a widget placed directly in the showcase worked. Every collect now stores the document itself with the widget. Items collected before this release are unaffected either way; collect them again to pick up the fix.
- Collecting an annotated PDF works on an HTTPS-only server — the wall sent the annotated document to the address configured for attendees' phones, which on a fresh installation defaulted to a plain-HTTP address nothing listened on, so the upload failed silently. The wall now uploads to the server it is connected to, and the attendee address stays unset until an administrator enters one in Network Settings, which shows the address in use as a hint.
- A widget whose picture or video never appeared now shows it — an asset could be stored with its address wrapped in quotation marks twice over; the player removed one set, looked for a file whose name still began with a quotation mark, found nothing and said nothing. The player now reads the address whatever way it was stored, so affected widgets start working on upgrade with no change to the showcase.
- Dropping a picture onto an existing viewer stores it correctly — a drop onto a widget row wrote the file's address in a form the player cuts short at the first space, so an image in a folder with a space in its name never appeared on the wall although the editor showed it. The widget created by a drop above or below a row was also named after the path rather than the file. Both now behave like a drop onto a layer.
- Theme values from an imported showcase show on the Structures page — for themes that came in with an older showcase, a widget's settings panel could not see the theme's values until the next server restart, and read From widget default while the wall applied the theme correctly. The panel reads those values immediately, and an import files them the same way the editor does.
- Changing which widget fills a slot in a Defaults set saves — rebinding a row such as Decorations — footer showed Saved but the server had skipped the write, so the old binding came back on return. These values are stored now, and an unrecognized setting is reported as an error rather than dropped behind a success message.
- A Defaults set shows values stored under a slot inside a slot — a value such as the close-after-idle operator of a floating menu's content had no row on the Defaults page and could be neither seen nor changed. Such rows are now listed with the full path they belong to.
- Adding the same widget to the Widget Library twice no longer creates two entries — the library now recognizes the widget it already holds and says so.
- Deleting an app leaves nothing behind — each app deletion left the viewer settings of its Defaults set orphaned in the database, where they accumulated over time. The deletion now clears them.
- A rare crash during start-up is fixed — messages logged in the first moments of a launch are held in a queue that several threads could write to at once; two writing together could corrupt memory and bring the process down. The queue is now locked.
Showcase 26.09.2
Released September 2026
A quality release across the editor: creating an app now sets it up completely, app scheduling works from a fresh installation, content boundaries are checked as you type and hold teaser menus inside them, and a saved widget placed from the Widget Library is one widget used in many places rather than a fresh copy each time. Scan stations gain a lottery of their own.
New Features and Improvements
- Creating an app sets it up — a new app arrived with no structure, no Defaults set and no service set, so three more things had to be created and attached by hand. Creating an app named Reception now also creates a structure, a Defaults set and a service set of the same name and binds all three to it. Where a name is already taken the new item is numbered, and creating an app whose name is already in use is reported clearly instead of failing with a technical error.
- One widget used in many places — placing a saved widget from the Widget Library used to duplicate it, so three showcases using the same menu meant three separate widgets and changing the saved one changed none of them. There is now one entry, a Used in column names the apps that use it as links, and changes to the library entry reach the places that use it. Editing a placed widget makes it that showcase's own and it stops following the library; widgets still following are marked. Deleting an entry still in use is refused, naming the apps and Content Sets using it. Existing duplicate entries can be merged by an administrator, who reviews the proposed merge first.
- A scan station can run a lottery of its own — barcode and RFID stations offer a lottery with a win chance, a winner limit, a restriction to particular codes, and separate cooldowns after a win and after a loss. Off by default; losses are recorded in analytics and shown in the station's live test panel.
- Content boundaries are checked as you type — a boundary written without its outer brackets, as an empty list, with an incomplete zone or with a zero-sized zone used to be accepted, saved and quietly discarded. These are refused as you type, naming the zone at fault, and the setting's description states the format.
- Teaser menus respect content boundaries — a boundary set on a teaser menu limited only the menu's spawn area, so the teasers carried on across the whole wall. They now stay inside the boundary and turn back at its edge instead of gathering in a corner. Menus with no boundary set behave exactly as before.
- A widget can be dragged into a group in a Content Set — groups accepted widgets through Add Widget but refused them when dragged; a group now accepts by drag exactly what it accepts through Add Widget.
Bug Fixes
- App scheduling works — on a new installation there was no schedule for events to belong to, so Create Event appeared to do nothing; installations with a schedule could edit only the first one; and a failed save closed the dialog, discarding what had been typed. A schedule exists from the start, the page edits the selected schedule, and a failure is reported with the dialog left open.
- Changes made in a Defaults set are shown again when you return — a changed setting was saved and applied on the wall, but reopening the page showed the recommended value, so there was no way to tell a deliberate choice from an untouched setting. Repeated edits made while this was wrong wrote the same value; only one is stored.
- The Widget Trigger's list of widget types is populated again — it was being built from the saved widgets in the Widget Library rather than from the widgets Showcase provides, so it was empty on a new installation.
- Help text describes the setting you are looking at — settings sharing a name across widgets showed one widget's description on all of them. Three actively misled: an Enabled setting described as switching a lottery, a Source setting telling authors to drag a PDF in even on web-address items, and a rotation setting stating the opposite of what it does. Each now shows its own description.
- Feature status labels are accurate — Integrations is marked Coming Soon while its terminology is revised; the Loupe is no longer marked Beta; and the Codice marker-type list is wide enough to show a type's name and its status together, so a type under development no longer reads as finished for want of room.
- The personal folder page is labeled in plain English — the page a visitor reaches from their Codice marker labeled its fields with internal names such as firstName; every field now reads normally.
Showcase 26.09.1
Released September 2026
The headline of this release is NDI. A wall can now send its display over the network as an NDI stream, and NDI streams on the network appear as video inputs alongside cameras and capture cards — so Showcase can feed a broadcast mixer or a recorder without a capture card, and can show a live feed from another machine without one either.
It also completes Personal Folders. A visitor carrying a CODICE marker has a folder that follows them: what they collect from the wall is kept as the widget it was rather than a picture of it, is still there the next time they present the same marker, and can be reviewed and downloaded afterwards from a web link.
Showcase is available for macOS on Apple silicon for the first time, and the server ships a documented command-line tool on every platform for the administration tasks that previously needed the web interface.
Please note: this release repairs a fault that made themes ineffective on every installation running the current server. Theme values were being saved and displayed correctly but were never read by the player, so each widget fell back to its own built-in settings and the app's theme had no effect on the wall. Anyone who compensated by setting values on individual widgets keeps those values; the theme now applies to everything that was left alone, so some walls will look different after upgrading — as they were always meant to.
New Features and Improvements
- Send the wall over the network as NDI — a window can now carry one or more NDI outputs, so what is on the wall can be taken into a broadcast mixer, a streaming encoder or a recording system with no capture card in between. A window can also be marked virtual, in which case it renders off-screen purely to feed its outputs: mirroring a physical display therefore costs nothing extra, because the visible wall is untouched and the stream is produced alongside it rather than by duplicating the window. Outputs are configured per window in the screen configuration.
- NDI streams are available as video inputs — a live NDI feed on the network can be placed in a showcase and played like any other video source, alongside capture cards and cameras. Sources are discovered automatically and picked by name, so a presenter's laptop, a broadcast source or another Showcase wall can be shown without capture hardware.
- Personal Folders keep what a visitor collects — a visitor carrying a CODICE marker has a personal folder that follows them. Items are collected by dragging them out of a showcase and into the personal space, and the whole widget is kept rather than a flat picture of it, so an item reopens as the thing it was: a document at the page it was left on, a video, a web page. Collecting the same item twice does not create a duplicate. What was collected is still there the next time the same marker is presented, including after the player is restarted.
- The personal space matches the folder behind it — the space shows its content one-for-one and updates live as items are added or removed, so what a visitor sees is what has actually been kept. Items can be rearranged, and removed again through a dustbin.
- Annotate on the wall, and keep the annotation — documents and images can be annotated where they are, and an annotated document is kept with each annotation on the page it belongs to. Collecting an annotated document keeps what was drawn on it.
- Visitors can take their folder away — a personal folder can be reached by a web link, so a visitor can review and download what they collected after they leave. The link persists, so it can be printed on a card or shown as a code.
- Showcase runs on macOS — Showcase is available for macOS on Apple silicon as a signed installer, having previously been Ubuntu and Windows only.
- A documented server command-line tool on every platform — the administration tasks that needed the web interface — creating and listing users, resetting a password, inspecting server state — are available from the command line. This matters most when the web interface cannot be reached: a locked-out administrator account, or a machine being prepared before anyone can sign in.
- A theme is always complete — every setting a theme can carry now has a value in it, either the one chosen for this theme or the recommended value behind it, so there is no longer such a thing as a setting a theme has no answer for. This removes a confusing class of problem, where a widget behaved unexpectedly because nothing had ever been set for it and the omission was invisible. Settings a theme sets itself are marked as changed, so it is clear at a glance which values were chosen deliberately; clearing a changed setting returns it to the recommendation. Recommended values are shared rather than copied into each theme, so a corrected recommendation reaches every theme.
- Structures, Content Sets, Defaults sets and saved widgets can be renamed — several of these could be created and duplicated but never renamed, so a duplicate kept the original's name with a suffix and there was no way to correct it. Rename is now offered from the same menu as Duplicate and Delete.
- Widgets that are looked at, not used, are Passive Widgets — backgrounds, decorations and overlays are grouped as Passive Widgets and placed the same way as any other widget, replacing the separate toolbar and decoration slots with their own rules. Existing showcases are unaffected: what was in those slots continues to appear where it did.
- Slots are quicker to fill — a slot can be filled from a searchable grid of toolbar buttons rather than a plain list, the quick-select for a slot picks the right thing, and the default toolbar is restored where it had gone missing.
- Dragging in the trees lands where it is aimed — assets can be dropped between rows to sit at a chosen position, the drop marker shows exactly where an item will go, the depth of a drop follows the cursor, and a drop no longer opens the row it passed over.
- "Used in" names the widget and the app — wherever the editor says something is used elsewhere, it now names the widget and the app and links to them, for Content Sets, Defaults sets and Widget Library entries alike.
- The jog wheel scrubs like a physical one — rotation maps to a position in the clip rather than nudging it, a virtual cursor shows where the scrub has reached, lifting the wheel pauses, and playback speed follows the rotation down to a tenth of normal. The wheel no longer starts or stops playback on its own.
- An IR Sensor View background — shows what the wall's sensors are seeing, so touch coverage can be checked and interference diagnosed on site without separate tools.
- The Loupe captures the background too — what it magnifies now matches what is on screen, and its diameter setting is honored.
- Projector walls can blend their seams — the screen configuration can describe the overlap between neighboring outputs and the blend across it, and on NVIDIA professional graphics the player applies that blend in the graphics card on Windows and Linux. Off unless the configuration asks for it.
Bug Fixes
- Theme values reach the widgets they apply to — a theme sets how widgets look and behave across an app: size, pinning, rotation, and the toolbar and decorations each widget carries. Those values were saved correctly and shown correctly in the editor, but the player never read them, so every widget fell back to its own built-in settings and the app's theme was in effect ignored. There was no error and nothing to see — the theme simply had no effect on the wall. Themes imported from older showcases were unaffected and continue to work as before. Please note: anyone who compensated by setting values on individual widgets keeps those values, and the theme now applies to everything that was left alone, so a wall may look different after upgrading.
- Content Set items offer the whole widget's settings — an item added to a Content Set is the widget it is: a PDF is a PDF viewer, a web address is a browser. The editor was offering only the few fields common to all content, so size, position, source and the viewer's own options could not be reached from the Content Set at all, while the same widget added to a Structure showed everything. Both now show the same thing.
- The Widget Library holds only widgets that were saved to it — adding items to a Content Set was quietly adding them to the library as well, so it filled with entries nobody had saved and the widgets deliberately kept there became hard to find. Existing libraries are tidied on upgrade: genuinely saved widgets are kept, and entries that only ever appeared because of this are removed from the library. Nothing is deleted from the showcases using them.
- The Widget Library is no longer listed as a Structure — the library's own container appeared in the Structures list, the App Launcher and the export picker as though it were a structure that could be run.
- The Media Library separates managed folders from imported content — the folders Showcase manages itself — Live Inputs, URLs, and personally collected assets — are grouped at the top, apart from imported content. The URL folder also no longer opens expanded, so the library opens on the content that was put there rather than on a long list of web addresses.
- A setting saved onto a widget stays marked as set — after saving, a value pinned onto a widget went back to displaying as though it were inherited from the theme. The value itself was stored correctly and the wall used it; only the editor misreported where it came from, and it corrected itself when the page was reloaded.
- Looped videos restart, including very short clips — a clip of a second or two set to loop could stall at the end of its first pass, because the restart was timed from the clip's declared length rather than the last frame shown. Short loops now play continuously.
- The ripple touch effect keeps its size on custom screen configurations — where the configured rendering size differed from the physical pixel size, the effect under a finger came out the wrong size and in the wrong place.
- Closing the player no longer hangs when the graphics driver has stalled — shutdown used to wait without limit for a rendering thread stuck in the driver, and the watchdog then ended the process the hard way. It now gives up waiting after a bounded time and exits cleanly.
Showcase 26.08.3
Released August 2026
An update recommended for all multi-GPU video walls, which again distribute rendering across every installed GPU. It also repairs the App Switcher, so a designated app actually opens instead of the Welcome screen, completes the URL Library with deletion and drag-and-drop, and makes spreadsheet import reject cells that are not web addresses rather than cataloguing them silently.
For installations using CODICE, a jog-wheel card's rotation now sets playback speed and no longer starts or stops playback, the calibration offsets authored against each card are finally applied, and the admin-override card builds the toolbar and title it always promised. The Loupe no longer draws every object twice inside its rim. Authors gain drops that land between tree rows at the level they point at, Content Set items that open up like Structures, and a toolbar composed from a grid of buttons.
Please note: widget groups no longer carry a toolbar or decorations, and the settings that only applied to a drawn surface — Pin widget, Open in fullscreen, Visible name and Content name — no longer appear on them. Nothing on the wall changes and no showcase is rewritten, because both slots were already inert; see the entry below for the detail.
New Features and Improvements
- Multi-GPU video walls now use all installed GPUs — on walls with more than one graphics card, rendering load could be carried entirely by the first GPU while the others sat idle. On Windows, this release fixes a regression present in builds since late 2024: each configured window's render context is now bound to the GPU that drives its displays. This requires Quadro-class GPUs and one window per GPU, each placed fully inside its GPU's desktop area; a Windows multi-GPU wall verification is in progress. On Linux, no code change was needed — rendering distributes across GPUs when the wall is configured with one X screen per GPU and one window per X screen (
screennumberper window), verified end-to-end on a two-GPU, five-display wall on 2026-08-10. Large multi-GPU walls get correspondingly higher headroom for rich content. - Drag a web address straight onto a slot — a URL Library entry or a Hosted Site can be dragged from the Media Library onto a slot to create a Web browser widget already pointing at it, instead of creating the widget and then typing the address into it.
- URL Library entries can be deleted — entries can now be removed, which previously was not possible at all. The confirmation names the Content Sets that will be detached by the removal, so what the deletion affects is clear before it happens.
- Choosing what a menu item is — creating a menu item where the role allows several component types now asks which type to create, rather than always producing a bubble that then had to be replaced by hand.
- Site uploads report their progress — uploading a Hosted Site now shows progress while it transfers and states the outcome when it finishes, instead of leaving the page apparently idle with no indication of success or failure.
- The shared-widget list is grouped by type — the dropdown for choosing a shared widget groups entries by type, matching the arrangement already used in the Widget Library.
- A CODICE card's rotation now sets playback speed — turning a jog-wheel card on the surface changes how fast the video plays, while sliding it continues to scrub the timeline. Rotation is measured from where the card was put down rather than from the marker's absolute orientation, so placing a card never changes the speed by itself, whatever angle it happens to land at. Turning past the maximum does nothing rather than banking rotation you would have to unwind before the speed responded again. Please note: the jog wheel no longer starts or stops playback under any circumstance. Placing a card, lifting it, or losing sight of it previously all paused whatever the card was over; the wheel now scrubs and sets speed, and play and pause remain yours alone. The default minimum speed has also moved from 1% to 10%, because 1% was indistinguishable from the player's own protective floor — existing cards keep the speed you set, and only newly created ones take the new default.
- Widget groups no longer carry a toolbar or decorations — a widget group is a transparent container that draws nothing of its own, so a toolbar had nothing to attach to and a decoration had nothing to decorate. Both slots are gone, together with the settings that only meant anything on a drawn surface: Pin widget, Open in fullscreen, Visible name and Content name. The group's Name is untouched and still labels it in the editor tree. In their place a group gains Passive Widgets, a slot for children that belong to the group without taking part in its logic. Please note: nothing on the wall changes and nothing in your showcases is rewritten. Both slots were already inert — a group carrying a toolbar has never rendered one — so an existing group behaves exactly as before, simply without building a widget that was never shown. The removed settings stop appearing in the editor for groups.
- A new IR Sensor View background — a background component showing what the touch tracker sees through its infrared cameras, with optional thermal or two-color palettes, sensor grain and a camera-tile grid. Where the tracker supports image streaming it shows the real feed; on any other hardware, including non-MultiTaction touch screens, it reconstructs an equivalent view from touch input, so it works as a screensaver anywhere.
- A second player can be started from the applications menu — right-clicking the Showcase launcher now offers New Window. A normal click still raises the player you already have open, which is why starting a second one previously had no route through the desktop at all.
- Assets can be dropped between rows, and into the level you point at — dropping an asset into the structure tree used to highlight a row and make the new item a child of it, so the only way to land something in the main layer was to drop it on whichever row happened to be at the top. A drop can now target the gap between two rows, and how far left or right you hold the pointer chooses which level the item joins — the same gesture the tree already used for moving things, so dragging something in and dragging it around now behave alike. The insertion line shows the level that will be used and the row that will become the parent identifies itself.
- The toolbar is authored from a grid of buttons — toolbar buttons are chosen from a grid of what is available rather than a dialog opened one button at a time, and every slot that holds widgets now lists what is actually in it. Please note: the dropdowns previously shown on those slots never worked — a choice made in them was accepted and then silently discarded — so nothing that used to work has been taken away.
- Content Set assets can be given behavior settings — an asset in a Content Set offered no behavior slots at all, so it could not be given a size limit, snap-to-angle, close-after-idle, sound effects or a toolbar. Those settings are now available on it.
- Content Set items open up the way Structures do — an item in a Content Set now expands to show its slots, exactly as the same widget does under Structures, so whatever is attached to it can be seen and edited in place. A PDF also gains an explicit choice between the Book and Flow viewers, directly below its Visible Name.
- The Content Set editor has the Structures page layout — the Content Set tree sat in a fixed narrow column that truncated ordinary names to "Meeting Ro…" while the editor pane beside it sat empty. It now has the resizable tree column and the breadcrumbs that the Structures page has always had.
- "Used in" names the apps an override affects — the content editor lists, at the foot of the panel, the apps actually affected by a content-node override, rather than leaving you to work back from a theme name.
- Scrubber, volume and admin-override markers are no longer marked "coming soon" — these marker types work, and are now offered as available.
- The right-click menu has been removed — the editor is a touch interface. Every action it carried is on the "…" menu on each row, which is also where the ordering and placement fixes had been landing.
- New items land where you are working — creating a Content Folder, adding a widget, or adding one From Library always created at the top level of the Content Set, and then appeared at an apparently arbitrary point partway down the list rather than where you were. All three now place the new item relative to what you have selected: inside a selected folder, or directly beneath whatever else was highlighted. With nothing selected they go to the end of the set, as before. Each button also names its destination — Create a Content Folder in Brochures — so where the item will land is visible before you press it. Please note: the New Content button has been removed from the same toolbar. It offered every content type unfiltered, so it duplicated the controls beside it — a Folder is New Folder, a widget is Add Widget, and a file arrives by dragging it from the Media Library. The only thing unique to it was creating a URL, and dragging a URL Library entry or a Hosted Site onto the tree already does that with the address filled in.
Bug Fixes
- The App Switcher opens the app you designated — a run configuration chosen as the App Switcher's target was never found, so the wall fell back to the Welcome screen no matter which app had been selected. The setting stored the configuration's internal identifier while the switcher looked its target up by name, so the two never matched. The switcher now resolves either form, and existing installations keep working untouched. The None (Welcome screen) option that the setting's own help text described is also now present and selectable, having previously been unreachable.
- Spreadsheet import rejects cells that are not web addresses — importing a CSV into the URL Library now reports a cell that is not a web address as an error instead of adding it to the library. Previously any single word — a stray header cell, or half of a row split by a rogue comma — was taken as the host name of a made-up address and cataloged exactly as typed, while the import summary reported "0 with errors" over the top. A cell is imported now only when it is evidently an address: it carries a scheme (
https://example.com/page), its host contains a dot (example.com), or it names a port explicitly (intranet:8080). Anything else appears in the import preview as an error row, with its line number and the text of the cell, before anything is written. Please note: an intranet host with a single-word name, such aswiki, is consequently no longer imported when written on its own, because nothing in that cell distinguishes it from a typo; writing it ashttp://wikiorwiki:80imports it exactly as before, and the error row in the preview says so. Adding a URL by hand with "+ URL" is unchanged and still acceptswikias typed. - A malformed address is explained rather than dumped — entering an address the editor could not use reported the failure as raw technical data instead of a sentence, leaving an author nothing to act on. The reason is now stated plainly.
- Migration receipts can be read — the summary produced when content is migrated on upgrade appeared in a notification too small to hold it, which disappeared before it could be read. It is now presented as stacked banners that stay until dismissed.
- Dropping media onto a layer works — media dragged from the Media Library onto a layer failed to land. A drag held over a row also no longer collapses that row, which used to hide the intended destination mid-drag.
- The duplicate Size field on Video Carousel is gone — the Video Carousel showed two Size fields, only one of which had any effect. The one that did nothing is no longer shown.
- Saving a new widget is reachable again — creating a widget from a slot and then editing any of its settings grayed out the dialog's Save button about a second later, and that Save is the step that binds the new widget into the slot. The binding was therefore unreachable: the widget was created but never attached, and re-opening the dialog and pressing Save did nothing either. Save now stays available, the dialog states when changes have been saved and offers to revert them, and completing it attaches the widget to the slot as intended.
- Settings no longer show a value the wall does not use — numeric settings left unset were pre-filled with a number taken from the component's specification, which the wall does not necessarily apply, so a field appeared to hold a value that was never in force. Unset fields are now shown empty with that number offered as a grayed suggestion, labeled Recommended rather than Default. Clearing a field returns it to that state and it stays cleared when the page is reloaded. Please note: selecting the recommendation now clears the setting so it follows the theme, where previously it wrote that number into the widget. Anyone who used it to pin a value against a theme will need to type the value instead.
- Slot help text appears — the explanatory text for a slot was matched by its displayed name, so it almost never appeared. Slots whose display name differs from their internal name now show their description.
- A sequence group follows the order you set — in a widget group set to Sequence, the order of the steps was read from how the widgets were currently stacked on screen rather than from the order authored in the editor. Pressing a trigger could restack it and so silently renumber the sequence, meaning a group could no longer be completed in the order shown; a stylesheet could change the numbering the same way. Steps now follow the authored order only. Where several children share the same position — as happens to everything added by an import — the order is now fixed and repeatable instead of varying between Windows and Linux walls and changing as children were added.
- The startup diagnostic is written where it can be found — the file recording why a player failed to start was written to a location that depended on how the player was launched, so it frequently could not be located when it was needed. It is now written beside the database, in a fixed and documented place.
- Analytics shows widget names, and counts them correctly — every Analytics row identified its widget by a 19-digit internal number that meant nothing on the page. Those numbers were also newly minted each time a widget was opened and each time the player restarted, so opening the same brochure fifty times produced fifty separate rows with a count of one apiece. Content Engagement now groups by the widget you authored and shows its name, so those fifty openings appear as one row with a count of fifty. This applies to existing history as well as new activity — the link back to the authored widget was always recorded, it simply was never read — so past sessions gain names and correct counts without anything being re-collected. Please note: the Leads list and its CSV export now show only registered leads, matching the Leads figure beside them; anonymous activity that previously padded that list remains visible in the session timelines.
- Front Desk lists text fields again — the Front Desk page reported "No editable text content available" on every installation, however many text widgets a showcase contained, because it looked for them among content items rather than among the widgets where they live. Text widgets now appear and can be edited, and an edit is saved back to the widget it came from.
- The PIN dialog looks like a dialog, and appears where you touched — the PIN prompt was drawn as a plain gray rectangle in the top-left corner of the wall at an arbitrary size, with no frame and no heading, because its entire appearance was being discarded. It now carries its panel artwork, title and instruction, and opens centered on whatever triggered it rather than in the corner. The "Incorrect PIN" message and the Unlock button's active state were suppressed by the same fault and now show correctly.
- Adding a widget from the library puts it where you chose — a widget added from the library was filed under whichever slot it had originally been saved from, so one saved out of a group and then added to a structure's Main layer arrived at the top level instead of inside the layer, and was misplaced on the wall for the same reason. The slot you pick is now what is recorded.
- "Add Widget" is on the widget's own menu — adding something to a group previously meant expanding it first and using the menu on its contents row. The "…" menu now offers Add Widget directly on any widget that can hold children, asking which slot where there is a choice.
- "Use theme" works on widgets — selecting it on a widget's setting previously did nothing at all: no error, no change, the override simply stayed. It now removes the override so the setting follows the theme, including later changes to that theme. It does not copy the theme's current value in, which would have frozen today's value in place.
- Sparkles particle lifetime takes effect — the setting was published under one name while the effect read another, so any value set was accepted, saved and then ignored, and Sparkles always ran at its built-in lifetime. Existing showcases are unchanged on upgrade, since the stored value was inert and the built-in lifetime is unchanged — but the control works from now on, so an effect tuned by eye while it did nothing will respond when the lifetime is set.
- The Loupe no longer shows everything twice — the lens drew the magnified image over the top of the unmagnified widget beneath it, so the same object appeared twice inside the rim at two different scales, most obviously around widget edges. The lens captured only the content layer, leaving the background transparent and letting the real scene show through wherever the magnified image was clear. It now captures the background as well, so the magnified image genuinely covers what is under it. The lens also honors its lens-diameter setting, which was previously ignored.
- CODICE cards use the offsets you calibrated — the per-card X, Y and rotation offsets were read out of the database and then never applied to anything, so calibration never reached the lens, the spotlight, the hit test or the pen palette. Every behavior now applies them.
- The admin-override card adds the chrome it promises — pressing the card on a widget applied a style and did nothing else, so on a widget with no toolbar it drew a border and nothing more, and no stylesheet could have changed that. It now builds what is missing: one of each toolbar button in the primary position, skipping any already present, plus the title decoration. The toolbar no longer disappears on widgets too narrow to hold the full admin set, widgets nested inside a group are now found, and a browser's restored chrome is laid out properly instead of leaving its back, forward and address bar stacked on top of one another.
- The volume card reaches the widget you touched — volume and admin-override cards resolved their target incorrectly, so muting and the master volume did not reliably reach the widget under the card.
- A video shows its preview before it has been played — a video widget showed nothing at all until it had been played through once. The preview images were being generated correctly all along and then kept hidden.
- Images honor their minimum and maximum size — two sizing mechanisms overwrote one another on every resize: one kept the aspect ratio and ignored the limits, the other clamped each axis and broke the ratio. The ratio-preserving one settled last, so the limits looked as though they were being ignored. Both are now resolved together, in the order the stylesheet specifies.
- A pinned widget inside a group is no longer crushed — pinning a widget inside a group clamped it to the group's default hundred-pixel box, so a 500x500 viewer was scaled down roughly fivefold and dragged to the corner. Being pinned, not being nested, was what triggered it.
- A group with a toolbar can finish its sequence — a toolbar child was counted as a member of the group's logic, so any group carrying one could never reach Sequence or AND completion. This was invisible, because the toolbar is not drawn.
- Removing an old Showcase no longer breaks the installed one — purging any superseded Showcase package deleted shared system state that the current installation depends on, after which the live install failed on every boot. That teardown now runs only when no other Showcase remains installed.
- Deleting items by id deletes the right ones — a request naming a single item could delete two unrelated ones instead: asking to remove item 49 attempted to remove items 4 and 9. Run configurations, themes, widgets and content were all affected.
- Large scans generate a preview — image previews were silently rejected above a pixel limit intended for untrusted input, leaving big operator-authored scans stranded as "?" bubbles.
- A setting declared twice behaves as the editor shows it — where a component declared an attribute more than once, the player replaced the whole declaration while the editor merged them, so the editor could present settings the wall would never apply. The player now merges, matching what you are shown.
- Consumer Widget sections say which slot they belong to — selecting an image listed ten sections, five of them labeled identically as "Cloud widget", with nothing to tell them apart. Each now names its slot. Clearing a field also no longer collapses the section it sits in.
- "Presented by" lists only what actually presents — the heading listed ten sections for an image, seven of which presented nothing at all. Presentation slots are now separated from the rest.
- A row dropped lower in the list lands where you put it — moving a row downwards within the same parent placed it one position too low. Dropping at the very bottom of a list happened to come out correctly, which is why this looked intermittent rather than consistent.
- A deleted row stays deleted — a row removed from the tree could reappear the next time the tree refreshed, for instance after expanding, adding or cloning something.
- Dragging shows where it will land, whatever you are dragging — dragging a row by its handle, or a web address from the Media Library, gave no indication of the destination, and in the URL case did nothing at all on release.
- Typing in a Defaults field no longer interrupts itself — the field was disabled on each keystroke.
- A counter inside a group spawns its content at the counter — content spawned by a counter placed inside an ordinary group appeared offset by the group's own position instead of at the counter.
- Menus stay on screen — a menu opened near the edge of the window flipped to the other side of the pointer, landing somewhere unexpected. It now shifts only as far as it needs to in order to fit.
- A deleted Content Set widget no longer lingers in the Widget Library — removing a widget from a Content Set deleted the item but left the widget itself behind, where it reappeared in the Widget Library among widgets that had been saved there deliberately, with nothing to distinguish the two. Deleting the item now also removes the widget it owns — unless something else still uses it, so a widget shared by a duplicated item, or one saved to the Library in its own right, is left untouched. Please note: widgets already stranded by earlier deletions remain in the Library and need removing by hand; this stops new ones accumulating rather than tidying up existing entries.
Showcase 26.08.2
Released August 2026
This release introduces the URL Library — a catalog of web destinations that can be named, imported from a spreadsheet, and pointed at something new in one place instead of widget by widget. It also repairs the Defaults (Themes) page, which could not be used at all on some upgraded systems.
New Features and Improvements
- URL Library — web addresses used on the wall are now kept in a named catalog in the Media Library, rather than being typed separately into each widget. Change a destination once and every widget using it follows automatically, so a campaign page or intranet address that moves no longer has to be hunted down and re-entered everywhere. Addresses already in your content are added to the catalog on upgrade, grouped so that repeats of the same destination become a single entry; the addresses themselves are left exactly as they were.
- Import addresses from a spreadsheet — a list of URLs can be imported from a CSV file. The import previews what it will do first, showing which rows are new, which already exist, and which cannot be read, so nothing is written until you confirm it.
- Let one widget differ from the rest — a widget that follows a catalog entry shows its address as read-only, since the entry controls it. An unhook action next to that field releases just that one widget, leaving it on its current address and freely editable, without affecting any other widget using the same entry.
- Entries can be renamed — catalog entries can be given meaningful names at any time. Entries created automatically on upgrade are now named distinctly rather than all taking the name of their web host, so several destinations on one intranet server no longer appear as a list of identical entries.
- Content Sets — Consumer Widget settings are now grouped into clearer sections, root-level settings are editable, and the content tree more faithfully reflects the structure it represents.
Bug Fixes
- The Defaults page works again — on some systems the Defaults (Themes) page showed a loading indicator that never finished, leaving no way to change any theme setting. Nothing was actually failing: an internal tag left behind by an older import was being read as "nothing selected", so the page waited forever for a selection it already had. The affected data is corrected automatically on upgrade, with all saved settings preserved.
- Saving a theme setting now confirms itself — changing a setting on the Defaults page shows a confirmation, matching the rest of the editor. More importantly, a save that fails now says so and puts the field back to its previous value. Previously a failed save looked exactly like a successful one: the new value stayed on screen and the change was discovered to be missing only after reloading the page.
- Customization marks update immediately — the list of widgets on the Defaults page marks those with changed settings in bold, with a count. That mark now updates as soon as a setting is changed, instead of only after the page was reloaded.
- Jumping to a widget's settings shows the whole section — selecting a widget from the list on the Defaults page no longer scrolls its heading and first settings underneath the search bar, and selecting a section that has been collapsed now opens it rather than leaving it shut. The current selection is highlighted in the list.
- Import problems are reported instead of being hidden — a genuine fault during a URL import, such as a disk or database problem, was reported as an ordinary skipped row or as an invalid address, so an author was told nothing was wrong and retyped an address that was never the problem. Real faults are now reported as faults; rows that genuinely cannot be used are still skipped as before.
- Hosted sites are removed safely — a hosted site that is no longer referenced is archived rather than deleted immediately, keeps serving while archived, and is removed only after a further seven days. The removal now takes an exclusive claim before deleting anything, so a site being restored at the same moment cannot be destroyed mid-restore.
- Widgets cannot drift from their catalog entry — changing a widget's address directly, from a script or an older editor, now releases that widget from its catalog entry instead of leaving the two disagreeing. Previously the wall could show one address while the entry claimed another, and the difference was silently overwritten the next time the entry changed.
- Interrupted upgrades no longer undo your changes — if the upgrade step that catalogs existing addresses is interrupted, it now undoes its partial work and retries cleanly on the next start. Previously a half-finished run could re-link a widget an administrator had deliberately released.
- Obsolete Twitter viewers removed — content viewers for the retired Twitter integration are no longer created on upgrade, and the leftover entries they created are cleaned up. Tag names taken from imported content are also corrected, rather than being stored under an empty name.
Showcase 26.07.2
Released August 2026
A maintenance release: bulk deletions no longer fail as a whole because of one protected item, the Defaults page reports problems instead of appearing to load forever, and large imports and exports are staged on the data partition so they cannot fill the system disk.
Bug Fixes
- Defaults page reports problems instead of spinning — the Defaults (Themes) page now shows a message and a Retry button when it cannot load, rather than a loading indicator that never finishes. Widgets whose settings fail to load are listed with their own Retry option instead of quietly disappearing, so a temporary connection problem can no longer look like a missing widget. The page also no longer reports "Theme not found" when the theme exists and only the request failed.
- Deleting several items at once — deleting multiple themes or run configurations no longer fails as a whole when one of them cannot be removed. Each item is attempted on its own, so the rest are deleted as expected and the server reports which ones did not succeed and why. Previously a single protected item, such as a system run configuration, silently canceled the entire deletion.
- Imports and exports use the data partition — large imports and exports are now staged under the server's data directory instead of the system temporary directory. A large
.showcaseimport holds the archive and its extracted contents at the same time, needing roughly twice its own size, so on machines where data lives on a separate volume this could fill the system disk. Existing servers pick the new locations up on upgrade; operators who set these paths themselves keep their values. - Running out of disk space no longer stops the server — a failed write to the log file previously terminated the service and disconnected everyone using it. The server now keeps running and reports the problem, losing only the log file.
Showcase 26.07.1
Released July 2026
License activation fixes for Suite and bundle keys, hosted sites that survive a reboot, and a set of editor and packaging corrections.
New Features and Improvements
- All server settings documented — the server settings file (
production_users.yaml) now documents every setting the server accepts, grouped by area, each with its default value and the paths used on Linux and Windows. Previously it listed only seven of the forty-one available settings, so options such as HTTPS and TLS certificate paths, SMTP details, hosted-site and export storage locations, and the visitor upload limits were not discoverable without reading the source. Existing files are left untouched on upgrade; the expanded template applies to new installations. - Showcase in the Linux applications menu — on Linux, MT Showcase now appears in the applications menu after installation, with its own icon, so it can be started without using a terminal. Each installed version gets its own entry labeled with its version number, matching how MT Canvus already behaves. The menu entry and icon are removed again when the package is uninstalled.
Bug Fixes
- Suite licenses now activate — a license issued from a Showcase Suite key was read as a license for a different product and refused with "The license file is not for this application", which prevented Showcase from being licensed at all on a new installation. Licenses are now matched to the exact product they were issued for.
- Activation problems explain themselves — when activation fails, Showcase now shows the reason reported by the license server, such as "License key not found" for a mistyped key, instead of a general network error that suggested a connection problem.
- Hosted sites survive a reboot — hosted-site files (served via
GET /www/<site>/) are now stored in a persistent directory. Previously every hosted site returned 404 after a reboot, because its files were written under a temporary directory that the operating system clears on restart while the sites database still listed the site as deployed. Sites lost to this issue must be re-deployed once; from then on they persist. - Clearing a field resets it to the default — clearing a widget field in the editor now resets it to its default. Previously, emptying a numeric, size, or vector field — "Initial size" and "Scale", for example — appeared to work and was saved, but the player kept displaying the old value, and there was no way to reset such a field short of typing the default back in by hand. Text and color fields were unaffected and continue to behave as before.
- "Initial size" works on the Video Carousel — the setting previously appeared in the editor but had no effect; only "Scale" changed the carousel's size. Setting "Initial size" now sizes the carousel when it launches, and the video inside it is fitted to that size while keeping the clip's aspect ratio. Percentage values, relative to the parent, are honored too.
Showcase 26.07.0
Released July 2026
Showcase 26.07 introduces audience uploads for deployments with integrations enabled — visitors scan a QR code to send photos and videos to the wall through a moderated queue — alongside a round of media-library, widget-rotation, and browser fixes, and Showcase and Canvus can now run on the same machine.
New Features and Improvements
Audience uploads (deployments with integrations enabled)
- Authors can add an Audience Upload button to a widget's toolbar. Tapping it shows a QR code; visitors scan it with their phone to open a simple upload page — no app or account needed
- Uploaded media goes into a moderation queue, not straight onto the wall: a new Moderation page in the editor lets operators preview, approve, or reject each submission
- The widget's toolbar button also defines which kinds of media it accepts, so each upload target only receives content it can display
Operator workflow improvements
- Operator settings now persist when a template is re-applied, instead of being reset to the template's values
- Audience CSV imports now reject a malformed file as a failed run with a clear error, instead of half-importing it
- Connectivity checks now work against servers using self-signed certificates, matching the HTTPS-by-default server introduced in 26.06
Windows installer
- The installer and the application binaries it ships are code-signed again. Since the March 2026 signing-system change, Showcase Windows builds had been shipping unsigned, and Windows SmartScreen would warn that the publisher was unverified. Nothing changes for the operator beyond the removal of the "unknown publisher" warning.
- The editor server now starts immediately when installation finishes, so remote authoring works right away. Previously — even with the "Run the MT Showcase editor at sign-in" option ticked — the server did not come up until the operator next signed in, which looked like "the client runs but there is no server".
Bug Fixes
- Deleted media-library items stay deleted — removing a file or folder from inside a media-library folder now takes effect immediately instead of the item reappearing, and if a delete cannot be completed the editor shows an error rather than silently leaving the file in place.
- Drag files straight from your computer — you can again drag files and folders from a desktop file manager onto the media-library list to upload them, not only onto the small upload box at the bottom. Dropping onto a folder uploads into that folder; dropping elsewhere uploads into the current one.
- Widget rotation restored — alongside Location and Scale, a Rotation field again sets a widget's starting angle in degrees, rotating it about its center — useful for turning a browser or image to face someone standing on the opposite side of a touch table.
- Run Showcase and Canvus together — Showcase and MultiTaction Canvus can now run on the same machine at the same time. Both products previously shared one browser-engine cache, so whichever started second could fail to open web content; each product now uses its own cache.
- Failed pages no longer reload themselves — a browser widget whose page failed to load could get stuck repeatedly reloading its error page; a failed page now shows the error once and reloads only when asked to.
Showcase 26.06.3
Released June 2026
- Carousel thumbnail grid — a thumbnail grid, opened from a button in the video's bottom-right corner and shown as an evenly sized N×N overlay, lets viewers jump to any clip in a Video Carousel.
Showcase 26.06.2
Released June 2026
A port-less HTTPS editor, plus export and player-stability fixes.
New Features and Improvements
- HTTPS editor on a port-less address — the editor and API server now serve over HTTPS only, reachable at
https://<wall-ip>with no port. The server generates and trusts a self-signed certificate on first start (operators can supply their own PEM files instead), and serving over TLS keeps the session cookie so designers are no longer logged out roughly every 15 minutes.
Bug Fixes
- Asset exports include their files again — exports include the actual asset files once more: Export used assets only bundles exactly the assets the selected apps reference, and Export all assets bundles the whole asset library.
- Player video playback — NVIDIA (NVDEC) hardware video decoding is re-enabled safely with correct colors, automatically falling back to software decoding on unsupported hosts (and overridable per machine with
VIDEODISPLAY_FORCE_SOFTWARE_DECODE=1). - Display freeze resolved — a rare display freeze, caused by the drawing and main threads waiting on each other while presenting a frame, has been resolved.
Showcase 26.06.1
Released June 2026
A new Video Carousel widget, out-of-the-box email with configurable SMTP, and a round of editor and media-library improvements.
New Features and Improvements
- Video Carousel widget — a new widget plays a folder of videos one after another. Choose the playback order (alphabetical, reverse, random, or upload date), set auto-advance or manual advance, and pick what happens at the end (hold on the last frame, loop, or close). On-screen controls and touch gestures move through the clips.
- Email out of the box, with settings — invitation and password-reset emails now send on a fresh install through a built-in mail relay, where previously the server reported success but silently sent nothing. A new Email settings dialog (next to + Invite user) shows the active mail route, lets administrators switch to their own SMTP server, edit the server's public address, and send a test email.
- Media library folder operations — move assets and whole folders by dragging within the library, with a replace / keep-both / cancel prompt on conflicts. Upload an entire folder with its nested structure preserved, drop a folder onto a slot to add all the media inside it, and delete files or folders with an always-visible, confirm-guarded delete button that works on touch walls.
- Drag-to-create viewers and percentage sizing — dropping an image, video, or PDF onto a slot now adds the matching image, video, or book viewer with the file already set as its source. The Location and Initial size fields once again accept percentages and expressions such as
100%andcalc(100% - 50px), with their units preserved. - Clearer attribute help — hover the (i) icon next to an editor setting to read a description of what it does, now including settings that previously had no help text, with wording tailored to the widget you are editing.
- Live structures sidebar — the structures sidebar refreshes by itself as soon as an import finishes, with no page reload needed.
Bug Fixes
- Showcase export downloads — exports download reliably again for authorized users, where the download could previously fail with an authentication error. The export dialog now hides blank-screen system entries and automatically includes a selected app's structure and theme.
- Player stability on Intel graphics — fixed a freeze and self-quit on Windows machines with Intel UHD and Iris Xe graphics.
Showcase 26.06.0
Released June 2026
- More reliable large imports — the import progress bar now advances through the server-side assemble and extract phases, so very large archives visibly keep moving instead of appearing frozen. Individual upload chunks retry automatically after a transient hiccup, and leftover temporary files from interrupted imports are cleaned up automatically.
Showcase 26.05.4
Released May 2026
- Editor server reaches its database on Windows — fixed a problem introduced in 26.05.2 where the Showcase editor server could not reach its database after install. That change ran the editor server as a system-level Windows service, but the database, media assets, and license all live in the signed-in operator's profile, which a system service cannot see — giving a "database not accessible" error on a freshly installed machine. The editor server now runs automatically at sign-in as the operator, so it reads the correct per-user database, assets, and license with no migration or reconfiguration. It still runs hidden with no command-prompt window and restarts itself if it stops. This does not change how licenses are activated.
Showcase 26.05.3
Released May 2026
- Widgets land in the right layer while dragging — dragging a widget between layers in the editor's structure tree, or reordering widgets within a layer, briefly showed the widget jumping to the top of the tree in an invalid position, settling into the correct layer only after Save. The widget now appears in the correct layer immediately as you drop it. This was a display-only issue; saving always stored the widget in the right place, so no existing showcases were affected.
Showcase 26.05.2
Released May 2026
The Windows installer and the editor server have been reworked so a Showcase machine runs cleanly without operator intervention.
- Installer no longer interrupts itself — the installer no longer reboots the machine while installing the Microsoft Visual C++ runtime, and it registers the Windows Firewall rule for the editor server automatically, so the confusing "allow Node.js JavaScript Runtime to access networks" prompt no longer appears during first run. Previously, an operator who declined that prompt would silently break remote editing.
- Editor server runs as a Windows service — the editor server now runs as a proper Windows service called MT Showcase Editor Service instead of an open command-prompt window. It starts automatically with the machine, restarts itself if it stops, keeps running after sign-out, and no longer shows a console window that could be closed by accident. Uninstalling Showcase removes the service and the firewall rule.
- Logs in one place — server and player logs are now written together to
%PROGRAMDATA%\MultiTaction\showcase\logson Windows, and~/MultiTaction/showcase/logson Linux, making it easier to collect diagnostics from a single location.
Showcase 26.05
Released May 2026
Showcase 26.05 combines new authoring capability with a round of editor fixes and the operational improvements from the preceding point release: a new PIN Lock operator for gating widget actions and screensaver unlock, restored editor behavior (slot-aware widget filtering, in-pane schedule binding, Widget Group tint indicators, and the Codice behavior operators), an auth fix for sessions on plain-HTTP deployments, an import-pipeline fix so connected players pick up imported content immediately, a bucket-driven Demo Apps tab, a latch-group reset slot, an editor color-save fix, a rebuilt Defaults page, and a built-in test fixture suite.
PIN Lock operator
Authors can now gate any widget action behind a PIN challenge. Add the new PIN Lock behavior operator to a button or hotspot and the widget's action will only fire if the presenter enters the correct PIN.
PINs are managed centrally as Named PIN Groups under Defaults — give each group a name (e.g. "Admin", "Kiosk Override") and a 4-to-8 digit PIN. Operators reference the group by name, so updating a PIN once applies wherever the group is used. Alternatively, set a one-off Custom PIN directly on the operator if a group is not needed.
The PIN Lock operator has two trigger modes: On Action intercepts the widget's tap and shows the PIN dialog before the action fires; On Appear hides the widget entirely until the correct PIN is entered. A third attachment point, Menu Access Gate, locks the press-and-hold gesture that opens menus from the Menu Layer.
The existing screensaver Screen Lock now supports the same PIN Groups and accepts 4-to-8 digit PINs (previously fixed at 4 digits). Existing screensaver configurations keep working without changes.
Latch group reset slot
Widget Groups in latch logic mode lock HIGH on first activation and hold every trigger child HIGH until all of them go LOW again. With nothing to drive the children back down, a latch group could stick HIGH with no clean way to release it.
A new Resets slot now sits between Triggers and Outputs on a Widget Group. A button placed in the Resets slot clears the group on its next press: the latch releases, sequence progress resets, trigger children and the group signal return to LOW, outputs hide, and the reset button re-arms. Together with the Triggers slot this gives a full set/reset latch. Reset buttons stay visible at all times and are not counted in the group's logic evaluation.
Editor fixes and polish
The widget editor now correctly filters available widgets when adding to a slot, so the "Add widget" dialog only offers widgets that are valid for the slot you are filling.
Schedule binding is back inside the widget's properties pane. The Schedule picker on widgets like Browser, Book, and Image-movie lists every event from every schedule and binds the chosen event to the widget — no more navigating to the Schedules page to attach a schedule. A "+ Manage schedules…" entry jumps to the Schedules page when you need to create or edit events.
The Widget Group active/inactive tint indicator is restored. Set Active tint and Inactive tint on a group, and every child hotspot's visualization glows in the chosen color when its signal goes HIGH or LOW. Per-widget High tint / Low tint overrides still take precedence over the group default.
The eight Codice Behavior operators (Scenario Load, Volume, Admin Override, Widget Trigger, Scrubber, Pen Palette, Spotlight, Loupe) now register cleanly in the editor and can be added from the Behavior Operators slot. They take no per-instance configuration — all behavior is driven by the Codice marker's service config.
Smaller editor polish: every slot now surfaces in the Slots section of a widget's properties pane; signal-name, condition-signal, and counter-target inputs autocomplete from names already declared in the structure; content-boundaries, marker-filters, and code-filter inputs validate their formats live; codice-lottery win-chance is now a 0–1 slider; sparkles can be placed on overlay and screensaver layers in addition to background; and the text-style drop-shadow-offset attribute uses the vector editor.
The Defaults page has been rebuilt as a single scrolling, by-type list of every component and its attributes, so authors can see the full set of out-of-the-box defaults at a glance. Any value you have customized away from the system default is shown in bold, and a table-of-contents sidebar jumps to each component. Typing the system default back into a field clears your override.
Two editor "+ Create new…" pickers (content sets and shared components) now open the new item's own edit page so you can configure it before it is bound, then return you to the structure with the binding applied — instead of silently creating an empty, unconfigurable entity inline. The Opening animation picker on finger menus, rotating menus and Codice content again lists the built-in Stars and Circular progress animations on fresh installs (these were missing after the server rewrite).
The Codice DB page columns are now resizable — drag the separators to widen the code list or the detail panel, and the widths are remembered for your session.
Editor color edits now apply on the player
Color attributes set in the editor — tints, background color, foreground color, Awesome BG colors and similar — could silently revert to the widget's built-in default on the player, even though the editor showed the saved value. Named and hex colors that happened to be stored in a player-compatible format were unaffected, which is why the problem appeared intermittent.
The editor now saves every color in a single canonical rgba() form that the player parses reliably, and the player also normalizes any color stored in the older space-separated format on load, so existing content picks up its correct colors without re-saving or migration.
A related fix stops the editor showing a blank white page after a server update: stale cached asset requests now return a clean error instead of a broken page load, and the editor's main page is no longer cacheable by intermediate proxies.
Login sessions persist across inactivity on HTTP deployments
The refresh-token and CSRF-token cookies set on /api/auth/login and /api/auth/refresh had the Secure flag hardcoded. Browsers silently drop Set-Cookie headers with Secure when the response is over plain HTTP, so any showcase server install reached on http://host without a TLS-terminating proxy returned a 200-OK login but the cookies never reached the browser. The user's 15-minute access token kept them logged in until it expired, then /api/auth/refresh returned 401 (no refresh cookie in the request) and the editor showed "Your session has expired". The effect looked like an aggressive idle timeout.
The Secure flag is now controlled by the new COOKIE_SECURE environment variable on the api server, default true (correct for production deployments behind TLS). HTTP-only deployments opt out by setting COOKIE_SECURE=false:
# /etc/systemd/system/mt-showcase-server.service.d/cookie.conf
[Service]
Environment=COOKIE_SECURE=false
After applying, sudo systemctl daemon-reload && sudo systemctl restart mt-showcase-server. Symptoms of the bug present in the database: the refresh_tokens table accumulates rows from successive re-logins (one per login) with empty parent_id columns, and audit_log shows zero refresh.token_reuse events — silent refresh never reached the rotation logic.
This release also hardens two editor security touch-points: the SSO provider configuration form no longer lets the browser autofill an administrator's saved login credentials into the provider fields, and the Revoke all sessions control's description now matches its actual behavior — revoking immediately invalidates every active session rather than letting existing tokens run out their window.
Connected players pick up imported content immediately
Importing a .showcase archive now propagates to connected C++ players in the same session: imported run-configs become launchable from the dashboard immediately, no player restart needed.
Previously the import handler fired a single blanket "something changed in the run_configs table" event after commit. The player resolves every event by id, and the placeholder id used in that event resolved to nothing — so newly-imported run-configs stayed invisible to the player until the next process restart. Launching such a run-config from the dashboard silently fell back to the Blank Screen with no error surfaced. The fix replays the importer's actual inserted IDs as per-id added / changed events after commit; the player's existing live-edit handlers pick them up.
Logic-group stability fix
Structures that drive widgets through Widget Group logic gates (signals creating and removing child widgets on every HIGH/LOW cycle) could gradually slow down and, after a sustained burst of activity, stop responding for several seconds at a time. The player now cleans up per-child logic state correctly as children come and go, so logic-heavy structures stay responsive over long sessions.
Editor Demo Apps tab now reflects the bucket contents
Import & Export → Demo Apps in the editor now lists whatever is currently in the public showcase-downloads bucket, not a hand-maintained catalog file. Adding or removing a demo archive in r2:showcase-downloads/demo-apps/ propagates to every editor's Demo Apps tab within five minutes (proxy cache TTL), with no code edit, package upgrade, or service restart required.
The previous server/demo-apps.json catalog file is no longer consulted. Deployments that customized it should move their entries into the bucket itself.
Built-in test fixture suite
A built-in test fixture suite ships with this release. Seven small .showcase archives exercise the structural features of the editor and player side-by-side, with no external assets:
| Fixture | What it exercises |
|---|---|
| Testing - Logic Group Demo | Six widget-group logic-mode columns (none, and, or, exclusive, sequence, latch) with three hotspots and per-group output widget each. |
| Testing - Signal Routing Demo | signal-name publication and condition-signal + condition-value gating, HIGH and LOW, across toggle / timed / hold trigger-modes. |
| Testing - Behavior Decorations Demo | snap-to-angle at three division densities plus close-after-idle with content-boundaries. |
| Testing - Schedules Demo | widget-event recurrence variants — one-shot, daily, weekly MWF, weekly all. |
| Testing - Launcher Menus Demo | content-hotspot launching floating-menu and rotating-menu via the content-widget-relative slot, three content-opening-duration values. |
| Testing - Teaser Animations Demo | menu-teaser-launcher + teaser-operator (wrap, bounce) and animated-content + fader-operator (fade/scale on-off, corners-only). |
| Testing - Screensaver Demo | screensaver overlay, screensaver-trigger, screen-lock with unlock-method documented for pin / codice / user-choice. |
A combined Testing - All Showcase Demos archive is also published — importing it once creates all seven run-configs in one transaction, useful for seeding a fresh server or a QA station. All eight archives appear in the editor's Import & Export → Demo Apps tab.
Showcase 26.4.1
Released on May 2026
New server
Showcase 26.4.1 ships a completely new server, rewritten from the ground up in TypeScript/Node.js (Fastify). The Ruby server used in 1.14.x has been replaced.
The key operational change for most deployments: PostgreSQL is no longer required. The new server uses SQLite, which runs in-process — there is no separate database service to install, configure, or manage. App data migrates automatically on first boot; no manual steps are required.
The new server is also the foundation for the authentication, analytics, and access-control capabilities described below.
New editor
The Showcase editor has been rewritten in React with a touch-first design throughout: 48 px tap targets, no hover-only interactions. It is functionally equivalent to the 1.14 editor with the following additions visible to authors:
- Media library — tree navigation, thumbnail previews, drag-and-drop upload, full-text search
- Live inputs — a Live Inputs folder in the Media panel exposes connected video device feeds from the C++ player; drag them into structures like any other asset
- Schedule management — full schedule CRUD in the browser
- Content Sets — named asset collections that can be authored, reordered, and assigned to Personal markers or content nodes; full CRUD with drag-reorder
- Widget Library — shared components importable across apps, with provenance tracking and cascade delete
- Defaults management — per-theme default attribute values editable in the browser
- Analytics dashboard — see Analytics and data gathering below
- Codice marker management — see Codice marker system below
- Import / export — embedded assets, WebSocket progress bar, demo app catalog, per-category import preview, archive versioning (see Import and export below)
Authentication and access control
Showcase 26.04.1 replaces the legacy single shared-password Basic Auth with per-user accounts and a five-role RBAC model (admin, author, presenter, front_desk, viewer). A first-boot setup wizard guides operators through creating the first admin on both fresh installs and upgrades from 1.14.x.
The admin UI gains a Users page (invite, role/status edit, unlock), a Security Settings page (TOTP toggle, lockout thresholds, fleet revocation), an Audit Log viewer, and SSO provider management for both OIDC and SAML. Day-to-day login flows now support password + JWT sessions with rotating refresh tokens, optional TOTP 2FA, magic-link login, password reset, and admin-issued invites — all with uniform success responses to prevent email-address enumeration. Front desk users see a stripped editor limited to MOTD / lunch menu / welcome / banner text-content widgets.
Operators get a new showcase-server CLI with subcommands for the recovery paths that should never depend on a working browser session: users:create-admin, users:reset-password, users:disable, users:enable, users:unlock, and keys:rotate-signing. Every CLI action writes an audit_log row tagged actor_ip='cli'. Full operator setup, env-var, SSO, TOTP, lockout, and fleet-revocation reference lives in Upgrading to 26.4.1.
User roles at a glance:
| Role | What they can do |
|---|---|
admin |
Full editor plus admin portal — manages users, SSO, TOTP, security settings |
author |
Full editor — creates and edits all content |
presenter |
Library and launch view only — cannot author, can launch showcases |
front_desk |
Stripped editor — text-content widgets only (MOTD, lunch menu, welcome, banners) |
viewer |
Read-only access |
License wizard
A new first-run licensing wizard guides operators through license activation on a fresh installation, replacing the manual file-copy workflow from 1.14. Existing licensed installations are unaffected on upgrade.
Analytics and data gathering
A new analytics subsystem captures visitor interactions and surfaces them in the editor's Analytics tab.
What is tracked:
- Widget lifecycle events — widget created, destroyed, asset loaded, PDF page viewed, video start/end, URL changed
- Visitor interactions — content added to or removed from personal space, widget emailed, object contact (touch down/up)
- Session bookends — device sessions (player connection lifetime) and app sessions (per app run)
Visitor identity: Showcase uses four identity tiers — registered visitors (Personal marker), unregistered guests (Guest Pool marker), employees/demo staff (Employee marker), and anonymous touch. Events are associated with the appropriate tier automatically.
Screen-side and location tracking: Showcase uses orientation, screen-side clustering, and spatial proximity heuristics to group touch events by individual visitor even without a registered marker. This allows per-visitor interaction timelines to be reconstructed from anonymous touch data for post-event analysis.
Analytics dashboard tabs:
- Leads — visitor list with expandable interaction history per lead; staff-flag toggle to exclude demo staff from reports
- Sessions — session list with expandable event timeline
- Content — per-widget and per-asset interaction counts and frequency breakdown
- Export — CSV download for leads, events, and sessions
Webhook delivery: Configure an outbound webhook (URL, optional auth header) to stream events to a CRM or marketing automation platform in real time. Includes a test-fire button.
Codice marker system
The Codice marker system has been completely redesigned. The editor gains a new three-pane Codice DB interface (type list → codes → detail form), replacing the previous single-list view. Markers can be scoped globally or per-app, with collision detection preventing duplicate code assignments.
Eleven marker types are now supported:
| Marker | What it does |
|---|---|
| Widget Trigger | Places a marker that activates one or more widgets. Configurable as global or app-local scope; one-shot or hold mode. |
| Personal | Identity marker — stores visitor name, email, optional PIN, companion URL, and an asset repository backed by a Content Set. Enables personalised content delivery. |
| Eraser | Erases annotations within a configurable rectangular or circular footprint. |
| Volume Controller | Controls audio level by rotating the marker — rotation angle maps to output volume. |
| Admin Override | Restores full admin toolbar on a specific widget, scoped to that widget only. |
| Dial / Scrubber | Scrubs media with X-axis movement; adjusts playback speed with rotation. |
| Loupe / Magnifier | Renders a circular magnified view of the content beneath the marker using shader-based magnification. |
| Spotlight / Reveal | Dims the entire display except a circular area around the marker, drawing attention to a focal point. |
| Pen Palette | Controls annotation tool color — rotation maps to hue, X/Y position maps to brightness and saturation. |
| Scenario / App Load | Loads a specified content set or run configuration; supports exclusionary lock so only one scenario is active at a time. |
| Guest Pool | Provides a pool of visitor registration codes. Accepts range expressions (e.g. 1,5,10-100,200) and optionally treats unknown codes as new guest registrations. |
Signal system and logic gates
Widgets can now emit and receive named signals, enabling rule-based interactivity across the structure tree without scripting.
- Any widget can be configured as a signal source (emits HIGH/LOW when a condition is met) or a signal target (changes state when it receives a signal)
- AND, OR, and NOT logic gates combine multiple input signals into a single output — for example, show a widget only when two other widgets are both active
- Configurable tints — each gate output can apply a color tint when HIGH, allowing visual feedback alongside the state change
- Exclusive HIGH (radio mode) — a logic group can be configured so that only one child can be HIGH at a time, implementing radio-button-style exclusivity across widgets
- Counter widget — tap-to-increment counter with a configurable target value; emits a signal when the target is reached
New and updated widget types
New widgets:
- Loupe — displays a circular magnified view of the scene beneath the widget; zoom level is configurable
- Spotlight — a shader-based dark overlay with a circular cutout; focus the audience's attention on a specific area of the display
- Widget groups — organize widgets into named groups in the structure tree; collapse/expand for cleaner authoring; groups can expose a signal output driven by child state
Updated widgets:
- Browser widget — new transparent background attribute; loading spinner overlay during page load
- Input Visualizer — size and location are now configurable for all user roles; defaults to full-screen
Player updates
- Presentation mode toolbar — a restart button is now available in the presentation mode overlay, allowing the active app to be reset without leaving presentation mode
- Not-configured splash screen — when no app is running, the player displays all available IPv4 addresses to simplify first-time connection, replacing the previous blank screen
- Port conflict detection — the player surfaces a specific error if its configured port is already in use, rather than silently failing
- Widget clone naming — cloned widgets now use Windows-style
(1)numbering instead of "Copy of"
Import and export
- Progress indicator — a live progress bar (via WebSocket) is shown during both import and export of large apps
- Demo app catalog — a built-in catalog allows demo apps to be imported directly from a server URL, without manually transferring archive files
- Per-category import preview — the import wizard shows a per-category breakdown and allows individual categories to be deselected before importing
- Archive versioning — exported archives now carry a version field; importing an archive from a newer Showcase version is detected and handled gracefully
Upgrading from 1.14.x
See Upgrading to 26.4.1 for the full operator guide: plugin recompile requirement, setup wizard, database, environment variables, CLI reference, SSO configuration, TOTP, and lockout settings.