January 19th, 2026

January Changelog

Happy new year! We start 2026 with a bang, and a whole load of updates for you. Here’s what’s been going on over the holiday period…

Integrations:

  • SPanel - The all-in-one cloud management platform

  • .BD domain reseller

  • SSL Commerz payment gateway

New Functionality:

Widgets 2.0 (Beta Preview) Improvements:

Widgets 2.0 are now faster to instantiate, benefit from cached styles and are easier to configure/pass options to.

  • Refactored prop parsing to support either individual HTML attributes (simplest) or an application/json child <script> block (whilst keeping the bind approach for backwards compatibility).

  • Implemented dynamic slot detection using MutationObserver, so slot changes are picked up even when content is injected after initial render.

  • Fixed tooltips failing on highlighted cards (in certain browsers) when a background blur filter was applied.

  • Moved Tailwind CSS from repetitive inlined style blocks to a separate, cacheable, versioned stylesheet link; widgets now resolve CSS robustly across hosting environments with automatic cache-busting via build-time version injection.

  • Removed redundant HTML/head/body tags from the Custom Element template and standardised the Shadow DOM structure around a single root <section>, keeping the widget component as a pure presentation layer consuming reactive state from the composable.

  • Reduced the main JS bundle by ~72 KB (~417 KB → ~345 KB) by externalising styles (CSS emitted separately at ~71 KB).

Other functionality:

  • New contract product filter to the 'Tickets' tab, when viewing clients;

  • New setting to add a default support department per product;

  • Now showing the validation status of company tax numbers;

  • Added staff controls to manage and (re)validate tax numbers;

  • Now showing tax amount in dry-run 'amount to refund' calculation;

  • Updates to Duda provisioning integration (aligning to updates from Duda);

Fixes:

  • Broken query when invoice product doesn’t exist yet;

  • Catch errors during report generation cron loop;

  • Error opening lead ticket due to empty strings being passed;

  • Error submitting domain names settings form;

  • Prevent setting domain cookies on restricted apex domains;

  • Improved error handling for DLocal payment gateway;

  • Fix adjust promotions when combined with other percentage promotions;

  • Incorrect usage of ticket_department_id vs brand_ticket_department_id;

  • Wrong injection key breaking the mapping step for imports;

  • Remove auth provider management controls from API tokens view;

  • Update version of libphonenumber-js to support new mobile ranges;

  • Updates to TitanMail provisioning config;

Internal:

  • Additional API debugging;

  • Safeguard deleting invoice payments;

  • Upgrade Laravel to 6.20.45;

  • Refactor mapState and mapGetters to computed properties;

  • Add protection against early issuing of consolidation invoices;

  • Additional protections for duplicated waiting payment;

  • Update final components to utilise the useClientInjector composable;

  • Refactor injections to use composable pattern;

  • Remove $ prefix from provided data and method names;