MarionetteJS v1.0

Hot on the heels of the Backbone v1.0 release, I present MarionetteJS v1.0!

I quietly released it over the weekend, and I’m glad I did. I already had a bug report and have released v1.0.1 to fix it. :D

The last few years of working on Marionette have been tremendously fun, exciting, frustrating at time, and have provided much more work and opportunity for me than I had ever imagined. I started this project out of need, and hoped that it might help a few people out – at least show them what could be done and give them ideas on how to do it. I never expected that this project would have 1/10th the number of stars it has on Github, or that this project would lead to working with dozens of amazing companies, travelling around the world, create new friendships, and land me some awesome speaking opportunities on podcasts and at conferences! 

What’s New

There’s a ton of new things that have happened since I started the 1.0 release candidates. And actually, going in to “release candidate” model was probably the worst mistake I’ve made with Marionette, so far. I had far too many breaking changes, far too many times for it to really be a release candidate series. But things are stable now, and have been for a bit. There were a few additions and breaks in this release, some of which came from dependencies.

You can read the complete change log and upgrade guide in the repository, but I want to highlight a few of the notable things quickly.

Backbone.Wreqr Updates

Backbone.Wreqr is an integral part of Marionette and helps to provide a lot of the communication infrastructure for scaling applications. 

In the latest release of Wreqr, I’ve renamed “addHandler” to “setHandler” for all Wreqr objects. There was confusion around the name “addHander” as it implied the ability to add multiple handlers. Since none of Wreqr allows multiple handlers for any one registered name, I changed this to “setHandler”. Anyone updating to Wreqr v0.2.0, along with Marionette v1.0.0, will need to account for this.

I’ve also made the commands somewhat persistent when there is no handler currently registered. Several people noted that they were running in to situations where a command needed to be executed, but due to the order of module loading being unpredictable, the handler wasn’t there. To fix this, a command can be executed whether or not the handler is available. As soon as the handler is available, the actual execution of the command will take place. Commands will persist in memory, for the life of the page. Refreshing the page or navigating to another page will destroy the not-yet-executed commands.

Marionette.RegionManager

One of the most requested features in recent times has been the ability to add and remove regions from layouts. I set out to solve this and realized that half of the code I needed was already in the Application object, and the other half was in the Layout object. So I consolidated most of this code in to a single object called RegionManager. Both the Application and Layout now use a RegionManager to manage their regions. This allows a more consistent way of managing the regions, and provides all of the add and remove functionality that is needed, on both.

STICKERS!!!!

WOOO! STICKERS!!! :D

 Marionette sticker detail

You can order yours from DevSwag. They are providing order management and fulfillment for stickers, for Marionette and many other amazing open source projects.

Semantic Versioning: A Goal

I have a goal, moving forward, of using Semantic Versioning for the version numbers. I don’t think I can promise perfect semantic versions, though, for a few reasons. First off, this is my first project to hit v1.0. I know I’m going to make mistakes and screw up some little detail here and there. But for the most part, I plan on following semver. Secondly, and more importantly, though, Marionette relies on other libraries which have their own release cycles. Sometimes releases coincide. Other times they don’t. Sometimes they break Marionette, other times they don’t. This will make it challenging to follow semver.

What’s Next?

It’s been a whirlwind ride with near constant updates along the way. I’ve learned a ton about JavaScript and running an open source project. And this is the first time I’ve pushed an open source project to 1.0, so I’m sure there are still a ton of lessons left to learn.

There are still more than 50 tickets open in the Marionette repository, and a lot of things that I want to do to help re-stucture some of the ugly parts. I want to tear apart Modules, for example, and create separated namespacing, sub-applications and components. There are a lot of other feature requests and issues reported that need big changes, too. I’m looking forward to where Marionette will head, and hope to continue to build a strong community around it – including a more active core contributor team.).

Thank You!

Yes, it’s the grammy-award speech time! Someone start the “wrap it up” timer…

NewImage

I owe an especially large thanks to Jarrod Overson, Matt Briggs, Brian Mann and Tony Abou-Assaleh. These guys have been a great core team to bounce ideas around with, to help out with issues, and provide needed support and feedback. And to Ruben Vreeken for all the work he puts in to the Google group, answering questions. :)

Marionette wouldn’t be what it is without the amazing contributors. Everyone that has contributed in any way – answering questions in the google group, sending issue reports, ideas, pull requests, writing blog posts and articles, screencasts, and talking at user groups and conferences. I’m still and continuously amazed at how much has been done in the community with this library. Thank you all!

A special thanks to Backbone, of course, which is what got me into JavaScript again, and allowed me to build Marionette. Thank you to MedienFreunde for the amazing logo and website.

And thank you to all of the awesome people building apps with Marionette. Projects like Halo Waypoint, Redbull Music Academy, and StubHub are among the most widely known systems built with Marionette – then there’s the three error reporting / analytics tools: AirBrake.io, RayGun.io and CrashLytics. But there are so many more out there, still It’s been awesome seeing Marionette in all these places, and I’m looking forward to seeing where it goes from here! :)


Post Footer automatically generated by Add Post Footer Plugin for wordpress.

About Derick Bailey

Derick Bailey is an entrepreneur, problem solver (and creator? :P ), software developer, screecaster, writer, blogger, speaker and technology leader in central Texas (north of Austin). He runs SignalLeaf.com - the amazingly awesome podcast audio hosting service that everyone should be using, and WatchMeCode.net where he throws down the JavaScript gauntlets to get you up to speed. He has been a professional software developer since the late 90's, and has been writing code since the late 80's. Find me on twitter: @derickbailey, @mutedsolutions, @backbonejsclass Find me on the web: SignalLeaf, WatchMeCode, Kendo UI blog, MarionetteJS, My Github profile, On Google+.
This entry was posted in Backbone, Javascript, Marionette, Open Source. Bookmark the permalink. Follow any comments here with the RSS feed for this post.
  • http://twitter.com/wakkahari Wakkahari

    Wohoo! this is so awesome. thank you so much Derick and everyone who contributed. keep up the great work!

  • http://twitter.com/developerluke Luke Bennett

    Congrats Derek! And thanks for all your work on this – Marionette is really valuable to us.

  • http://jonknapp.com/ Jonathan Knapp

    Excellent job! and thank you so much.

  • Matt Polichette

    Congratulations Derick, I’m very impressed with your work, it has been instrumental in helping me learn to become a better web developer.

  • http://joelcox.nl/ Joël Cox

    Thanks for your hard work Derick.

  • robertwalsh0

    Fantastic work Derick and the Marionette core team!

  • Jörg

    Awesome – well done! Marionette is integral to my app – and through your thoughtful articles and help on stackoverflow i have learnt so much about javascript and structuring apps to scale. Thank you very much!

  • xMartin

    Hey Derrick,

    I use Marionette in a customer app and I like they way you run this project. You have a great style of writing posts and docs and I like your approach with the framework. Thanks!

  • juristr

    Sounds interesting. EventAggregator and EventBinder somehow remind me to the .Net PRISM framework for creating modular, composite applications. Just coincidence?

    • http://mutedsolutions.com Derick Bailey

      :) definitely not coincidence. I spent 5+ years building large scale winforms apps, and worked with prism just enough to understand the composite architecture it created. I built a very large system with patterns from the Enterprise Integration Patterns book, which are all present in PRISM and Marionette now. This is definitely the influence and direction that I took with Marionette :)

      • juristr

        Nice, I knew it ;)

        Very interesting. I was just coding down the base architecture for a .Net Desktop App couple of weeks ago, also using Prism. And since I’m also heavily creating JavaScript single page webapps I did think about how such patterns like the EventAggregator or RegionManager could be ported to all of those JavaScript MVC libraries.

        So…I guess I have to take a look at Marionette at this point ;)

  • http://michael.hertzberg.co/ Michael Scott Hertzberg

    STICKERS.

  • http://twitter.com/rei_liit John Kevin Basco

    Awesome! The 1.0 release is perfect timing since today I’m starting to learn Marionette.js =D

  • http://twitter.com/jlarmstrong Jared Armstrong

    This is great, thank you.