It seems tapestry.js works this way, so I'm sure someone has thought of this...
I wonder if a prototype "interface" in javascript could be a path to plugging in whatever javascript library you want, at least at some level of functionality. Such as: var Tapestry = { xhrSend: function (/* some arguments */) { // your library's code for this... }, coolVisualEffect: function (/* some arguments */) { // again, your library's code for this. } }; In your app, you would provide the implementation of this "interface" via an IoC contribution along with a contribution of the Asset containing your particular plugin library itself. Could not all the "ajax" tapestry functionality be built on this? Naively, Bill