This is the consolidated list of changes between Tapestry versions 5.3 and 5.4. To upgrade to 5.4, most users who are not using deprecated features will be able to just update the dependency version in their Maven POM file or Gradle build script (or download the new JAR files) and the new version will just work. However, please read carefully below before upgrading, and also review the How to Upgrade instructions.
MarkupWriterFactory API changed
The MarkupWriterFactory interface has 3 new methods, added to support the HTML5 rules for element endings. If you have any classes that implement MarkupWriterFactory (which is rare), they'll need to be modified to implement the new methods.
Injected Scripts at Bottom
No Redirect On Form Validation Errors
In prior releases of Tapestry, when a client-side form was submitted and there were server-side validation errors, Tapestry would perform a redirect-after-post to re-render the page; this meant that the ValidationTracker object that stores validation errors would, itself, need to persist to the new render request, causing a server-side session to be created. Starting in 5.4, the default behavior for server-side validation exceptions is to re-render the page content immediately, within the same request; this obviates the need to use a persistent field to store the tracker.
Component field visibility
In prior versions of Tapestry, all instance fields of components had to be visibility private; starting with versions 5.3.2 and 5.4, this has been relaxed. Component fields may be protected, or package private (that is, no visibility modifier). Fields that are final, or annotated with @Retain may even be public. In any case, this makes it easier for pages to work with other pages in the same package, and for subclasses to more easily access the fields (including parameter fields, or injections) provided by base classes. This feature should be used with care, as it can lead to designs that are more difficult to maintain.