Sunday, February 10, 2013

MvvmCross v3

What is v3?

v3 will be the most ambitious MvvmCross release to date.

For v3, my mission is to continue…

Native, Cross-Platform, Portable, Reusable C# delight for all.

Is it v3 or VeeThree?

It's pronounced Veeeeeeeeeee-Threeeeeeeeeee

What is MvvmCross?

It’s a cross-platform framework for efficiently and effectively developing delightful C# apps.

So far, MvvmCross has evolved through:

Dec 2011
  • Interface-Driven Development
  • Shared ViewModel-based architectures
  • Available on Windows Phone, MonoTouch and MonoDroid
Mar 2012
  • Data-binding layer added
  • MonoTouch.Dialog support
  • Samples and tutorials
  • Cross-Platform APIs for features like Camera and Location
Oct 2012
  • Portable Class Libraries
  • Plugins for Cross-Platform APIs
  • WinRT added.
  • MonoDroid.Dialog support.
  • WPF added
  • Additional Plugins – like Sphero
  • ‘Swiss’ bindings
  • Initial AutoViews added

How has this happened?

Throughout the last 15 months I've been very lucky to have had:
  • wonderful customers;
  • skillful co-coders who continue to teach me so much;
  • a small number of utterly awesome contributors;
  • very thoughtful issues, problems and questions logged, discussed and resolved;
  • superb tools to work with - especially from Microsoft and Xamarin.
  • some donor sponsors - JetBrains (Resharper); PixelCut (PaintCodeApp); Infragistics (NetAdvantage); Microsoft (BizSpark); Nokia (Lumia)

Thanks to all!

What is V3?

All of the feedback I've had from the users of v1 and vNext have helped me shape the requirements and features that will be at the beating beautiful heart of v3.

They are:
  • Add Mono.Mac and Xamarin.Mac platforms
  • Add high quality documentation
  • Enable MvvmCross Plugins to be easily used by non-MvvmCross and non-Mvvm code.
  • Enable other Mvvm platforms to use the MvvmCross data-binding layers
  • Improve all platforms:
    • On Android, we will extend support for Android 3 and 4 features – it’s time for Android to move Android on from Gingerbread!
    • On Touch, we will provide better integration with existing developer workflows including both XIB and Storyboard workflows
    • On Windows Phone and RT, we will look for better designer and Design-Time data support, plus we’ll provide additional Live Tile and background service samples.
    • For Unit-Testing to provide additional helper classes so that tests can be written and maintained more efficiently
  • Make the MvvmCross APIs cleaner, simpler, easier to use and easier to extend
  • Extend Swiss Binding further - remove the dependency on JSON.Net (I'll still *love* JSON.Net, but you'll no longer have to share that love)
  • Consider using WeakReferences in Bindings
  • Tackle some key known open issues –including the infamous Heizenbugs
  • Make the MvvmCross ecosystem simple to navigate – making it easier for users to find 3rd party plugins and extensions.
  • To be NuGet ready – even if NuGet isn’t ready for all the MvvmCross platforms

Beyond these, there’s one big other goal I’d also like to add:
  • Async/await on all platforms
However, currently I’m not sure if this is going to be possible within the near-term timeline of V3 – it depends on external releases and on how things just generally fit together.

Beyond that, there are other things I’d like to achieve – like adding a CrossGraphics plugin, perhaps adding Tombstoning support, perhaps adding a showcase app sample, perhaps providing more Android service examples, etc, etc, etc, etc, etc, etc - but with time short all those can come in iterations beyond v3 if they don't make the cut.

So should I use vNext today?

Yes :)

If you write your existing apps today targeting vNext, then v3 will feel very familiar. It will continue with:
  • interface driven development,
  • portable class libraries for sharing code
  • plugins for the times where platform abstractions are needed
  • using INotifyPropertyChanged-based Mvvm to maximize code share
So, if you start on an app using the stable vNext code base today, then you will be in a great position to leverage v3, with only the need to make small adjustments to shift to v3. To switch you should only need to perform relatively simple tasks like changing some base class names; adjusting some of the namespace names you are using; and perhaps shifting some code between generics and non-generics.

I like the pain of working with Beta code. Can I use v3 today?

Not today... today the code is pre-Alpha and changing very quickly...

... but I will blog details of in-progress v3 changes very soon :)

When will this happen?

I’m working on v3 now.

It’s ‘spare time’ work only for now - and work commitments are doing their best to reduce that time.

However, I expect customers and partners to start being able to use versions of v3 almost from the start – so I expect to be committing the source and blogging about the changes in the coming weeks – and I expect to recommend v3 as the stable platform sometime in the next 3 months.

When is v4 arriving?

I’ve no concrete plans for v4… and no roadmap in my head beyond v3.
Just as with vNext, after the v3 release we can continue to easily add small iterations … so I’m hopeful that v3 will be followed by much smaller releases (commits), each one adding new features without any significant breaking changes.

I’m 100%  sure:
  • MvvmCross will be driven by its use - both in my projects and in your's
  • The future will surprise us all!

Can YOU help?

  • as long as you can agree to contribute under MvvmCross’ Ms-PL license.
  • as long as you can put up with @slodge OCD…
There’s lots to do - including thinking, coding, sample authoring, idea and issue logging, testing, documentation writing and beyond.
 Some significant code changes are already underway now. If there’s some way you want to help, please don’t hesitate to get in touch!

However, please remember I am doing this for free, I am trying to do this quickly, and I am learning and solving as I go. Please always think of using StackOverflow, Xamarin forums or GitHub Issues for questions before interrupting me by email, chat or skype; please don't get upset when I don't take on-board one or more of your ideas; please don't get upset when someone else does the work you wanted to do; and please don't be off when we don't implement some inferior way...

Please also remember that the code is Ms-PL - so you can always fork...

Can I donate?

The vast majority of gear and time needed for MvvmCross is funded out of my company's own time/money and out of my own evening, weekends and early mornings. I use MvvmCross in most of my customer projects - so it is partly a commercial investment - but I've been careful to choose an open 'free' license for the code, and I 'freely' try to promptly answer all queries and issues that get logged on StackOverflow and on GitHub. 

The time and money I invest in MvvmCross is all about 1 coder, 5 laptops, 6 phones, 3 tablets, 999 problems, and the thrill of F5 :)

However, a few companies have provided some things for free - thanks:
  • JetBrains (Resharper), 
  • PixelCut (PaintCodeApp) 
  • Infragistics (NetAdvantage); 
  • Microsoft (BizSpark)
  • Nokia (a lovely Lumia!)
Further, almost all of my customers have been very open to me sharing MvvmCross-level code that has been developed within their projects - especially noteworthy are McCann London, without whom this project might never have started.

If you know of a business that is interested in MvvmCross, and they want to contribute to the project in some way, then please do get them to get in touch.

These contributions are all very much appreciated.

Now... back to the code....


  1. Oh man... Congratulations for your work!
    I'll be posting some tutorials in portuguese.

    1. Thanks :)

      Sorry if v3 breaks your tutorials - there will be some class name changes in v3 - e.g. things like MvxBindingListView dropped to MvxListView

      These changes are for the best :)



  2. This looks awesome... HTML5/CSS3 are cool and what not, but really love using c#