A minimal, templated Tapestry application needs only three files:
Tapestry uses bytecode manipulation to transform page and component classes at runtime. This approach allows the page and component classes to be written as simple POJOs, with a few naming conventions and annotations potentially triggering substantial additional behavior at class load time. Tapestry versions 5.0, 5.1 and 5.2 used the Javassist bytecode manipulation library. Subsequent versions replaced Javassist with a new bytecode manipulation layer called Plastic that is based on ObjectWeb ASM.1112
Tapestry 5 versions up through 5.3 bundled the Prototype and script.aculo.us JavaScript frameworks, along with a Tapestry-specific library, so as to support Ajax operations as first-class citizens. Third party modules are available to integrate jQuery instead of, or in addition to, Prototype/Scriptaculous.
Starting with version 5.4, Tapestry includes a new JavaScript layer that removes built-in components' reliance on Prototype, allowing jQuery or another JavaScript framework to be plugged in.13
Version 5.4 also introduces support for JavaScript modules using the RequireJS module loading system.
The Tapestry project documentation cites four "principles" that govern all development decisions for Tapestry, starting with version 5 in 2008:14
Tapestry has been criticized as not being backward-compatible across major versions, especially noted in the transition from version 4 to version 5, where no clean migration path was available for existing applications.15 Project team members have acknowledged this as a major problem for Tapestry's users in the past, and backward compatibility was made a major design goal for Tapestry going forward. From early on in the development of version 5, backward compatibility was listed as one of Tapestry's four new "Core Principles", and two of the other three were intended to make the evolution of the framework possible without sacrificing backward compatibility. Project team members claim that all Tapestry releases since 5.0 have been highly backward compatible.
Early criticisms of Tapestry 5 also mentioned documentation as a shortcoming. Project members now claim that this deficiency has been largely addressed with a thoroughly revised and updated User's Guide and other documentation.
Since version 5.0, Tapestry has bundled the Prototype and Scriptaculous JavaScript libraries. According to Howard Lewis Ship, in the 2008-2009 timeframe these were reasonable choices. Since then, however, Prototype's popularity has declined, and jQuery's has risen dramatically. In response, the Tapestry community developed modules that allowed jQuery to be used in addition to, or instead of, Prototype. Meanwhile, the current version of Tapestry, 5.4, removes the dependency on Prototype entirely, replacing it with a compatibility layer into which either jQuery or Prototype (or potentially any other JavaScript framework) can be plugged.
According to Howard Lewis Ship, Tapestry was initially conceived as an attempt to implement in Java some of the general concepts and approaches found in WebObjects, which was at that time written in Objective-C and closed-source.16
Apache Wicket was developed as a response to the complexity of early versions of Tapestry, according to Wicket originator Jonathan Locke.17
Facelets, the default view technology in JavaServer Faces, was reportedly inspired by early versions of Tapestry, as an attempt to fill the need for "a framework like Tapestry, backed by JavaServer Faces as the industry standard".1819
"Howard Lewis Ship of Tapestry interview [part 1] (2012-10-22)". Archived from the original on 2013-01-22. Retrieved 2013-01-28. https://web.archive.org/web/20130122114626/http://devrates.com/post/show/345948/howard-lewis-ship-of-tapestry-interview-%5Bpart-1%5D ↩
Drobiazko 2012, p. 1. ↩
"Tapestry Central: Tapestry 5 Updates". 24 July 2006. http://tapestryjava.blogspot.com/2006/07/tapestry-5-updates.html ↩
Tapestry in Action - Preface by Howard Lewis Ship ↩
"Class Reloading - Apache Tapestry". https://tapestry.apache.org/class-reloading.html ↩
Drobiazko 2012, p. 20. ↩
Drobiazko 2012, p. 7. ↩
"Performance and Clustering - Apache Tapestry". https://tapestry.apache.org/performance-and-clustering.html ↩
"Forms and Validation - Apache Tapestry". https://tapestry.apache.org/forms-and-validation.html ↩
"Meeting Plastic I: Introduction | Java Magic". 18 April 2011. http://tawus.wordpress.com/2011/04/18/meeting-plastic/ ↩
"[asm] Plastic: An ASM wrapper for Tapestry 5.3". Archived from the original on 2013-06-18. Retrieved 2013-02-21. https://web.archive.org/web/20130618005639/http://mail-archive.ow2.org/asm/2011-04/msg00033.html ↩
"Tapestry Central: Zeroing in on Tapestry 5.4". 19 October 2012. http://tapestryjava.blogspot.com/2012/10/zeroing-in-on-tapestry-54.html ↩
"Principles". 2010-12-21. Archived from the original on 12 October 2012. Retrieved 2012-10-12. https://tapestry.apache.org/principles.html ↩
"Tapestry5 future compatiblity [sic]". 2009-04-30. Archived from the original on 2013-01-21. Retrieved 2013-01-21. https://web.archive.org/web/20130121232236/http://tapestry.1045711.n5.nabble.com/Tapestry5-future-compatiblity-td2431085.html ↩
"DevRates | Howard Lewis Ship of Tapestry interview [part 1]". Archived from the original on 2013-01-22. Retrieved 2013-01-28. https://web.archive.org/web/20130122114626/http://devrates.com/post/show/345948/howard-lewis-ship-of-tapestry-interview-%5Bpart-1%5D ↩
"Wicket: Do we need yet another presentation layer framework?". www.theserverside.com. Archived from the original on 9 September 2004. Retrieved 11 January 2022. https://web.archive.org/web/20040909074534/http://www.theserverside.com/news/thread.tss?thread_id=28162 ↩
"Facelets: JavaServer Facelets". facelets.dev.java.net. Archived from the original on 6 July 2007. Retrieved 11 January 2022. https://web.archive.org/web/20070706220453/https://facelets.dev.java.net/ ↩
"JSF Central - Inside Facelets Part 1: An Introduction". www.jsfcentral.com. Archived from the original on 13 January 2013. Retrieved 11 January 2022. https://web.archive.org/web/20130113100928/http://www.jsfcentral.com/articles/facelets_1.html ↩
"Tapestry: Java Web Components Release 2.0 is Out". Retrieved 2013-01-20. http://www.theserverside.com/discussions/thread.tss?thread_id=12750 ↩
"Tapestry 3.0 Final Release". Retrieved 2013-01-20. http://www.theserverside.com/discussions/thread.tss?thread_id=25354 ↩
"Tapestry 4.0 Released". Retrieved 2013-01-20. http://www.theserverside.com/news/thread.tss?thread_id=38407 ↩
"Tapestry and JSR-303 Bean Validation API". 2010-01-04. Archived from the original on 16 April 2010. Retrieved 2010-03-13. http://blog.tapestry5.de/index.php/2010/01/04/tapestry-and-jsr-303-bean-validation-api/ ↩
"Announcing Tapestry 5.2". 2010-12-17. Archived from the original on 14 November 2012. Retrieved 2012-11-14. https://tapestry.apache.org/2010/12/17/announcing-tapestry-52.html ↩
"Using JSR 330 standard annotations - Apache Tapestry". https://tapestry.apache.org/using-jsr-330-standard-annotations.html ↩
"JavaScript Rewrite". Archived from the original on 2012-11-14. Retrieved 2013-01-20. https://web.archive.org/web/20121114180615/http://tapestry.apache.org/javascript-rewrite.html ↩