Added
Added a "Pay Now" button near the top of the invoice page so clients can jump directly to the payment section.
Added
Added dark mode to the admin panel.
Added
Added the ability for admins to transfer a package between clients. Billing history is not transferred.
Added
Added support for automatically renewing expired domains when the registrar still permits renewal, controlled by the registrar plugin's canAutoRenewDomain() function.
Added
Added wildcard (*) and CIDR range support to the "IPs never to be banned" and "IPs currently banned" settings.
Added
Added a beta version of API v3, currently supporting GET requests for all resources.
Added
Server and registrar plugins can now add custom tabs to the admin package view using the new adminPanels feature.
Added
Added an option to store login sessions in the database. Set SESSION_HANDLER to 'database' in config.php, and optionally set SESSION_LIFETIME to configure the idle timeout in seconds.
Added
Added a Session Cleanup service to remove expired sessions and remember me tokens.
Added
Added a search filter to the package dropdown on the admin ticket view.
Added
Added OAuth authentication for POP3 email routing rules, supporting Google Workspace, Gmail, and Microsoft 365 mailboxes.
Added
Added OAuth authentication for outgoing SMTP, supporting Google Workspace, Gmail, and Microsoft 365.
Added
Added a "Disable Mail Sending" setting to prevent emails from being sent or queued.
Added
Added a Copy button to the API Key page.
Added
Added a resource usage panel to Enhance server packages, Thanks to Sheernox Technology Group.
Improved
Made the "Client Group" dropdown on client profiles searchable.
Improved
Server plugins can now define confirmation prompts for actions such as booting and rebooting.
Improved
Updated the Stripe and Stripe Checkout plugins to Stripe API version 2026-08-26.dahlia.
Improved
Custom fields and add-ons in the client area now use shared templates across hosting, domain, SSL, and general packages.
Improved
Custom field length validation in the client area now supports multibyte characters.
Improved
View and edit dialogs in the client area now size correctly for numeric custom field values.
Improved
Password custom field values are no longer included in the source of client area product pages. They are loaded on demand when the client chooses to view them.
Improved
Password custom field changes are now masked in the package event log.
Improved
Added date filtering and searching by order ID or client name to the orders list.
Improved
Renamed the plugin method show_publicviews() to getPublicView().
Improved
POP3 passwords and OAuth client secrets are no longer sent back to the browser when editing an email routing rule. Leave these fields blank to retain their current values.
Improved
POP3 usernames in email routing rules now support up to 255 characters.
Improved
Saving an email routing rule now requires the support setup permission.
Improved
Changing your password now signs you out on other devices when database sessions are enabled.
Improved
When database sessions are enabled, admin password changes, password resets through reset links, two-factor authentication resets, and staff deactivation now end all active sessions for the affected user.
Improved
Remember me now uses secure, revocable tokens. Users who previously selected remember me will need to log in again after updating.
Improved
Clients marked as fraud or deleted are now signed out immediately.
Improved
Enabling or disabling two-factor authentication now requires the user's current password.
Improved
Staff must now enter their current password when changing their own password.
Improved
Improved input handling on the change password page.
Improved
Password reset and account activation links now use secure, single-use tokens. Links sent before updating will no longer work, and clients will need to request new links.
Improved
Password reset links now expire within 24 hours, and account activation links within 7 days, even when "Confirmation Link Availability" is set to a longer period or to never expire.
Improved
Requesting a new password reset link now invalidates any previous reset link.
Improved
Clients are no longer emailed their new password after resetting it.
Improved
Invoice cloning is now recorded as an event instead of a transaction.
Improved
The LogicBoxes registrar class is no longer encoded.
Improved
Registrar plugins can now display a meaningful error when DNS record retrieval is unsupported by throwing a CE_Exception.
Improved
Grouped the Email Invoice and Download PDF buttons into a single icon group to reduce clutter near the top of the invoice.
Improved
Made the dropdowns on the add-ons and packages lists searchable.
Improved
Improved bulk email performance by reusing a single mail server connection instead of reconnecting for each recipient.
Improved
Large announcement and bulk mailer sends can no longer be interrupted by a browser disconnect or server timeout.
Improved
Log file entries now always include the remote IP address, not just when DEBUG is enabled
Improved
Added a confirmation prompt before clients renew a package or domain.
Improved
Added a confirmation prompt before deleting billing profile IDs from the settings page.
Improved
Added a confirmation prompt before replacing an existing API key, since generating a new key invalidates the current one.
Fixed
Fixed an issue where two-factor authentication errors displayed "true" instead of the error message.
Fixed
Fixed an issue where the affiliate cookie length setting was ignored.
Fixed
Fixed an issue where the affiliate column on the orders list was always empty, even for orders placed through an affiliate.
Fixed
Fixed an issue where saving an email routing rule without selecting a ticket type or assignee displayed a generic error instead of a validation message.
Fixed
Fixed an issue where line breaks in client cancellation reasons were not displayed on the Package Cancellations page.
Fixed
Fixed an issue where special characters, such as &, in package names, client names, and cancellation reasons were displayed as HTML entities on the Package Cancellations page.
Fixed
Fixed an issue where cancellations set to "Immediately" were not labeled, highlighted, or sorted correctly when using a non-English language.
Fixed
Fixed an issue where the AJAX response for the Pending Package Cancellations list included package custom field values that were not needed for display.
Fixed
Fixed an issue where the signup page could not find phoneverification.phtml.
Fixed
Fixed an issue where the payment reference field was not automatically focused when the Add Payment Reference window opened.
Fixed
Fixed hardcoded admin directory paths in ticket email links, revenue reports, and import plugins.
Fixed
Fixed missing translations on the order page.
Fixed
Fixed an issue where risk factors were not displayed correctly on the order page.
Fixed
Fixed an issue where an invalid or comma-formatted "MaxMind Fraud Risk Score" setting, such as 0,5, could cause every order to be rejected as fraud. Invalid values now skip risk score rejection and are logged, and the setting description has been clarified.
Fixed
Fixed an issue where the order form summary could display a "Total Due Today" one cent higher than the checkout total when a percentage coupon applied to both a package and its add-ons.
Fixed
Fixed an issue where requests to unknown API paths were logged as Error events in the Event List.
Fixed
Fixed an issue where pressing Enter in the API Key field could submit its value to an unrelated setting.
Fixed
Fixed an issue where long client names could displace invoice action buttons or cause them to overlap invoice details.
Fixed
Fixed inconsistent spacing around the divider between "Invoice To" and "Invoice From" on mobile.
Fixed
Fixed an issue where announcements ignored the bulk mailer's configured send limit. Large announcements now respect the limit and send in batches across multiple runs.
Fixed
Fixed an issue where the version access denied page could not force a new access check.
Fixed
Fixed an issue where payment buttons were still displayed for credited and refunded invoices.
Fixed
Fixed an issue where the clear button in Select2 dropdowns was misaligned and oversized.
Fixed
Fixed an issue where differences in decimal precision between the entered amount and the stored balance could prevent a client's credit balance from being fully removed.
Fixed
Fixed an issue where the Stripe plugin's "Delete Client From Gateway" setting was ignored and the Stripe Checkout plugin's setting was used instead when removing a client from Stripe.
Fixed
Fixed an issue where PayPal authorization IPNs could apply a payment a second time and add the amount as credit to the client's account.
Fixed
Fixed an issue in the Virtualizor plugin where a failed suspension caused a fatal error and prevented the autosuspend process from completing.
Fixed
Fixed an issue in the Virtualizor plugin where errors returned during create, delete, suspend, unsuspend, boot, reboot, shutdown, and package update operations could cause a fatal error instead of displaying the error message.
Fixed
Fixed an issue in the Virtualizor plugin where the IP Pool ID package setting was not sent to Virtualizor when creating a VPS.
Fixed
Fixed an issue in the Virtualizor plugin where the plan name was missing from the error message when a matching plan could not be found.
Fixed
Fixed an issue where the INR and TRY currency symbols were not displayed in the currency list.
Fixed
Fixed an issue where domain availability lookups for .ca and .us domains, including provincial .ca second-level domains, always reported domains as registered due to changes in the registries' WHOIS responses.
Fixed
Fixed an issue where the Type, Taxed, and action dropdowns were cut off by the Invoice Entries table when adding or editing an invoice.
Fixed
Fixed an issue where the payment reference entered when adding a variable payment was not saved to the invoice.
Fixed
Fixed an issue where ticket type names containing special characters, such as &, were displayed as HTML entities in the "Set to type" dropdown on email routing rules.
Fixed
Fixed an issue where description tooltips on a client's recurring charges list displayed raw HTML instead of formatted text.
Fixed
Fixed an issue where description tooltips on a client's recurring charges list could remain stuck on screen.
Fixed
Fixed an issue where the recurring charge add/edit window displayed a literal tag in the charge description.
Fixed
Fixed an issue where premium domains were shown as available for registration when using the ResellerClub registrar.
Fixed
Fixed an issue where the Knowledge Base Articles page failed to load when no categories existed.
Fixed
Fixed an issue where upgrade/downgrade options could display the wrong product group name when the available packages belonged to a different group.
Fixed
Fixed an issue where invoices imported from WHMCS had no creation date, causing invoice PDFs to display 12/31/1969.
Fixed
Fixed an issue where invoices imported from WHMCS were marked as unsent.
Fixed
Fixed an issue where non-ASCII characters, such as accented letters, in client details, tickets, and other text were corrupted during WHMCS imports.
Fixed
Fixed PHP 8.2+ deprecation notices caused by utf8_encode() during WHMCS imports.
Fixed
Fixed an issue where invoices imported from WHMCS did not retain their payment gateway.
Fixed
Fixed an issue where invoice item descriptions longer than 200 characters were truncated during WHMCS imports. The remaining text is now preserved in the item detail.
Fixed
Fixed an issue where ticket replies sent from email addresses other than the client's own, such as CC'd contacts, were missing after WHMCS imports. These replies are now attributed to the ticket's client and include the original sender's address.
Fixed
Fixed an issue where tickets imported from WHMCS displayed their last reply as "Just now" in the ticket list.
Fixed
Fixed an issue where domains imported from WHMCS had no expiration date.
Fixed
Fixed an issue where selecting "Include Closed Tickets" in the admin ticket list did not show closed tickets when the search field was empty.
Fixed
Fixed an issue where performing an action on the admin invoice list, such as sending an overdue notice, reset the list back to the first page.