Apostrophe 4.30.0: A New Release Cadence, Accessibility Improvements, and Bug Fixes #5410
BoDonkey
announced in
Release Notes
Replies: 1 comment
-
|
Just a quick follow-up to call out the two additional security vulnerabilities that did not make the list at the top of the post, due to the fact that they technically arrive via dependency bumps:
|
Beta Was this translation helpful? Give feedback.
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
Hello Apostrophe Community!
Apostrophe 4.30.0 is a focused maintenance release: bug fixes, accessibility improvements, and security patches with no new features. It is also the first release under our new release model.
A New Release Cadence
Starting with this release, ApostropheCMS ships on a predictable two-track schedule designed to make upgrades safer and more manageable, particularly for teams running production sites with multiple stakeholders.
Monthly maintenance releases focus on bug fixes, security patches, and accessibility improvements. As a strong default, they will not introduce UI changes or new features — so they are generally safe to apply without workflow disruption. Occasionally, when a missing capability constitutes a significant enough gap in the UX that we consider it a bug, we may include a targeted correction. We'll flag those clearly when they occur.
Quarterly feature releases will group related work into coherent, themed sets with advance communication before they ship. The next quarterly release is scheduled for June 10, 2026, with a theme of Developer Activation.
And starting with our June release, the new two-track release plan will allow teams to decide whether to follow our latest releases in production, or receive those one quarter later while continuing to get bug fixes and security fixes in the meantime. This will allow dev teams to more fully evaluate “latest” while production remains on “stable.” We are still finalizing the technical approach for how teams will manage which track they are on, and will share that guidance ahead of the June release. In the meantime,
npm updatecontinues to work as it always has.This model came directly out of feedback from enterprise teams who need to be able to apply a security patch without absorbing an unannounced UI change, and who need enough advance visibility into upcoming features to plan their own work. We think it will benefit teams of all sizes.
A new roadmap
As part of our new release cadence, we’ve also shared a clearer roadmap to upcoming quarterly feature releases. As always you can also submit and upvote possible features. Let us know what you think.
Layout Widget: Editor Control Over Gap
Previously, the spacing between items in a layout widget grid could only be set by a developer in module code. Editors can now control it themselves through the
stylessystem, either site-wide via a globallayoutGappreset, or per widget via agapstyles field. A newclassNameoption also allows developers to attach additional CSS class names to the widget's grid container for more flexible styling. This improvement applies to both standard Nunjucks-based projects and projects using the Astro integration. Note that, as always, developers must explicitly add this feature to their sites if they want it.Accessibility Improvements
This release includes a focused round of fixes to bring the admin UI into closer compliance with accessibility guidelines, covering ARIA semantics, screen reader support, and labeling across the navigation bar, locale switcher, and admin bar controls. The
@apostrophecms-pro/doc-template-libraryand@apostrophecms-pro/section-template-librarymodules also received improved tooltip labels.Security Updates
This release includes six security fixes across
apostrophecore,sanitize-html,launder, and@apostrophecms/cli. We encourage all users to upgrade promptly.This release addresses:
xmptag insanitize-html, which could pass forbidden markup through the sanitizer even whenxmpwas not explicitly permitted; via a malicious full name containing HTML executed in the page title tooltip, exposing other users to XSS; and viajavascript:URLs in the image widget link field, exploitable by any user with editing privileges including contributors — a database migration is included to strip any such URLs already presentimageImportAllowedHostnamesoption on@apostrophecms/rich-text-widget. Note that this means you must configure these new options if you are using the API-based HTML import feature withimgelements.baseUrlorAPOS_BASE_URLto be set before it will operate (this is automatic in multisite projects). This only affects projects withpasswordReset: trueenabled on the login module@apostrophecms/cli, where passwords or starter kit URLs containing malicious punctuation could be used to run arbitrary shell commands in scripted useDependency-related security fixes
sanitize-html2.17.4 and a dependency bump to ensure it is used in apostrophe.urlfield type, a database migration to clean up any existing XSS, and (for defense in depth) upgrades inlaunderto ensure it uses the same high-quality URL sanitization employed bysanitize-html.Thanks to Vincenzo Turturro, Muhammad Uwais (two issues), SPIDY, Nitro13urn, Yiğit Şengezer, and Sainithin0309 for reporting these vulnerabilities.
Additional Fixes
idattribute values generated by the admin UI have been corrected<meta charset>tag has been removed fromouterLayoutBase.html; the charset is now consistentlyutf-8(the legacy configuration option is ignored, asutf-8is the only legal value per spec)apostropheandoembetterhave been updated to remove a number of services that formerly supported oembed for the general public but no longer do so. While there is no active security risk today, removing these eliminates potential XSS attack vectors should those domains ever lapse. Developers can further prune this list using the newminimumAllowlistandminimumEndpointsoptions on the@apostrophecms/oembedmoduleaposResponseerrors are now logged server-side in the Astro process@apostrophecms/clihave been bumped to close vulnerabilities inuuid,fast-xml-parser, andshelljs. The first two were not used in a sensitive or vulnerable way within ApostropheCMS; theshelljsvulnerability would only be exploitable if a developer could be convinced to enter malicious commands as CLI inputCommunity Contributions
We're grateful to the contributors who helped make this release possible. Sainithin0309 flagged the oembed long-term security concern that led to this cycle's cleanup. Harouna Traore contributed the
aposResponseerror logging improvement to the Astro integration.You should upgrade
This release contains important security fixes and we encourage all users to upgrade promptly with
npm update.🚀 Happy coding!
Apostrophe 4.30.0
Adds
layoutGappreset and per widget via agapstyles field. A newclassNameoption allows additional CSS classes to be added to the widget grid container.Fixes
idattribute values generated by the admin UI.<meta charset>tag fromouterLayoutBase.htmland standardized charset toutf-8.apostropheandoembetterto remove oembed services that no longer support public access, eliminating them as a potential future XSS vector. NewminimumAllowlistandminimumEndpointsoptions on@apostrophecms/oembedallow developers to prune the list further.Security
baseUrlorAPOS_BASE_URLis set, preventing a vulnerability where ApostropheCMS could be convinced to send emails with links to attacker-controlled sites. Only affects projects withpasswordReset: trueon the login module. Thanks to SPIDY for reporting.javascript:URL in the image widget's link URL field. A migration is included to strip any such URLs already in the database. Thanks to Muhammad Uwais for reporting.imageImportAllowedHostnameson@apostrophecms/rich-text-widgetto opt in. Thanks to Yiğit Şengezer and Sainithin0309 for reporting.sanitize-htmland the dependency was bumped. Thanks to Vincenzo Turturro for reporting the vulnerability.linkHreffield of image widgets was an XSS vulnerability because it did not use theurlfield type. This means that a user with editing privileges could potentially carry out XSS. In addition, we have updated thelaundermodule to sanitize URLs more robustly for theurlfield type, and bumped that dependency. Also, a database migration is included to clean any XSS attacks that could be present in existing links. Thanks to Muhammad Uwais for reporting the issue.Accessibility
AposContextMenumachinery.AposLocalePicker).aria-label..apos-sr-onlyso screen-reader-only content is correctly exposed to the accessibility tree.aria-label.Pro Modules
@apostrophecms-pro/cypress-tools1.0.0-beta.27 (2026-04-15)Automated functional browser tests are an important part of quality assurance for enterprise websites and web applications. Cypress is an industry-standard, open-source library for carrying out automated functional browser tests. This module provides a collection of conveniences for testing the ApostropheCMS admin UI within Cypress. Explore our documentation to learn how this extension can enhance your project. Once you're ready, obtain a license and install it through Apostrophe Workspaces. For further details or inquiries, feel free to contact us or visit our pricing page.
Adds
dateFieldssupport forapos:dbUpdateandapos:dbFindtasks to restore BSON date types lost during Cypress JSON serialization.getRecentlyEditedModalandopenRecentlyEditedModalcommands.@apostrophecms-pro/doc-template-library2.2.8This module solves the "blank page problem" for developers and product managers, and makes it faster for editors to create content. doc-template-library allows for the configuration of default widgets and pre-populated content on piece or page templates, and to re-use existing layouts. Explore our documentation to discover how this extension can enhance your project. Then, effortlessly integrate it through our new Apostrophe Workspaces. For further details or inquiries, feel free to contact us or visit our pricing page.
Changes
@apostrophecms-pro/section-template-library1.0.1Accelerate content creation and maintain design consistency by turning your best widgets into reusable section templates. Content teams can instantly insert components without recreating layouts from scratch. This module is now stable and ready for production use. Explore our documentation to discover how this extension can enhance your project. Then, effortlessly integrate it through our new Apostrophe Workspaces. For further details or inquiries, feel free to contact us or visit our pricing page.
Changes
Free Modules
@apostrophecms/apostrophe-astro1.12.0Adds
layoutGappreset and per widget via agapstyles field. A newclassNameoption allows additional CSS class names to be added to the widget's grid container.aposResponseerrors server-side in the Astro process. Thanks to Harouna Traore for this contribution.Utilities
@apostrophecms/cli3.6.1The Apostrophe CLI is a cross-platform starting point for creating and configuring ApostropheCMS projects, providing a simple boilerplate generator and wrapping other useful functions into an easy to use command line tool.
Security
uuidandfast-xml-parseralthough they were not used in a sensitive or vulnerable way within ApostropheCMS. This also closes a vulnerability inshelljswhich ould only be exploited if the developer could be convinced to enter malicious commands as part of their CLI input.launder1.7.1Launder can be used to sanitize strings, integers, floats, urls, and more. It's best for cases where you've already used front-end validation to encourage smart input, and now you want to make sure your inputs are reasonable.
Security
laundernow uses and exports the best available naughtyHref function for detecting malicious URLs. sanitize-html now depends on it, and apostrophe now uses type: 'url' for the link URL field of image widgets, which leverages it. Prior to this fix, it was possible for any user with editing privileges, including a contributor, to trigger arbitrary JavaScript via a javascript: URL in the link URL field of an image widget. A migration has been included to strip any such malicious URLs already present in the database. All users of apostrophe are encouraged to upgrade to get this security fix. Thanks to Muhammad Uwais for reporting the issue.sanitize-html2.17.4This module provides a simple HTML sanitizer with a clear API.
Changes
sanitize-htmlandlaundernow share a single implementation ofnaughtyHref, based on that which previously existed insanitize-html.Security
Beta Was this translation helpful? Give feedback.
All reactions