A high level look at the FubuMVC Ecosystem

The FubuMVC team has run pretty silent this year, but we’ve been busy just the same.  I just recently finished some, ahem, re-architecture of the GitHub repositories, assemblies, and nuget packages in preparation for our planned 1.0 release in January and it has led to the functionality being spread out into quite a few places.  If you look at our main GitHub organization page, you’ll see 57 different repositories (at the time of this post).  To make sense of what’s there, here’s a rundown of most of the active projects and nugets in what I like to call “FubuWorld.”

I should note that most of these are not available on the public Nuget feed.  For a variety of reasons, we have only been releasing to our own Nuget feed at http://build.fubu-project.org/guestAuth/app/nuget/v1/FeedService.svc/, but I hope to change this as soon as documentation starts to catch up to development.

  1. FubuCore — Foundational library and let’s admit it, a junk drawer.  Model binding, object conversions, reflection helpers, command line support, dependency graph analysis, and a lot of extension methods for things inexplicably left out of the BCL.  The repository also holds our FubuTestingSupport library we use across all the projects with an auto-mocking* interaction context and custom specification extensions.
  2. HtmlTags — a model for generating html on the server side heavily influenced by jQuery syntax
  3. FubuLocalization — very small, core library for localization
  4. Bottles — Our technology for modular, deployable components similar to the areas/slices/engines support in Ruby on Rails.  If FubuMVC wins out over the other .Net OSS web frameworks and makes any kind of dent in ASP.Net MVC usage, I think it’ll be because of our modularity story with Bottles.
  5. FubuMVC— the main repository with the core assembly for content negotiation, container agnostic support, and our Russian Doll implementation.
      1. FubuMVC.Core
      2. FubuMVC.StructureMap
      3. FubuMVC.SelfHost — support for running FubuMVC applications with the Web API Self Host libraries.  At this point I think we’ve completely given up on OWIN hosting for the foreseeable future, or at least I have.
      4. FubuMVC.TestingHarness — reusable library for integration testing FubuMVC applications and Bottles
  6. fubu — command line tool for working with FubuMVC applications.  Virtual directory creation, Bottle support, and “fubu new”
  7. FubuMVC.Core.UI — The html conventions and html helpers
  8. FubuMVC.ViewEngines— just what it sounds like.  We do still have WebForms support, but it’s busted at the moment and I haven’t gotten around to fixing it.  I almost consider that to be a public service (we’ll get it fixed soon).
    1. FubuMVC.Core.View — foundational support for view attachment and activation
    2. FubuMVC.Razor
    3. FubuMVC.Spark
  9. FubuMVC.AntiForgery — cross site scripting protection.  This is early code that hasn’t been made into a “real” Bottle yet if anybody wants to adopt an OSS project;)
  10. FubuMVC.Core.Assets — FubuMVC’s asset pipeline.  The feedback has been mixed on this thing so far and it needs much more work before it gets a 1.0 version, but you have to use it to take advantage of assets in Bottles imported into your application.  Other FubuMVC users use require.js for all asset management, and I think you could opt for Cassette as well.
  11. FubuMVC.AssetTransforms— asset file transformations that plug into the asset pipeline.  I think we’ve got all of these converted to drop in Bottles now (meaning that you just have to have the assemblies in the application path for them to work)
    1. FubuMVC.Less
    2. FubuMVC.Sass
    3. FubuMVC.Coffee
    4. FubuMVC.YUICompressor — applies compression of both JS and CSS files using the YuiCompressor.Net library
    5. FubuMVC.Minify — javascript minification using the uglify.js library
  12. FubuMVC.Ajax — small library we use for Ajax request correlation in automated testing scenarios
  13. FubuMVC.Authentication — Think passport.js for FubuMVC.  This library is under heavy construction, but the goal is to have out of the box authentication strategies for basic form-based authentication, windows authentication, and every flavor of Twitter/Facebook/Google authentication you can think of by dropping in additional Bottle’s into your application.
  14. FubuMVC.CodeSnippets — Small Bottle to embed code snippets into your running FubuMVC application using Google’s prettify.js library.  We’ll be using this nuget to create “living” documentation for FubuMVC.
  15. FubuMVC.ContentExtensions — Small Bottle that allows you to “inject” content via into your existing views from external Bottles.  It was originally developed to allow one of my teams to write customer specific application extensions without any impact to the core application.
  16. FubuMVC.Dates — Remember that annoying thing where you want to store dates as UTC in your database but always display dates and times in the local users timezone?  This Bottle contains a recipe for handling the UTC to local timezone conversion in both displaying times and receiving input from the user.
  17. FubuMVC.Diagnostics — Formerly known as “advanced diagnostics.”  This is a drop in Bottle that adds a great deal of runtime tracing and a visualization of the application configuration itself as additional routes to the application.  There’s still a lot more work before January, but my hope is that the diagnostics pages can go a long way toward making FubuMVC self describing for new users.
  18. FubuMVC.HandlerConventions — The single method “Handler” convention for FubuMVC actions
  19. FubuMVC.Instrumentation — A drop in extension to FubuMVC.Diagnostics.  I’ll let Corey explain this one.
  20. FubuMVC.JQueryUI — Not much here yet, but it does give you a drop in integration of jquery.ui into the FubuMVC asset pipeline
  21. FubuMVC.Json — Integrates Json.Net into FubuMVC applications as the json serializer and an option to use model binding with json input.
  22. FubuMVC.Localization — drop in Bottle that gives you very basic integration of FubuLocalization using xml files with a FubuMVC application.
  23. FubuMVC.Media — drop in Bottle that was originally meant to support ReSTful architectures with FubuMVC (atom feeds, HATEOAS), but mostly gets used for the “projections” support to write an object or stream of objects out to Json or Xml without having to bounce through a DTO class first.
  24. FubuMVC.Navigation — The extensible navigation model for FubuMVC applications.  This Bottle enables you to “inject” or add navigation menu items from extension Bottles.
  25. FubuMVC.ServerSentEvents — This Bottle adds support for the Server Sent Events protocol to FubuMVC applications
  26. FubuMVC.SlickGrid — Drop in Bottle to help you use the very exellent SlickGrid library.  We’re using this very heavily in my current project and it’s been getting some enhancement along the way.
  27. FubuMVC.TwitterBootstrap — Drop in Bottle to integrate Twitter Bootstrap into FubuMVC applications.  So far, we’ve got helpers for just a few things, but the big star for me is a resusable Html helper that ties FubuMVC.Navigation to the Twitter Bootstrap menu widget.
  28. Storyteller & Storyteller2 — I’m stubborn to a fault, and I still haven’t given up on Storyteller even though it hasn’t been very active in development.  I just recently forked off a Storyteller 2 with some simplifications to the testing engine that we are using at work.  At some point next year, I hope to rewrite the WPF user interface as a pure HTML/JS/CSS application with FubuMVC.
  29. Serenity— This is growing in the automated testing recipes for FubuMVC.  Today Serenity does two different things:
    1. Jasmine Runner — An “auto test” runner for using the Jasmine library to write tests against JavaScript or CoffeeScript libraries.  Also gives us easy integration of Jasmine tests into our Continuous Integration builds.  This uses the FubuMVC asset pipeline and the FubuMVC.SelfHost library to run a small FubuMVC application to host the assets and manage dependencies between JavaScript libraries and their spec files.
    2. Infrastructure for testing FubuMVC applications using Storyteller and WebDriver
  30. StructureMap 3 — It’s not dead, but I haven’t been able to spend much time on StructureMap the past 18 months.
  31. FubuPersistence — This is new, but Josh and I have been extracting some persistence infrastructure code out of past projects, cleaning it up, and making a new library.  This is our implementation of a generic Repository pattern along with some basic support for soft-deleted objects, multi-tenancy at the database level, and some infrastructure for dumping and resetting application state in automated testing scenarios.  We’re also adding very basic RavenDb support as well.**
  32. FubuValidation and FubuMVC.Validation — A very small validation library based on my project work going back 5-6 years.  Validation frameworks are a dime a dozen, but this one was built to integrate with FubuLocalization for customizing messages and at the time, was meant to make it easy for one of my former teams to “inject” customer specific validation rules from an extension Bottle.  This repository also contains the FubuMVC.Validation library to integrate FubuValidation into FubuMVC applications, but I think that library is due for a near rewrite soon.

* I think the negativity towards auto-mocking containers is exaggerated.  The only danger to me is in not paying attention to what you’re doing.

** Oh My God, Ayende said we’re not supposed to abstract data persistence at all, what are you doing!?!  It’s really this simple, we use the abstractions most of the time when there isn’t any kind of special performance or exotic querying requirement because it makes things very simple, but happily bypass all of that and go right down to the metal whenever we do need to.  Just go retrieve that baby that Ayende threw out in his bathwater.

8 thoughts on “A high level look at the FubuMVC Ecosystem

  1. Do you think the OWIN camp will pull it together to create a Rack equivalent for the .NET stack? I’ve been watching them for a while now and doesn’t seem like it is getting to a place where developers can feel confident using it to support their apps.

    I’d love to hear your thoughts.

    1. They’ve more or less started over. There is a new OWIN spec out there that I have described as “much less insane” than the earlier versions. The problem is that nothing supports it yet to my knowledge. Watch the Katana project from MS for OWIN support.

      For right now, it’s Self Host for embedded web apps and testing, and ASP.Net as the de facto rack for IIS, Apache, and nginx.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s