Skip to end of metadata
Go to start of metadata

Tynamo is model-driven, full-stack web framework based on Apache Tapestry 5.

Tynamo's mission is to provide implementations for different aspects of a full web application stack that offer reasonable out-of-the-box functionality and are easy to customize. We are intent on proving that web applications based on Java can simultaneously be high performing, easy to implement and fun to develop. We leverage existing technologies where possible and provide integrations with proven, clean and compact libraries rather than limit ourselves only to standard Java (JSRs). Tynamo is both comprehensive and modular so you are free to choose the parts you like from our full stack. And finally, we like Tapestry and our modules use Tapestry IoC extensively.

Quick status update


Latest news

Bada bing bada boom! New year, new releases - and just like that tapestry-routing 0.1.1 is ready for consumption with the latest T5 beta. There were some minor API adjustments made, otherwise it's the same, trustworthy routing module. See the tapestry-routing guide for more info!

Release notes

Update routing to T5.4 beta-26 #3
Update routing to T5.4 beta-22 #2


Tynamo team

Thanks to the enthusiastic, borderline pestering community :), yet another tynamo module, this time tynamo-federatedaccounts 0.5.0, gets an upgrade to T5.4! Use it before the code expires, see and code at

Release notes at

  • Upgrade to T5.4 #1
  • Rewrite the CollapsiblePanel component as a requirejs module #2
The little engineer was very proud of his little engine. But one day, a fellow train enthusiast noticed the engine was a leaking. They drove the train to the engine yard and... oh well, perhaps I took the metaphor too far. Suffice to say, thanks to Jochen Berger for spotting and reporting an issue in 0.6.1. Fixed and added another enhancement well.
  • ContextPath is inconsistently saved as part of the savedRequest #15
  • Access to /modules/** and /modules.gz/** should be allowed by default #14

User guide at, code at

Enjoy the ride!

Tynamo Team

Choo choo! The security train is moving again, all aboard! This is the 0.6.1 bullet train on the latest T5.4-beta-22 rail. Our rail engineers have been hard at work and delivered the following enhancements:


  • Session timeout, Login, POST form resubmission fails #7
  • Redirecting to saved XHR url can lead to Exceptions #6
  • add German messages for the login form #5
  • Upgrade security.loginForm component to take advantage of new Twitter Bootstrap look and feel of Tapestry 5.4 #3

User guide at, code at

Enjoy the ride!

Tynamo Team

Once again, thanks to Alejandro Scandroli's brilliant work, we are releasing another T5.4 compatible module: tapestry-resteasy 0.4.0. Source at Github, read the userguide at Release notes:

New Feature

  • [TYNAMO-221] - Add support for RestEASY generated JavaScript API
  • [TYNAMO-231] - Integrate Swagger
  • [TYNAMO-235] - Make it super easy to add CORS support.

+ issues on the github milestone 0.4.0.

On the heels of tapestry-security 0.6.0 release, follows our second T5.4 compatible release: tapestry-routing 0.1.0. Same deal here, the source is moved to Github and the userguide is still at the familiar location at Alejandro Scandroli did all the hard work, thanks Alejandro!

For release notes, I'm thinking in the future I'm just going to link to the Github milestone for the release. Let's practice: tapestry-routing 0.1.0 milestone.

As hinted earlier, our first T5.4 compatible module, tapestry-security is released. This release is primarily for compatibility, although I threw in one, non-backwards compatible enhancements for optimized rememberMe cookies because I felt it was the right time. The source has moved to Github and the userguide is still at the familiar location at I've only recently started working more on T5.4 codebase myself so keep the enhancements (and pull requests!) coming as you see need. Open issues against the Github repo please.

Release Notes - tapestry-security-0.6.0

** Improvement

    * [TYNAMO-147] - Make tapestry-security compatible with tapestry-5.4

** Task

    * [TYNAMO-236] - Migrate tapestry-security to tapestry 5.4 beta

** Github issue

#1: Implement a new default CookieRememberMeManager for creating smaller rememberme cookies (how do you get "release notes" out from Github?)

Tynamo goes Github!
GitHub is cool and we so desperately want to be cool too that we decided Tynamo needs to be there as well. In all seriousness, Dragan Sahpaski wrote up a whizbang script to import all of the Tynamo's SVN history, branches etc. to a Git repo so it made the move a no-brainer. Thanks Dragan. We still love Codehaus though and they'll continue providing a lot of the infrastructure support, like CI builds and Confluence space but we are going to moving issue management over to Github as well so we can be ready for your pull requests instead of writing the code ourselves :) Also because we are good Git citizens, each Tynamo module now has its own Git repo. Checkout the Github organization page at and navigate from there to your preferred module and start forking away!

Now that a public beta of Tapestry 5.4 is out, we are also starting a module upgrade and release cycle for 5.4 compatibility. Tapestry-security 0.6.0 is first in line, watch for the release announcement later!
Downloaded JDK 8 today
Project Lambda was merged to the mainline a while back but b106 is the official developer preview release and (depending on how you look at things) it was actually released on schedule. My main interest beyond lamba expessions is how the JRE performs with the new metaspace. Naturally Mark has a few forewords to say about the new JDK8 build, go get yours!
Federatedaccounts takes another leap forward by integrating with a new, Scribe-based module, Pac4j by Jérôme Leleu. See, the problem with Scribe, and Oauth in general, is that there's no standard way of getting any unique identifier with Oauth (unlike in OpenID). So there are several different provider specific extension and it quickly becomes a mess (read what the author of Scribe thinks about this). Anyway, it's great somebody, and in this case, Jérôme, still bothers to generalize the approach because otherwise I would have needed to do it. The new Federated Accounts module, tynamo-federatedaccounts-pac4jbasedoauth, simply provides UI components (Oauth sign in components, callback pages) around Pac4j, handles the Oauth all automatically and bakes in Tapestry-style configuration around it so all you need to do is to just add your Oauth app credentials. The primary use case for the new module is authentication and user profile federation, for other uses cases, you typically still want to use provider specific APIs and libraries. Documentation is also updated, although a bit thin still. Read more at tynamo-federatedaccounts guide.

Release notes:


  • [TYNAMO-211] - Allow parametrized configuration in federated login components for setting rememberMe in the token
  • [TYNAMO-220] - Implement rolling tokens support for federated accounts
  • [TYNAMO-181] - Implement DefaultJpaFederatedAccountServiceImpl
  • [TYNAMO-182] - Support GitHub federated login

New Feature


  • [TYNAMO-217] - returnPageName is required since there's no defaultReturnPage prop in AbstractOauthSignIn



Tynamo Team

This two little but useful libraries have new versions available.
  • tapestry-resteasy 0.3.2 is mostly a maintenance release for updating the JAX-RS dependency to JBoss' resteasy 3.0.1.Final.
  • tapestry-routing 0.0.6 introduces:
    • cleaner and more flexible API design.
    • support for reloading of @At annotations (TYNAMO-8814)
    • support for the tapestry.application-folder symbol (TYNAMO-15717)
    • the ability to contribute Routes from different sources
    • a new annotation called @Route as an alternative to the @At annotation

Read more at tapestry-routing guide and tapestry-resteasy guide


The Tynamo Team.

Oops, we did it again! We cleaned the security component issue list and cut a new release with a few nice little improvements. 0.5.0 was released a few months before but never announced. 0.5.1 is the new stable release for T5.3.x. Unfortunately though, 0.5.1 will not work with the upcoming T5.4. It does compile and about half of the tests succeed but the ajax interfaces are changed enough that there will likely be some issues. Well, at least we have something to do for the next release.


  • [TYNAMO-176] - Incorrect redirect to login page in case of ajax request


  • [TYNAMO-125] - Else block for the security components
  • [TYNAMO-193] - Allow temporarily disabling security for an invocation of Callable
  • [TYNAMO-195] - Make LoginForm error messages localizable
  • [TYNAMO-183] - Improve support for Instance-Level Access Control


Tynamo Team

Today, Mark Reinhold proposed the new new schedule for JDK 8 after the last slippage of Lamba merge. I'm pretty hopeful that this time the schedule will hold. I'm quite excited myself about Lambda expressions, too many times I've been writing code and just thinking that if I only could write this as a closure it'd be that much simpler. However, there is much more to look forward to and the "Everything about Java 8" article does a good job show case all the new features.
Fire the marketing department.

Yes, we just might have forgotten to announce "a few" releases we've made. We got busy, what can you say? Besides our marketing dudes never do anything anyway. Let's start the year with a bang and correct the situation right now (after taking the marketing department behind the shed). Here's a recap of the previously unannounced releases we've made in the last four months:

tapestry-model 0.5.0

We finally implemented a built-in full text search. The Hibernate version is using HibernateSearch because it's ah so automatic and nice. Only thing is that it's local only. For the JPA version, we fully integrated ElasticSearch, the best thing since full-text bread. I dare say our integration is better than the one that Play framework has to offer. It seamlessly integrates with SQL-based search and is easy to extend. tapestry-model continues to be better suited only for the more experienced Tapestry users. One day we'll write proper documentation for it and surprise you all.

tapestry-security 0.5.0

A fix for TYNAMO-183 forced our hand because of some dependencies on 5.3 so we decided to push out 0.5.0 a bit early. We'll get the rest of the improvements in later. We are also dropping support for T5.0/5.1 but hey it's open source. If you find a bug in the earlier releases, send it to us and we'll patch it.

tynamo-federatedaccounts 0.2.0

TYNAMO-129, or rememberMe with rollingtokens made it as a new submodule of federatedaccounts. There's just no reason to use those puny, insecure and ordinary remember me cookies anymore. More at my blog post on RememberMe with rolling tokens.

jpa-seedentity 0.1.5

First, the younger JPA version of the well battle-tested seedentity library pulled next to the hibernate-seedentity, turned her head and waved, then sprinted ahead laughing, leaving the hibernate guy sobbing in dust (in terms of features).

editablecontent 0.0.3

I still think it's the coolest little library out there and just wouldn't be possible to implement without the lovely distributed configuration of Tapestry. You aren't still modifying your html text content in an offline text editor, are you? Now I just need to integrate conversation and inline image support.

security-jpa 0.0.4

Want to secure your data instances? This one works so well it's annoying.

From time to time you get new users on the Tapestry mailing list asking people to compare Tapestry to some other frameworks. While sometimes these discussions degenerate to the level of "my framework is best", Alex Kotchnev,'s very own JDO guy, provides this level-headed and well reasoned reply:

In the past five years, I worked on a number of greenfield projects. In three out of four, we ended up choosing Grails - it is very hard to deny the market & mindshare , the expansive documentation, the big name company behind the project, the large community, a massive number of plugins (for pretty much anything that you'd want), the end-to-end stack (so, you don't have to choose your ORM, DI, etc) and the ease of getting started with a Grails project.

However, after working on a couple of these Grails projects for a few years, the latest project I got involved with , I chose Tapestry. In some cases, I've missed some of the niceties that Grails brings out of the box, but without too much effort I've been able to replicate them fairly easily.

The biggest reasons for picking Tapestry over Grails on this latest project have been:

  1. The inability to aggressively refactor your code - the dynamic nature of the language is nice when you want to knock something out quickly, and saves you a few lines of code here and there. However, after the codebase gets to a certain size, the inability to reliably refactor the codebase made the codebase difficult to evolve. Sure, IntelliJ & NetBeans has some support for refactorings in Groovy; however, it is not even close to the level of depth and ease of what you get with Java. I love Groovy to death, have been using it for many years (since it was in jsr-1 version) but ... the tool support is just not there yet (and likely will never be) and for a team of developers Java just ends up being a better choice (at least in the context of my team)
  2. The importance of Tapestry components cannot be overstated. In a fairly modern web app, the functionality of each page depends on a bunch of markup, some CSS from a stylesheet, and some javascript from a javascript file. Tapestry makes putting everything together and using the results extremely easy and logical. In the late days of the last Grails project I was involved in, it was a massive PITA to build a page that really should have looked like 'that other one' - even when you used tag libraries to encapsulate the markup generation, you still had to hunt down all the css and js files that needed to be there.

On the first issue, if you will be using Groovy for your pages, you will be in the same boat as Grails. Personally, I wouldn't recommend it - Tapestry already pushes the envelope on Java quite a bit, so your Java code ends up being very short and sweet already. In the past, I had attempted to use Scala in a tapestry app, and ended up having to just deal w/ some of the mismatches between the language and the framework and my pages ended up looking up like the same old java pages I would have had but with a different syntax.

On the second issue, there is the grails resources plugin that tries to pull resources kinda like Tapestry, but using it requires this artificial separation into resource bundles which seems to be a PITA and somewhat mind bending.

On the abundance of Grails plugins - after using a bunch for the projects I was working on, it turned out that many were not well maintained so we hadto take over and maintain them ourselves. Sometimes, they're a good starting point, but in the end ended up less of a factor than I initially thought.

I originally very much enjoyed the Grails build system (running on top of Gradle); however, with a pretty simple project setup, Maven seems to bejust as straightforward. If you wanted Gradle, you could use that for your Tapestry app, and be on-par w/ Grails.

On the latest project that I chose Tapestry for , I have been very happy with my choice. On a few occasions I've run into some frustrations (e.g. for rendering emails, I ended up having to use Freemarker, whereas with Grails the template rendering for emails comes for 'free' ; I had to build my own equivalent of the Grails "console" plugin where you can run Groovy commands inside of your running application); however, in all cases, the solution has turned out to be more elegant than I had expected (albeit, it required deeper tweaks in the framework than I had expected).


Alex Kochnev

  • No labels