LiveWhale 2.23.0 3/8/2026
New feature: LiveWhale Analytics, in preparation for LiveWhale 3.0
Beginning with this release, LiveWhale will automatically collect anonymized, pre-aggregated usage totals—such as daily URL hits, device type, and general referrer category—to populate the upcoming LiveWhale 3.0 Reporting tool, helping content managers understand overall traffic trends without tracking individual visitors.
The system is privacy-first by design: it stores only aggregated counts, uses no cookies or persistent identifiers, and does not transmit data to third-party services. We’re adding this tracking now so that when you upgrade to 3.0, some historical data will be available to you. Sites may disable analytics collection at any time via configuration if preferred. [Docs: LiveWhale Analytics]
New feature: Use a CSV or JSON as a source for Linked Calendar events syncing
You might have events in a CSV or JSON format that you want to sync into LiveWhale as a Linked Calendar. While you could always write a custom translate-to-ICAL script, LiveWhale 2.23+ now has a built-in function for this called “calendar_feeds” in the config. You can configure it to point to a local or remote CSV or JSON url and, provided it’s formatted with the proper column or attribute names, a Linked Calendar can be directly added to sync those events.
You can also use /key/value filters in your linked calendar URL to reference specific columns of your CSV, in case you have one CSV you want to split across multiple linked calendars in different groups. [Docs: Using a CSV or JSON file as a Linked Calendar source]
LiveWhale 2.21.0 8/17/2025
New Search Engine option: Automatic “noindex” tags
Sometimes old or stale content can show up in Google results, even after it’s been archived or removed from the LiveWhale sitemap. Now, you can configure per-module TTLs for events, blurbs, forms, galleries, and news stories that will automatically add a robots “noindex” meta tag to each item after it’s passed a certain age. You could set it to an hour, a week, a year—whatever you’d like. Then, after that time has passed for each item, its URL should get removed the next time it gets re-indexed by Google or other search engines. [docs]
New Redirects option: Notes
When adding redirects to LiveWhale CMS, you can now make private notes in the new optional “Notes” field. This is a handy way to remind yourself the purpose of a redirect, or jot down a date when you know you can come back and delete it. [docs]
New Theming option: Customize “scroll-to-top” behavior
Certain actions in LiveWhale—loading a new event view in the calendar, or submitting an inline form—change the page content and scroll to ensure the new content is visible in the user’s viewport. Sometimes, though, fixed or sticky headers in your design can overlap content in these “scroll-to-top” actions. Now, you can use theme CSS to customize one or more pixel offsets (can be different in each responsive breakpoint) to ensure scroll-to-top never collides with your sticky site header. [docs: events] [docs: forms]
New API option: Location group IDs and titles
The /live/json/places endpoint now provides the group ID (gid) for each saved location, and you can request an optional response_field for group_title to get the full group name. [docs]
New Widget option: Event Types as links
If you include “categories” widget format variable in your events widgets, it’s always included a text-only list of event types. Now, you can optionally configure that variable to link to calendar results matching each event type using the new config option USE_CATEGORY_LINKS_IN_EVENTS_WIDGETS (this will become default behavior in LiveWhale 3.0). [docs]
LiveWhale 2.23.0 3/8/2026
- Fixed an issue where Google Maps embeds on calendar front-end views were missing title=”” attributes on the iframe. List and detail view maps now include title=”Map showing location of [location name]”. [Forum discussion including theme-level patch in advance of upgrading.]
LiveWhale 2.22.0 12/7/2025
- Fixed a typo in the mini-cal aria-label, and updated the accessibility (dialog settings and keyboard trapping) of the “Subscribe” dialog on the front-end calendar.
LiveWhale 2.23.0 3/8/2026
- Shared events that have a default image applied from their originating group will now travel with those default images intact.
- Clarified confirmation messages when resetting a Linked Calendar or deleting a single Linked Calendar event.


- Added a failure notice for logged-in users when a file widget’s “extract” setting failed due to the underlying file/url failing to parse.
- Added target=”_blank” to the core lw_cal_event_related_content.html component for related content links.
- LiveWhale CMS: Added a warning to prevent saving a Navigation when you have unfinished new links or separator text.
LiveWhale 2.22.0 12/7/2025
- Privacy and visibility settings for Linked Calendar events can now be set and overridden on a per-event basis. Before, the visibility of the Linked Calendar would always take precedence over the individual event settings.
- Linked Calendars with multiple CATEGORIES: lines in a single ICAL event record will now be combined when syncing.
LiveWhale 2.21.1 9/7/2025
- Linked Calendar events sent to the trash (when missing from the ICAL feed on an hourly sync) will now be auto-restored from the trash, including all customizations, if event with matching UID returns to the ICAL feed on a later sync.
- Attempting to load an event URLs with a trailing slash will now redirect to the working slash-less version rather than 404ing.
- LiveWhale CMS Only: Extended maximum length of a single saved Navigation to 1,200 links and added an error message when trying to add links beyond that.
LiveWhale 2.21.0 8/17/2025
- Fixed an issue where browsing Linked Calendars from all groups and clicking “10 events” wouldn’t show results if the Linked Calendar was owned by another group. Clicking that link now switches you into the owning group of the Linked Calendar.
LiveWhale 2.20.2 7/13/2025
- Performance improvement: Initial event listings now preload with the calendar on page load, rather than requiring a separate AJAX request.
- Linked Calendars with events that run from midnight to midnight of another day will be imported as “All Day” events.
- Relocated accessibility checking for LiveWhale CMS 2.x into Page Details toolbar item (this built-in checker is being deprecated in LiveWhale 3.0).
LiveWhale 2.20.1 6/15/2025
- Add the year to the start date of a calendar event’s date range when it differs from the year of the end date.
- Added month and year variables to the calendar’s month day template.
- SiteImprove crawler is now permitted to bypass normal bot/scanner rules to refresh the page cache on its own, to ensure more up-to-date reporting for SiteImprove users.
LiveWhale 2.23.0 3/8/2026
- Updated the search weighting of quoted phrases so exact matches appear higher in the results, ahead of individual word matches (when sorting by relevancy).
- LiveWhale CMS: Removed partial inside-word matching from QuickAccess plugin (“art” will still return “College of Arts & Sciences” but will no longer return “department”).
LiveWhale 2.23.0 3/8/2026
- You can now skip the content_basic.css that loads with each WYSIWYG editor by enabling the new WYSIWYG_SKIP_BASIC_CSS global config option. This is useful if you wish to more fully style the WYSIWYG editor without needing as many overrides.
LiveWhale 2.20.2 7/13/2025
- Restored the ability to drag the corner of full wysiwyg areas to resize them. (Limited wysiwyg fields do not resize.)
LiveWhale 2.23.0 3/8/2026
- Fixed an issue where a multi-day event spanning multiple years could sometimes be excluded from upcoming events listings after re-saving.
- Fixed an issue affecting RSVP Waitlists where when the next registration in the waitlist had more than 1 attendee, it could “hold up” the waitlist and allow new registrants to take empty spots before the waitlist could be used. Now, all new RSVPs will go onto the waitlist as long as any waitlist spots are in use. [Forum discussion about waitlists]
- Fixed a bug that caused category and tag filters to be added multiple times when they contained an ampersand.
- Fixed content type filtering on the backend search page.
- Fixed the show all items in event type links that appear on the search page when searching all content types.
- Fixed an issue where using date_format on an XPHP or widget field variable could be mis-formatted when the date includes a year.
- Fixed an issue where login links using &referer=1 could sometimes fail if the HTTP referer url isn’t found. Now, &referer=1 login links will fall back to redirecting to the homepage / on a successful login.
- Fixed an issue affecting CSV image imports where servers would reject requests lacking a user agent. (A user agent is now included when requesting CSV image urls for download.)
- LiveWhale CMS Only
- Fixed issue affecting QuickAccess results not sorting by category when categories are used.
- Fixed an issue where users without the pages_manage permission (“Add, edit, and delete navigations, create and delete pages”) were able to Duplicate pages from the Your Pages manager.
- Added a failsafe check for certain cases where the Navigation editor would save a fully-empty list of links, preventing this edge-case behavior from emptying out navigations unintentionally.
- Fixed an issue where noindex_ttl for events wasn’t adding metatags to the /live/events version of an events URL.
LiveWhale 2.22.0 12/7/2025
- Linked Calendar fixes
- Fixed an issue introduced in 2.21.1 that would auto-restore even manually deleted Linked Calendar events (one-off, or via Save and reset all events). Now, only automatically deleted events are candidates for auto-restore. Other events can still be manually restored from the trash can, unlinked from the Linked Calendar feed.
- Fixed an issue that could prevent ATTACH: images from Linked Calendars from being loaded in certain front-end contexts.
- Fixed an issue with copying custom fields via linked calendar to instances of a repeating event.
- Repeating and multi-day event fixes
- Fixed an issue affecting ICAL “All events in series” links for monthly events that repeat by day of the week which could cause the wrong week to be selected in some cases.
- Fixed an issue where a link copy of a multi-day event would become out of sync when the parent event was later switched to a single-day event.
- Fixed an issue where repeating events whose start/end dates are later edited could fail to appear in certain upcoming events lists.
- Fixed an issue where the front-end calendar’s “repeats_end” value could be erroneously empty when events are set to repeat by number of occurrences rather than end date.
- Fixed an issue where the dashboard “Upgrade Scheduled” notice could sometime show a date in the past for sites using SELF_UPDATE=true.
- Fixed an issue where events could erroneously be skipped from only_today=true widgets or API requests.
- Fixed an issue where a custom variable containing widget settings (<arg id=”“> tags) wouldn’t work if loaded conditionally into a widget.
- Fixed an issue affecting enforcement of best-practice line lengths for ICAL output in LiveWhale-generated ICAL feeds.
- Fixed calendar bug that caused the event detail AJAX request to query for event_id when the slug was numeric.
- Fixed broken links for events already on a page when adding more events by clicking a pagination link.
- Fixed a bug that caused the wrong date and time string to display on calendar list views for events that spanned daylight savings offsets.
- Fixed a PHP 8.3 compatibility bug when loading calendar preload results.
- Fixed a case where repeated calls to the logout function could result in duplicate cookies being set, overfilling the allowed header size.
- Fixed an issue that could cause custom fields to not be returned in JSON API v1 results.
- Fixed an issue with using custom fields on locations in a locations widget.
- Fixed an issue affecting event links and prevented events from loading for sites using the old-style #! urls (non-pushstate). This URL style will be fully deprecated in LiveWhale 3.0.
- Fixed an issue that prevented mailto: email links from honoring “open in a new window” setting in WYSIWYG areas.
- Fixed a bug with AP style date formatting that could cause DTEND to be parsed incorrectly in an ICAL feed.
- Fixed an issue where a dev server could periodically report a missing backup when attempting to run a content sync from production.
- Fixed a JavaScript bug that prevented date and time pickers from closing after selecting a value when the beta Planning View is enabled.
- LiveWhale CMS Only
- Fixed a bug that caused all navigation data to be lost under with an unusual save sequence.
- Fixed an issue affecting the addition/removal of disallows from the robots.txt refresh process.
- Fixed an issue that could cause the editor toolbar to appear on the front-end for profile-only editors.
LiveWhale 2.21.1 9/7/2025
- Fixed an issue that prevented quoted / exact searches from being permitted on the frontend calendar.
- Fixed an issue where externally-linked events from a linked calendar source could not have their external url edited or validated properly.
- Fixed a bug introduced in 2.21.0 affecting the “categories” variable on event list and event details templates, which resulted in an HTML-formatted string being returned where previously there was an array (even with the new USE_CATEGORY_LINKS_IN_EVENTS_WIDGETS flag disabled).
- Fixed an issue where inline style or script tags in format_widget settings could be stripped or malformed.
- Fixed an issue where loading Linked Calendars from GiveCampus.com feeds could occasionally fail, added a workaround to more reliably load those events.
- Fixed an issue where individual requests that toggle between empty and not-empty (widget outputs, say) weren’t always correctly updating the cache in the empty state.
- Fixed an issue affecting the saving of new locations attached to drafted content.
- Fixed an issue affecting the saving of repeating monthly events on sites where USE_AP_STYLE date formatting was enabled.
LiveWhale 2.21.0 8/17/2025
- Fixed a PHP 8.1 incompatibility between curl and SSL that could prevent the frontend page cache from updating.
- Fixed an issue where using “Remove tag…” from the “With checked items…” dropdown could erroneously remove all tags, instead of just the one you selected.
- Fixed an issue where events with custom fields that have is_details=true might not enforce title linking in cases where the custom field has data to show in details view.
- Addressed an XSS vulnerability affecting /live/resource stylesheet and script URLs.
- Fixed an issue where choosing from a library of images using grid view could cause two actions when clicking a thumbnail (selecting the image and previewing it).
- Fix an issue, introduced in 2.20.0, that could prevent the calendar setting enable_home_view=true from working as intended.
- Improved page cache refreshing across multiple web nodes when custom URLs and custom details templates are used.
- Fixed an issue where certain clean-css warnings were appearing in rendered CSS.
LiveWhale 2.20.2 7/13/2025
- Fixed an issue where Linked Calendars could occasionally get “stuck” in the refreshing state, preventing them from being updated in the next hourly sync.
- Fixed a bug, introduced in LiveWhale 2.20.1, which could cause newly created event series to not show all events even when hide_repeats settings should be showing all instances.
- Fixed an edge-case issue where certain widget settings like include_javascript could be overwritten by settings from a nested widget.
- Fixed a typo in the events RSS feed formatting for categories_campus.
- LiveWhale CMS Only
- Fixed an issue with generating calendar event URLs when calendar_details_embed_url is configured.
- Robots.txt refreshing now happens asynchronously, and on login any hidden pages from the database missing from robots.txt will be added.
- Fixed an issue where malformed LiveURLs referencing custom details templates could sometimes result in infinite redirect loops.
- Fixed an issue, introduced in LiveWhale 2.19.0, that would erroneously strip /type/ arguments from tag details pages thinking they were absent custom detail templates. An exception has been added for /live/tags details to preserve earlier functionality.
LiveWhale 2.20.1 6/15/2025
- Added robots.txt overwrite protection for LiveWhale-managed robot rules.
- Fixed an issue that could prevent the group calendar url from appearing in the canonical URL for individual events.
- Fixed an issue that could cause an erroneous redirect on a tag details request.
- Fixed an issue, introduced in 2.16.0, that could unintentionally affect the default formatting of /live/rss/ API endpoints. This fix restores the normal RSS syntax unless you’ve specifically chosen to override it using _ingredients/templates/widgets/events.rss_default.xml.
- Upgraded the clean-css-cli npm module to version 5.6.3, fixing an issue where styles in :not() declarations could become malformed.
- Fixed an issue that prevented async curl requests from being able to bypass the load balancer.
- Removed defunct “Hide Details” toggle from image uploader modal.
LiveWhale 2.23.0 3/8/2026
- Added “related_content” as an optional response field to the JSON API v2 endpoint. [Docs: JSON API]
- You can now use XPHP variables inside of format_widget wrapper formats.
- The lw_cal_tags.html component now supports an input value=”Tag Name” that’s distinct from the visible label. The label text is still used for backwards compatibility when no input value is found for a selected item.
- Privacy settings can now be accepted via the public submission form using the news_visibility or event_visibility field. [Docs: Public Submissions]
LiveWhale 2.22.0 12/7/2025
- You can now use relative dates (“today”, “+1 week”, “-7 day”) in widget “filter” arguments.
- During Linked Calendar syncing, the “has this item changed?” check now runs after custom code, so you can use the onBeforeSync to trigger data changes that will get captured on the next automatic or manual sync.
- Added support for custom variables in the format_widget arg of inline galleries.
LiveWhale 2.21.0 8/17/2025
- Added support for <button> to be used in place of <a href> in the calendar scroll link component.
LiveWhale 2.20.2 7/13/2025
- Public submission forms with related content URLs (event_url or news_url) can now accept user-submitted titles for those links with the new fields event_url_title and news_url_title. If absent, link title will default to “More Information”. [docs]
- Added capability for user to set SAML username mapping on first SAML login, or when SAML_DEBUG is enabled. Also added new option SAML_DEBUG=’silent’ which tracks all received IdP attributes without interrupting login. [docs]
- Added group id (gid) format variable to locations widget output.
LiveWhale 2.20.1 6/15/2025
- The user setting “Disable minimization, concatenation, and client-side browser caching of all scripts and stylesheets” now applies to back-end resources as well as front-end styles/scripts.
- Custom fields that are configured without a unique name now appear as a dashboard configuration warning.
LiveWhale 2.23.0 3/8/2026
- Relaxed a security rule introduced in 2.20.0 that blocked all REST requests with very long depths (50+ slashes) to allow long requests from LiveWhale Calendar widgets, where many embedded widget arguments could result in long REST requests.
- Optimized file and image requests to leverage Apache and free up PHP resources faster.
- Updated PHPMailer from version 6.6.4 to 7.0.2 to prepare for Azure OAUTH SMTP support.
- Updated SAML Toolkit to v4.3.1 and xmlseclibs to 3.1.4 for PHP8 compatibility.
LiveWhale 2.22.0 12/7/2025
- Performance improvement to linked calendar syncing and auto-restore from trash added in 2.20.1.
- Performance improvement: aggregated a few additional JS and CSS resources on the front-end calendar to improve calendar load by removing a few HTTPS calls.
- Fixed an XSS bug, introduced in LiveWhale 2.21.1 with support for quoted calendar search strings, that could allow JavaScript to be inserted into the search “now showing” component.
- Addressed a possible XSS injection vector via /live URLs.
- Consolidated code checking for broken URLs into one isBrokenLink function, fixing some cases where link checker might return erroneous results.
LiveWhale 2.21.1 9/7/2025
- Fixed an operating-system-level SSL compatibility issue that could prevent LiveWhale from issuing certain types of internal HTTP requests.
- Various performance improvements around caching and handling of bot traffic and traffic spikes.
- Added a check to fallback to unminified scripts if an error is detected by the minification process.
LiveWhale 2.21.0 8/17/2025
- Reverted a security rule update from 2.20.2 that had negatively affected the Upgrade Pull process.
- Updated a performance improvement for staggering Linked Calendar syncing to work with Ubuntu 24.04.
- Silenced a number of erroneous PHP warnings to improve usefulness of error logs.
- Improved database performance with some query optimizations.
LiveWhale 2.20.2 7/13/2025
- Performance improvement to prevent excess server load when refreshing the cache entries for a lot of LiveURLs at once.
- Extended the time limit for upgrade steps to 1 hour.
- Automatically truncate the widget cache if it exceeds 10 GB, to prevent upticks in malicious traffic from rapidly filling disk space.
- PHP8.3 compatibility fix for an issue which could break the configuration of a site’s internal UUID.
LiveWhale 2.20.1 6/15/2025
- Performance Improvements
- Removed hidden “summary” field from calendar month view to improve loading times.
- Custom fields are now only loaded on event listings if they are included in the event theme component.
- Variables that are commented out in calendar components are now skipped when pulling event listings to improve loading times.
- Improved search page performance by adjusting the handling of exact phrases and by improved segmentation of search index data by content type.
- Improved caching of calendar results in cases where multiple themes or timezones may be used.
- Improved performance by increasing caching of per-group timezone settings.
- Improved performance of front-end events requests by indexing certain hide_repeats information.
- LiveWhale CMS only: Added some security checks to prevent spam submissions in LiveWhale forms.
New versions will be announced via Dashboard messages in LiveWhale, or you can sign up to receive email notifications.