Handcuffed to Microsoft?

HandCuffs

Is BreezeJS handcuffed to Microsoft ... or does it just seem that way?

BreezeJS is a pure JavaScript library for building Single Page Applications in HTML and JavaScript. Technically, the server technology does not matter. Breeze works with any server capable of delivering data in response to an HTTP request. The server could be running Microsoft's ASP.NET. Or it could be running node, Rails, PHP, Java. BreezeJS neither "knows" nor "cares."

But we understand why you might think otherwise. Derick Bailey made sure of that :-)

NOVEMBER 2013 UPDATE

There are at least six Breeze samples that demonstrate BreezeJS working with a server that doesn't rely on Web API + Entity Framework: Edmunds (public API, server technology unknown), ESPN (public API, server technology unknown), NoDB (Web API, in memory database), Intro to SPA-Ruby (Ruby on Rails), NorthBreeze (Web API, NHibernate), and Zza (Node, Express, MongoDb, Angular). The Ruby and Node samples do not involve any MS technologies at all.

When you can't get metadata from the server, you can always create Metadata By Hand  on the client.

We hope to publish some tutorials for these alternative workflows soon. The best we have at the moment is a 15 minute video walk through of the Ruby sample.

The evidence is incontrovertible ... you can use BreezeJS with almost any conceivable combination of backend technologies.

.NET affinity

BreezeJS ships in the same box with "Breeze.NET", the productivity components that make Breeze-friendly .NET server-side development quick and painless. Two NuGet packages update a Visual Studio web application project with Web API, Entity Framework, and Breeze.NET DLLs. Visual Studio Extensions can generate one of four different complete ASP.NET MVC 4 sample applications in less than a minute. Most of the video courses, samples, and documentation illustrate techniques against a backdrop of Microsoft tools and technologies. The GitHub source code is drapped in the trappings of Visual Studio.

We made a conscious decision to tap the .NET market first. We are doing - and will keep doing - everything we can to make the .NET community feel right at home with Breeze.

duck

So ... if you're not a .NET person ... we know what you're thinking

If it looks like a duck, walks like a duck, quacks like a duck ... what else can it be?

We're telling you it's not a duck.

We've got work to do

We have a four part program to persuade you

  1. Show BreezeJS interoperating with non-NET back-end services (like NodeJS & MongoDB, Ruby, or no-back end at all)
  2. Demonstrate Breeze development with non-Microsoft tool chains
  3. Offer "productivity" components that make service development as easy in non-Microsoft technologies as it is with ASP.NET, Entity Framework, and SQL Server
  4. Change BreezeJS where it inadvertently clings to .NET assumptions

Baby steps

baby-steps We have made some progress on Task #1. The Edmunds sample is a client-only example that has no server of its own. It talks to the public API of the Edmunds.com Vehicle Information service. Edmunds does not disclose the back end technologies they are using; as a consumer of the service we don't need to know nor care.

BreezeJS relies on metadata to comprehend service data as client-side entities. Edmunds doesn't supply metadata; it merely describes in English the shape of the JSON payloads. The payloads don't conform to what Breeze expects out of the box.

No problem. The sample application shows how to write entity metadata for the Edmunds model in JavaScript and how to write a custom JsonResultsAdapter that maps the JSON payloads into Breeze entities. These are useful techniques for all Breeze developers.

This sample has no Microsoft dependencies. You can copy the pure client-side assets (index.html, Content, Scripts, and app folders) into your environment of choice, edit them in anything, and serve them from anywhere.

It's a start. But it's far from the welcome wagon that you expect and deserve.

Update: Patrick Walter's ESPN sample demonstrates the same techniques using Durandal instead of Angular.

Next steps

Per Derick Bailey's suggestion, we will write a tutorial that is a:

A complete example, with the full HTML layout and a complete JavaScript file that implements a simple API call ... so that people who have never used Breeze can get it running with copy & paste instead of hunting down the right order of which files to include.

... and we'll promote that sample so you can find it easily

We have a backlog packed of other specific tasks

Samples

  • More technology-neutral examples in jsFiddle and Plunker throughout our documentation
  • Show service calls with parameters instead of OData query syntax
  • Rails, Java, and PHP back end services
  • MongoDB
  • Node/Express + Grunt
  • Jade HTML templates
  • PHP Slim
  • Hibernate (and NHibernate) ORMs
  • Complete our OData offering for Java developers

Tooling

  • Grunt tasks to scaffold a Breeze app
  • Presentations and guidance portrayed using VIM and Sublime
  • Sinatra for Ruby web application development

Productivity components

  • Node modules
  • Ruby gems
  • EmberJS model library adapter (a Breeze plugin)

We need you

We want you

Hey folks ... Breeze is an open source project.

We have a big agenda. We probably can't do it all alone in a timely fashion.

If you see potential in Breeze, why not help everyone realize that potential? You have mad skills. Please contribute them.

We welcome:

Please add comments to this post. Are we on the right track? What are we missing?

If you have a pertinent expertise, please tell us how we can reach you.

The pool is now open!