What’s Up With MooTools

Wednesday, January 21st, 2009 @ 12:28 am | filed under: MooTools

There’s a post over on Ryan Rampersand’s blog today entitled “State of the MooTools” wherein he responds to a comment left on an earlier post he made (MooTools is not dead) and ponders the state of the library:

I want to know what people think of the State of the Mootools. My feelings shift often. I wrote a new edition of the mooWalkthrough; I love moo that much. Other days, I wonder where it’s heading and where to find things. Where is everyone? While we don’t need a super leader, we do need someone to give us regular mootoolers some direction. More than what the core team has done so far.

What are your feelings on the direction of Mootools? The community, the library and the current feeling that Mootools gives off?

I’d like to talk about MooTools a bit and touch on it’s current state, but this requires a little bit of history, so bear with me.

First, a disclaimer

I’m listed as one of the MooTools core developers but I think you can see that I tend to release my code here rather than in MooTools itself. I’ll elaborate on why that is in a moment, but first I want to make clear that this post is my opinion and my perspective. I’m not speaking on behalf of MooTools and its authors, though I consider myself a part of that group.

MooTools r83

When I first read MooTools’ source code when it was released I was immediately impressed. Here’s a bit from my very first post on the framework, back when I was still using Prototype + Scriptaculous:

Well crap. 1) I love the mad4milk guys (makers of moo.fx, moo.ajax, moo.dom, prototype.lite). 2) their new framework looks AWESOME. 3) as always, their libraries are SUPER TINY.

But damn, now I have to learn something new, and maybe rewrite a bunch of crap. This is the problem with javascript. Still, when Prototype + Scriptaculous is 100K, you gotta admire their ability to crank something out in under 20K that will get you nearly the same thing.

After that I posted a much longer follow-up where I talk about what I like about the framework compared to the others that were out there at the time. What impressed me most about the framework was that it was light weight (compared to Prototype+Scriptactulous or YUI at the time), it had a lot of functionality (Ajax, effects, etc), and that it was a robust programming environment (much like Prototype) featuring well written Class based inheritance mechanisms.

MooTools is still pretty low level stuff. Their class creation/inheritance model is really slick and their chainable functions (similar to jQuery’s model – Element.addClass(’x’).removeClass(’y’).resizeTo([100,200]) etc.) are really powerful and tidy.

But right out of the box you get some really nice functionality that you can implement really quickly. You get popup tooltip stuff, you get accordians, draggables, sorting tables, JSON support, cookie handling, event handling, and Ajax (and more).

When I decided to focus on MooTools for CNET, it was apparent that MooTools still had a ways to go. There were no docs, few demos, no tutorial, and a lot of things left to do before you could call it something other than a beta.

So I wrote the docs – just reading the source code and writing the docs taught me more about JavaScript than all my work before that. I reached out to the author of the framework – Valerio – and offered the docs to him. He exploded with excitement and called me (from Italy) via Skype because his emails to me kept bouncing for some reason. That first phone call is the only time I’ve ever spoken to him (we communicate mostly over IM) and it was kind of a funny call as there was lag, the line was noisy, and his spoken English is filled with a strong Italian accent. Still, we managed to communicate long enough over the terrible connection to get our IM information to each other and then we started chatting. I’ve probably written more characters in IM conversations to him than I have written MooTools code.

When MooTools made its first relatively-stable release (svn r.83) it featured a lot of my own work, but Valerio’s productivity dwarfed my own. MooTools has always been Valerio’s vision and he’s been kind of a stickler about what goes in it. I’ve submitted ideas to him countless times and the vast majority of them have been shot down, not because he doesn’t respect my work, but because he wants to keep MooTools focused on doing what it does.

In Valerio’s vision, MooTools should be a framework for developing JavaScript, not a collection of easy to install widgets that anyone can use.

The MooTools Forums

Valerio set up the MooTools forums as a place for those early users to come and discuss the framework itself. Most of the posts were being made by people who understood JavaScript rather well and were wanting to talk about how MooTools worked. Bugs and discussions about features were the main focus and it was a healthy conversation. Over time however, the forum became a support mechanism for people who wanted to use MooTools to accomplish basic things, but many of these posters had no knowledge of JavaScript. Accordion questions showed up nearly every hour it seemed, and apparently these people didn’t know how to search. Very quickly the forums became a hassle and a distraction. There were some great threads and I do miss them some times, but they increasingly became a hindrance that prevented us from moving MooTools forward.

When we moved the discussion group to Google we accomplished three things:

  1. We divorce the community and its voice from the developers. If someone goes on an ugly rant on the google groups it doesn’t cover our faces in mud. Every community has a bad apple or two, and we got tired of having our names tarnished by the ones that showed up on our forums (again, the vast majority of people who communicated in the forums were awesome). Oddly, ever since the move to Google Groups, this kind of thing happens far less frequently
  2. We took something that we previously had to support off our list. The server MooTools runs on is donated and the forums had a habit of bringing it down.
  3. Somehow, by moving the forums to Google, the quality of the posts are just… better. I myself am FAR more likely to post there now than I was on the old forums. Just check this out. I’m one of the most prolific people on the group, mostly answering questions. This is mostly due to the fact that the questions are by people who are actually trying, while on the old forums there were a lot of lazy people who would just post useless questions without code examples or links to examples.

The MooTools community is far better off with the Google Groups than the old forums if you ask me.

The Birth of the Clientcide Libraries

Every line of code I’ve released comes with the unspoken invitation to the MooTools group to take it and use it. I’ve released almost as much code as is in MooTools and indeed, many of my releases have been consumed by the library and I’m happy to see that happen. But I do often get the question – why don’t I publish my code as part of MooTools?

The answer is that I realized the value of two very key concepts in MooTools: 1) its focus and lean nature and 2) its extensibility means that you can always make the framework into whatever you want it to be. As my understanding of how the core of the library really works (how Class works, for example) has only enabled me to bend it to my will more and more.

At some point, I had enough code that I found useful enough to release that didn’t fit into MooTools. The thing is, it doesn’t have to! Anyone can extend the library in any way they choose. It’s so versatile and flexible that there are only rarely things that I cannot do until the next release (indeed, there are only two features that I am waiting for in the next release: post-instantiation mutators and access to the garbage collection for event delegation – and if those ideas sound abstract to you then that’s an illustration of how deep you have to dive into the library before you find something you can’t extend easily).

So I don’t take it as insult when I give something to Valerio and others to consider and they turn it down. By releasing my own code I have greater control of my own solutions, but I also benefit from the community (and so does MooTools).

MooTools 1.2

So when the question of the current state of MooTools comes up, increasingly people are concerned that nothing is going on with the framework. The reasons are threefold:

  1. MooTools 1.2 is very, very stable. Indeed, there are only a few issues with it that are really in line for 1.3 – event delegation (based on work by Daniel Steigerwald and myself), some enhancements to Class, and a few minor bugs.
  2. The core developers do not particularly enjoy communicating with the community. I don’t view this as a flaw. It’s just that they like writing lots of code while people like me and others like writing about the code they write. Valerio in particular rarely posts to the MooTools blog and has a bad habit of not answering emails (even by me).
  3. The core developers are less concerned about evangelizing the framework than others. Simply put, the popularity of the framework is nowhere near as important as the quality of the framework. MooTools lends itself easily to jQuery style development techniques, and nothing is stopping anyone from adding those kinds of functions and methods, but it’s just not a priority to make the framework easier to use. If you know JavaScript (or want to learn it), MooTools is a great choice for you. If you want to just make something animate on your pages and move on, then other frameworks might make more sense.

Diligence Pays Off

Because the current state of the library is very stable, the core developers are focused more on the things they use MooTools for, rather than improving the framework itself. Development on the framework core is driven by need mostly, and right now, MooTools 1.2 serves the needs of those of us who develop it quite well. That’s not saying that there’s no room for improvement (there are certainly bugs that can be fixed in Lighthouse, but most of these are minor). But for the most part, due to the focused nature of the MooTools core, there’s not a tremendous need to churn through the code constantly.

In other words, precisely because MooTools itself is so flexible and because the core developers are so focused on delivering only what is needed in the framework and not adding features for their own sakes (and relying on the rest of us to fill in the gaps), it means that to a large extent, the MooTools framework doesn’t need a lot of maintenance or enhancement. It does what it does, it does it well, and for the moment, it does not need more than that. Perfection is not attained by adding everything you can, but rather by removing everything you can. Or something.

So Where Do We Go From Here?

But it’s not like nothing is going on. Just four days ago I had a 3 hour debate with Valerio about some of the inner workings of Class that we’re busy churning away on that will improve it dramatically (albeit in a way that few will notice). Tom, one of the most productive and active developers on the team, just took a job at Facebook and moved out to California (Welcome Tom!). He’s busy settling in at his new digs but I think his new job is good for MooTools (not that I expect Facebook to adopt MooTools outright) in that it basically pays him to write JavaScript all day long in a demanding environment that’s going to throw a lot of use cases at him. I know he’s eager to bring some of what he learns to MooTools and vice versa. Harald Kirschner is still working on the MooTools forge as he has time. David Walsh and I have started trying to post more frequently and twittering away on @mootools and he’s currently working on putting together a download page for all his plugins so that he can formally release them after my urging.

We have a lot of things going on with MooTools. We’re just not great at talking about it. For instance, check out MooTools ART – a project that came together nearly six months ago because Valerio and Christopher needed it. Stuff like this gets worked on so that we can use it. There are thousands of MooTools users out there who are writing their own plugins for their own use but they don’t go through the trouble of releasing it. We’re trying to ferret these things out where we can and post about them (on twitter, here, and elsewhere).

So No, MooTools Isn’t Dead

If you’re wondering what’s going on with MooTools, well, to quote the great Mos Def, “So the next time you ask yourself where Hip-Hop is goin ask yourself.. where am I goin? How am I doin?” What are you doing with MooTools? Why aren’t you writing about it? Releasing it? Contributing it?

So no, MooTools isn’t dead. It’s just in use and its current state is meeting our needs. For those of you who have needs that are more specific or esoteric, I suggest you get busy.

18 Responses to “What’s Up With MooTools”

  1. Chris Says:

    It is still Christoph or Chris respectively. And yeah, ART needs some love I guess, I’m going to put that on my list. For the first time in months I maybe ready get back to it and do something with it, let’s see..

    The number one reason is, I guess, that 1.2 really is kind of feature complete (as software can be). I rarely used 1.1(1) as it was a mess, seriously. It was rather the good old MooTools combined with ugly hacks to make it work in all Browsers (IE, Opera). It made 1.2(1) really necessary which is a great version. Personally I think MooTools is everything but dead, the IRC channel is more active than ever and more and more people are releasing stuff – I, for myself, am really excited that I started to release serious stuff too now. I’m looking forward to putting up some scripts!

  2. davidwalsh Says:

    Well timed and well written post. As I think I’ve mentioned before, people mistake the number of open tickets at Lighthouse for thinking the project isn’t being continually developed.

    I don’t have many gripes about the MooTools core. Continued success!

  3. Thiago Santos Says:

    I think MooTools could use an evangelist; more than one, actually. More blog posts on the official web site wouldn’t hurt. Events wouldn’t hurt either. This is my opinion only, but I do think there should be more stuff going on to make people see what they can do with MooTools, and it would definitely push away the idea that MooTools is dead. More tracking of plug-ins (there is already an initiative for that, but I haven’t seen anything other than a blog post, which was a long time ago) would be a great thing for the coMoonity.

  4. Ryan Says:

    I’ve been playing around with Mootools off and on for a few years. The first release I actually put on a site was r488 and have been really interested since then. Like you, I started in P/S but realized the animations were jerky and the code just seemed ugly. I’m a backend coder by nature but wanted to get into more UI development. I looked at all the JS frameworks and made the switch to Mootools and have loved it every since. For me, it has taught me how to truly code in Javascript and on top of that, has taught me better programming skills that I take back on the server side of things daily.

    I’ve seen Mootools grow and grow over the years and I’ll admit I was very worried when the “changes” around the 1.2 release happened. It seemed like the face of Mootools just sort of went away. I’ve grown up using forums and the change to the Google Group frustrated me because I like how forums allow people to easily format their HTML and JS. That’s just my personal opinion and I look through the Google Group all the time and it’s getting a bit more familiar to me. But I still spend my time in the unofficial forums.

    But over the course of the last few months I feel like Mootools is really getting it’s “face” back. And I would say that is thanks to 2 people… you and David Walsh. Every framework or CMS or codebase NEEDS a community. And every community NEEDS a leader. For jQuery it happens to be the lead developer… but it doesn’t have to be that way. You guys are doing a great job of evangelizing Mootools and I hope it continues. The more people involved the better the core becomes and the better the plugins become.

    Users, like myself, just want to know that something is happening. And for the most part… we don’t even care what it is. :) So keep up the good work and keep talking about Mootools. It really does make a difference. And maybe one day at a conference like SXSW, while my geek friends all go to their jQuery meetup I’ll be headed over to the Mootools one :)

  5. emailtoid.net/i/51be97e5/… Says:

    “Perfection is not attained by adding everything you can, but rather by removing everything you can.” Great quote Aaron. great post as always.

  6. Aaron N. Says:

    @chris, I’m glad to hear you’re going to start working on things to release again. Please do let us know about them!

    @Thiago, I agree, MooTools needs more evangelizing. I’m doin’ my best here!

    @Ryan, I also agree with you that MooTools needs a community and it needs to grow. This sentiment is not shared by everyone in the development group (though no one is against it – they just don’t want to spend any time on it). You’ll notice that just in the last month or so David Walsh and I have both stepped up to try and start creating a more opportunities for our community to shine.

  7. Tim Lund Says:

    I used to think JS was this evil language that when I had to use it, I had to spend countless of hours making my code work in all browsers. One day I decided that I had to look into JS frameworks, especially for a great way to do XHR that was cross-browser compatible. The results of my quick perusal of the frameworks that where available back then, led me to Prototype and quickly after, MooTools. My knowledge of JS was very limited back then, so I decided to go with my gut feeling: pick the framework that delivers the most basic building blocks, and code the stuff I needed myself on top of that.

    To this day, I haven’t regretted picking MooTools. It fits me perfectly, since I’m a developer by heart, and I love to develop, not drag’n'drop into my cart. Other than that, I can honestly say that today, out of the ~10 programming languages I know, my favorite programming language today is by far JS, and I know for sure that I wouldn’t have end up here if I have used a “dragn’n'drop” framework.

    One note though, my boss isn’t too eager when I say I’d rather code the things he asks for myself, instead of just picking someones code and tweaking it. I do agree with him, and in this financial crisis I try to use others work more, but I’d really rather use 6 hours to code something myself, than use 1 hour of tweaking, and not knowing if the end result satisfactory.

  8. Aaron N. Says:

    @Tim, you should release your work if you’re writing that much code! I’d love to see what you’ve come up with.

  9. Timothy Says:

    @Ryan, I agree with you completely. Developers want to know that something is happening, even if they do not know what. Enhancements to MooTools creates buzz, and buzz is good. It’s good for the community as well as a bit of advertising.

    jQuery has gained such a crowd because its leader, John Resig, is great at voicing its strenghts. Now, I’m not trying to say that MooTools needs to compete, since every framework has its own strengths, but I’d really like to see the popularity of MooTools match its true potential. Too many people jump into jQuery without even considering other frameworks just because it has so much hype. So many blogs and tutorial websites push jQuery and don’t mention others. I’m not a jQuery hater, i’m just a fan of equal opportunity…

  10. Tim Lund Says:

    I will Aaron, and definately inspired by your work here at clientcide.com + MooTools, but most of my JS work is very customer related, so I only have ~2 minor plugins that I think is needed for reuse.

    I’m writing JSSpecs for one of them right now, but again, it’s only a minor utility plugin.

  11. Aaron N. Says:

    @Tim, every little bit helps! I bet that if you look at all the work you do for your clients you could find more. I have a lot of clients that ask me for really esoteric things and there’s always a portion of the work that can be written abstractly enough to be helpful elsewhere. By breaking my Classes up into smaller bits of functionality I end up with more reusable parts…

  12. Sean McArthur Says:

    I write a little Javascript, not usually a ton for Mootools, though I’d like to. Actually, I just did write a Mutator for Mootools last night, allowing Private variables. I know Nathan White has a Mutator to do so, but I noticed that because of his inner function, he unknowingly assigned all the private variables to the global this object.

    Hopefully I’ve done it right. If you see improvements, leave me a note. If this is useful, I’d like to write more code to better Mootools, on top of the little classes I write now and then.

  13. Rexxars Says:

    I agree with Thiago, Mootools needs to be evangelized more.
    Also, I feel the mootools forge is going to help a whole lot – Having one place to look for MooTools classes is going to help out a whole lot. Fixing the docs to the search works like it used to would be a nice improvement too ;)

    I’m opening up a blog where I plan on releasing a number of code snippets and plugins for MooTools soon – I hope to get some support, comments and hopefully some links from the community once it’s up :-)

  14. gonchuki Says:

    Well said Aaron. I tend to *try* to release my code, but I always end up in an infinite loop of refining/rewriting/refactoring and starting over once again.

    It’s true that releasing code is very time consuming, specially to me as I don’t like to release undocumented or bad written code. To day, I just have one snippet of code in the public domain, and I’m definitely *not* proud of it, as it is just a helper to do the Wrong Thing.

    Currently in my queue I have some helpers that work nice in conjunction with Harald’s SqueezeBox, in fact it’s something I did around 6 months ago but never had time to polish and release… plus, a somewhat “secret” project I started a couple months ago and never had time to refactor (current implementation was a quick hack and I even unnecessarily extended Array to use the function just one time.)

  15. Brian Krygsman Says:

    This post confirms again my choice of MooTools as “Javascript Library of Choice”.
    Hearing that the developers are still focused on the original vision: “e a framework for developing JavaScript, not a collection of easy to install widgets that anyone can use.” impresses me greatly. Thank you for not caving in to feature bloat.

  16. Aaron N. Says:

    @gonchuki, there are always reasons not to release something. We all look back at things we authored months ago with a tinge of shame. Releasing your code allows others to put it to use and to help you refine it. It’s worth the investment!

  17. SamGoody Says:

    1)
    Extensions and plugins are not available enough.
    Why is it that people have to bookmark Clientcide to find all these plugins, and fantastic huge projects like MochaUI and JXLib might as well not exist, despite their use to so many Moolers? [Go ahead, how many people on this thread know we have TWO Ext style UI libraries?!]
    It creates the feeling we are fighting the heads of Moo, who are scared the users will become too powerful or something.
    And it creates the feeling that the library is small, dead, passe.
    2)
    People have to feel that the library is theirs in order for them to promote it (or even use it).
    To do that they must have some way to feel their plugins are somewhat sanctioned, and they must be able comment on the works of others.
    3)
    There should be more outright promotion.

    If there was a way to have all the plugins that people write in one place, that would do alot.
    If there was someway those plugins could be rated by the community, that would do more.
    a) It would show that the community is alive
    b) It would give enough plugins for the dev to work only with Moo, without rewriting code. And it will give him the confidence to rely that he can find his needs here.
    c) It will give the community a way to feel that they are a part of the project.

    At the end of the day, all large projects only succeed because people feel it is “theirs”. Here, the devs make someone feel that their code is not wanted – go ahead release it on your own site if you want – and people feel that the project is not theirs.
    Allow them to put it on the forums, it will be their project. Allow other users to rate and comment, it will become their framework as well.
    This plugins will remain separate core, no need to worry.

    Nothing new here, and I still love Moo, and use it all over. I know there is an effort to create a plugin section on the forums, and there is http://www.mooforum.net/scripts12/
    But its gotta become real, and a link to plugins should be on the homepage.

  18. Aaron N. Says:

    @SamGoody, we agree with a lot of what you have to say. There will be some news this week that I think you will appreciate. Stay tuned.