It’s been a long road, and we are extremely grateful to the huge amount of collaboration that moving to GitHub has afforded us. This release marks a real turning point in community involvement and sheer number of commits that have taken place—almost double the number since the last release than the project had as a whole up to v4.5.7.

A lot of the changes are behind the scenes: documentation, code tidying, more modern programming concepts, more API functions, with lots (and lots) of deprecated functionality. But you’ll also notice the amazing amount of effort gone into the workflow. Interface enhancements that we’ll build upon in future releases; links for duplicating Articles, Pages, Forms and Styles; performance optimisations; language changes; new tags; the list goes on and the highlights are presented below.

You can discuss this announcement here.


You can either download from the links below, or from the GitHub project repository directly (please take a minute to ‘star’ our project too if you like it!).

File download

File size 1465 kB | Created
File download


File size 1313 kB | Created

Installation and upgrade

As with all releases, please ensure you log out of your admin side prior to upgrade and refer to the README.txt file in the download archives for detailed instructions.

If your admin side previously ran Classic or Remora, you’ll be notified by a full-screen message that you’ll be redirected to Hive. Just refresh the page once you’ve read the message and the upgrade will continue. Both Classic and Remora have been dropped in favour of the more modern and fully responsive Hive (which has a lovely ‘neutral’ version if you’ve had enough of yellow), but if anyone cares to bring the old themes up-to-date, by all means make an admin theme for them.

Anybody who runs ultra-modern MySQL, MariaDB or Percona, or is using strict mode, might encounter an unfortunate upgrade issue to do with null dates. If this is the case and you end up stuck on the Languages panel or your upgrade process throws date-based errors, fear not: there are workarounds, but it might involve you jumping through a few hoops. We will address this in future releases.

List of major changes

  • Textile v3.5.
  • Improved RTL language support.
  • Improved admin side UI.
  • Requires PHP 5.3.3 or newer. Compatible with PHP 7 and MySQL 5.7 (thanks Ruud van Melick).
  • New tags: <txp:authors />, <txp:meta_description />, <txp:if_description> and <txp:if_yield>.
  • No more plaintext passwords sent: password reset requests are handled directly on the server.
  • Stronger password hashes and strength meter implemented (zxcvbn).
  • Performance increases due to cache-friendly public side database queries, parser improvements and reduction of admin-side queries (thanks Ruud van Melick and etc).
  • Added: Support for adding other markup languages (for example, Markdown) via plugins.
  • Added: Default article publishing status preference.
  • Added: Support for custom CSS and JavaScript files in admin themes, for advanced users.
  • Removed: Import panel – the blog import options were obsolete (thanks Ruud van Melick).
  • Removed: Commenter IP ban feature – this method of banning is unreliable and becoming obsolete (thanks Ruud van Melick).
  • Removed: Modernizr – unnecessary due to Internet Explorer 11 being the minimum Internet Explorer browser requirement.
  • Changed: The /textpattern/theme/ directory has been renamed to /textpattern/admin-themes/ for stronger differentiation between this and the public-side /themes/ directory planned for Textpattern 4.7. Additionally prevents breakage of preferences panel caused by old, incompatible themes residing in the previously titled admin theme directory during upgrade.
  • Changed: <txp:article_custom /> accepts exclude attribute to exclude articles by a comma-separated id list.
  • Changed: <txp:author /> accepts escape and format attributes.
  • Changed: <txp:category_list /> accepts html_id, limit and offset attributes.
  • Changed: <txp:comments_form/>: Deprecated isize, msgcols, msgrows, msgstyle, previewlabel, submitlabel, rememberlabel, and forgetlabel attributes .
  • Changed: <txp:comments/>, <txp:comments_form/>, <txp:comments_preview/> and <txp:popup_comments/> can be used as container tags.
  • Changed: <txp:comment_email_input /> accepts size attribute.
  • Changed: <txp:comment_message_input /> accepts cols and rows attributes. Removed capability to apply an immediate style to the element.
  • Changed: <txp:comment_name_input /> accepts size attribute.
  • Changed: <txp:comment_preview /> accepts label attribute.
  • Changed: <txp:comment_remember /> accepts rememberlabel and forgetlabel attributes.
  • Changed: <txp:comment_submit /> accepts label attribute.
  • Changed: <txp:comment_web_input /> accepts size attribute.
  • Changed: <txp:link /> accepts id and name attributes.
  • Changed: <txp:meta_author /> accepts escape and format attributes.
  • Changed: <txp:meta_keywords /> accepts escape, format and separator attributes.
  • Changed: <txp:password_protect /> can be used as a container tag.
  • Changed: <txp:recent_articles /> accepts offset attribute.
  • Changed: <txp:section_list /> accepts html_id, limit and offset attributes.
  • Changed: Deprecated <txp:keywords /> tag. Use <txp:meta_keywords format="" /> instead.
  • Changed: Deprecated <txp:rsd /> tag.
  • Changed: Deprecated breakclass attribute for <txp:comments /> and <txp:image_info />.
  • Changed: Removed Form (article) Preview facility.
  • Changed: Removed empty ‘About’ section from new installs.
  • Changed: Tag builder has been reworked as a dialog window.
  • Changed: Increased page and css sizes in txp_section table.
  • Changed: ‘Prevent widowed words in article titles’ preference defaults to ‘No’ in new installs.
  • Changed: ‘Include email in Atom feeds’ preference defaults to ‘No’ in new installs.
  • Changed: Detailed debug trace log.
  • Changed: Default charset is now utf8mb4: supports a wider range of characters, including emoji.
  • Changed: Removed built-in Gzip compression of RSS feed and Atom feed.
  • Developer: getNextPref() now returns array members next and prev with article data, no longer returns array members next_id, next_title, next_utitle, next_posted prev_id, prev_title, prev_utitle, prev_posted.
  • Developer: getNeighbour() returns false if no matching neighbour article exists.
  • Developer: Uses mysqli extension for database access, lose dependency on mysql extension.
  • Developer: Uses the TXP ‘now()’ function instead of the SQLNOW’ function to create cache-friendly, faster SELECT queries.
  • Developer: Added jQuery UI library to admin side.
  • Developer: Added Prism code highlighting for <code> and <pre><code> to admin side. The following languages are supported (when specified via classnames on the <code> tag, i.e. using class="language-xxx"): language-markup, language-css, language-clike, language-javascript, language-json, language-php, language-markdown, language-textile. Optional line numbers are also supported when code highlighting, by adding an additional classname of line-numbers to the parent <pre> tag.
  • Developer: Added DocBlock documentation comments throughout the source code.
  • Developer: Adherence to PSR coding standards where possible.
  • Developer: Function signature for wrapRegion() changed: 7th parameter ARIA role dropped, as it shouldn’t be stated for semantic tags such as <section>.
  • Developer: Refactored Validator, Constraint, and theme classes into the Textpattern namespace; deprecated their txplib_validator and txplib_theme implementations.
  • jQuery 1.12.4.
  • jQuery UI 1.12.0.


Plugin support

Although we strive to minimise the amount of backwards-compatibility issues introduced, with such a huge step up and the myriad changes to the admin-side layout structure there are bound to be casualties. A lot of plugins have been improved to take advantage of the new functionality and layout but, if not, please badger your favourite plugin authors to upgrade their code to the latest. We shall try and improve the documentation, including the new callbacks and API functionality, over the coming weeks.

As a security enhancement, all public tags now require registration so if you spot a plugin throwing an “unregistered tag” warning in debugging mode, the fix is trivial.

Credits and thanks

As always, we couldn’t have brought you this release without the incredible help of the community. Your support, beta testing, pull requests, documentation, plugins and, above all, patience are an amazing asset to the product. Please continue to get involved in whatever capacity you can as we ramp up the heat for the next version. Vive Textpattern!