When I first started it off a year ago, it was mainly an experiment to see just how long it would take me to write a minimum viable alternative MVC framework. I was mainly inspired in this by tinkering with some of the alternatives to ASP.NET MVC such as NancyFX, FubuMVC and so on, but also because I’d run out of ideas for something to keep me entertained on my daily commute into London. In the end it took me about a month or so.
Of course, there’s a vast difference between “minimum viable” and “actually usable,” and all I was interested in at the time was a basic proof of concept, so once I had the bare minimum up and running, I decided to just park it. But then back in August I was inspired to take it a bit further, so since then I’ve been doing a bit more work on it, and now I think I’ve got it to a point at which I can realistically start dogfooding it on another hobby project.
Over the coming weeks I’ll be blogging about some of the features I’ve been building into it, but for now here’s a summary of what I’ve been working on over the summer:
- Everything is now OWIN-based rather than going through a custom abstraction layer based around HTTP handlers and modules.
- The feature switching API has now been implemented. You can base your features switchable on a configuration setting, or a go-live date, or you can even write your own custom feature switches based on various aspects of your request, such as user agent or IP address.
- Session state, cookie handling and a rudimentary user authentication mechanism are now available.
- The routing engine has been rewritten. Each Feature now gets its own route table, which can be switched out for a custom implementation if the out-of-the-box option isn’t suitable for your needs.
- I’ve taken a first stab at implementing some basic model binding.
- Version 0.1’s Modules have been renamed to Features for consistency with the concept of feature switches.
Here are some ideas that I’m thinking of implementing in due course:
- A Razor view engine adapter
- Anti-XSRF protection
- A Ruby on Rails-style “message flash”
- An asset pipeline for bundling and minification
- Some form of content negotiation
- An A/B testing plugin built around the feature switch API
- The ability to declare dependencies between features
It’s still not quite production ready yet, so it’s best to stick to breakable toy projects for now. Suggestions are, of course, always welcome.