Pure Java and Polyglot
Written in pure Java: code your pages and components in Java, Groovy or Scala.
Convention over configuration
Say goodbye to endless XML configuration files: dependency injection and meta-programming through annotations.
Highly productive
Live class reloading means that the time between seeing an error and providing the fix is seconds, not minutes.
Fast
Pure Java; no reflection, not even for property expressions. Built to cleanly support large numbers of concurrent threads without contention. Automatic GZip content compression, _javascript_ aggregation, and client-side caching.
Advanced Exception Reporting
Gives you all the tools you need to fix your problem: not just a stack trace, but every bit of information you need to know about what Tapestry was doing, why it was doing it, what went wrong, and how to fix it.
Scalable
Scales up big on a single server, and offers great options in a cluster. Ready for REST, suitable for the most stateless or stateful applications.
Adaptable and modular
Architecture is open and extensible. There's a clean way to add your own extensions, or override built-in logic. Provides integration with Hibernate and Spring. Third-party integrations with other tools, such as Quartz.
More on Tapestry philosophy