Added: Support for PHP 8.2, PHP 8.3.1+, PHP 8.4, and PHP 8.5.
Added: Full article previews directly from the Write panel.
Added: Filter articles by image.
Added: Admin Theme prefs.
Added: Automatic, dynamic thumbnail generation (tags and back-end).
Added: SVG image support (thanks, osadl and @jools-r).
Added: Activity indicator for extended duration file/image upload processes.
Added: Multi-edit for changing author language.
Added: In-use asset counters to the Users panel.
Added: Reload language packs from disk.
Added: Shift+Space shortcut for 'Tab' indent in textareas.
Added: Input length tooltip when appropriate.
Added: PHPMailer for third-party SMTP delivery. See Admin>Preferences>Mail.
Added: <txp:date /> tag.
Added: <txp:if_article_status /> tag.
Added: <txp:if_items_count /> tag.
Added: Global 'variable' attribute.
Added: Global 'offset' attribute can be set by URL parameters.
Added: 'parent' attribute to <txp:category />.
Added: 'inline' value to 'format' attribute of <txp:css /> (thanks, @jools-r).
Added: 'alias' attribute to <txp:evaluate />.
Added: Ability to serve files via 'type' attribute to <txp:file_download />.
Added: 'exclude' attribute to <txp:file_download_list /> and <txp:linklist />.
Added: Site production status values to 'process' attribute of <txp:hide />.
Added: 'level' attribute to <txp:if_category />.
Added: 'match', 'separator' attribute capability to <txp:if_yield />.
Added: 'exclude', 'month' and 'time' attributes to <txp:images />.
Added: 'lang' attribute to <txp:page_url />.
Added: 'target' attribute to <txp:popup />.
Added: 'filter' attribute to <txp:section_list /> and <txp:if_section />.
Added: Plugins can be uploaded from a URL by dragging to upload textarea.
Added: Plugin compilation directly from the Plugins panel.
Added: Plugin export to .zip.
Added: Compiled plugins can be uploaded via Browse... feature.
Added: Compatible plugin upgrades directly from the Plugins panel.
Added: Create and install new plugins directly from the Plugins panel.
Added: Plugin multi-edit option: revert to last installed code content.
Added: All plugin metadata exposed in the Plugin Edit panel.
Added: Latest text translations. Thank you to all our translators.
Added: Punjabi, Slovenian and Urdu (Pakistani dialect) language support.
Added: Trailing slash URL preference.
Added: File download header preference.
Added: Option to define a Content Security Policy header for the Textpattern admin-side via config.php.
Added: Support for aggregate window functions in compatible MySQL versions.
Added: metaWeblog.newMediaObject for image upload over the MovableType API (thanks, @Melonking906).
Changed: Pending articles may be displayed on the site.
Changed: Theme page maximum size increased from 64KB to 16MB.
Changed: Allow content dates prior to 01-01-1970, and beyond 03:14:07 UTC on 19 Jan 2038. Refer to Epochalypse/Year 2038 problem for info. Adjustments for non-Gregorian (AD) dates are performed.
Changed: Display/edit 'modified' date on Files panel.
Changed: Refactored article Save panel (thanks @jools-r, @phiw13, and @cara-tm).
Changed: File Edit panel has the ability to rename and delete files, and change the download counter value (thanks, adi).
Changed: Image Edit panel has the ability to delete images.
Changed: Image Edit panel includes published date/time, which can be altered.
Changed: Pre-flight check visibility toggle.
Changed: In-use languages can not be deleted.
Changed: Deprecate <txp:search_result_count />. Use `<txp:items_count /> instead.
Changed: Section-aware default search.
Changed: Image tags can take HTML attributes.
Changed: Enhancements to 'br' tag HTML5 compliance (thanks, @jools-r).
Changed: Enhancements to SVG handling relating to non-px dimensions (thanks, @jools-r).
Changed: Enhancements to 'extension' and 'size' attributes of <txp:images />.
Changed: Enhancements to RPC functionality (thanks, @Melonking906).
Changed: Admin-theme checksums computed independently. Unused admin themes can be deleted and will no longer trigger Diagnostics alert.
Changed: Multi-site scaffold optimisations.
Changed: Wildcards in file/image/link category queries.
Changed: <txp:header /> tag requires 'form' privilege.
Changed: Articles may use external URLs directly.
Changed: Some language keys renamed to avoid invalid name clashes.
Changed: Do not generate empty syndication feeds for feedless sections.
Changed: Removed 'noopener' from target="_blank" links (now default behaviour in all supported browsers) (thanks, @phiw13).
Changed: Removed 'aria-label' attributes where 'title' already exists.
Changed: Checksums use Tiger-192,3 instead of MD5. Fewer potential clashes.
Changed: Allow PHP scripting options off by default, and Diagnostics warning.
Changed: Plugins of all types trigger verify step (with improved security).
Changed: Extend character set that can be used in tag/attribute names.
Changed: Less collision-prone custom fields name processing.
Changed: Category & section description field sizes increased to 1023 characters.
Changed: Introduce primary keys for all database tables, replacing some old indexes.
Developer: Permitted concurrent logins. See Advanced Prefs.
Developer: Removed duplicate pluggable_ui callback for article_ui›categories (thanks, @jools-r).
Developer: Added pophelp support in plugin 'lang' directory.
Developer: Articles (list) panel callbacks:
articles>fields and articles>from to manipulate the query
articles>controls to affect the button area
articles_ui>list.row (pluggable_ui) for adding table data
articles>steps for plugins to register custom panel-level functionality.
Developer: Add pre+post article_submit callbacks on article post/save.
Developer: Add getAtts($tag) method for fetching tag attributes.
Developer: Reintroduce extend_col_1 markup area on Write panel.
Developer: Add lifecycle>loaded callback for plugins run from cache.
Developer: Introduce UI class library for building interface components.
Developer: Tag registration is now mandatory.
Developer: Some of the lesser-used tags are loaded on demand from their class
to save memory. Plugins must call them via processTags() function.
Developer: Add safe_exists() function to database layer.
Developer: Move $thisversion and $txp_is_dev to constants.php.
Developer: 'Visitor logs' panel is now bound to the new 'lore' event name
(was: 'log') to prevent conflicts with privacy filters.
Developer: File upload callbacks (file_uploaded and files_uploaded pre+post).
Developer: Activation emails can be skipped via hidden notify="skip" field.
Developer: Can add &checksums=1 on Diagnostics panel URL to verify checksums.