The Context for using Loopback for our application
We are working on the finalizing the technology stack for our product PipeCandy. PipeCandy is an intelligent outbound sales prospecting software (If you don’t like sending cold emails, PipeCandy is a no-brainer!). Our application would have to work with a lot of data, lend itself well to message-driven interactions.
Our decision framework
We took a typical polyglot approach to a technology stack. The platform has 2 main components: one for intelligence (Data Crunching, Machine Learning, Text Analytics and so on). For this, we finalized a stack of LUIGI, Elastic search, Spark, R and Python with a little bit of MongoDB thrown in.
The second part of the platform is a typical business web application to expose output of the intelligent platform and the business workflows.
For this, we decided on Node.js because it plays well in the context of a micro-services architecture. Some of our UI is message driven. Having decided on Node.js, we needed a web application framework (if you are only looking for an API backend, there are other good options like http://senecajs.org/) for rapid application development. Some of our selection criteria were
- Integrated a la Rails
- Quick CRUD development
- Automatic API generation from CRUD
- Good horizontal starter functionality
- Integrated build, deploy, debug, monitor capability
- Critical mass adoption
- Ability to get to barebones node when needed
- Embedded socket.io for push messaging
- Decent ORM with auto managed associations etc
- Not tied to a front end framework as we want to use React
- We considered the following frameworks:
- Sails.js, Loopback, Total.js, Koa.js, Meteor.js, mean.io/mean.js
Unfortunately, in Node.js web framework landscape there is no one clear winner with mass adoption unlike for Rails for Ruby or Django for Python. There is a lot of fragmentation with each framework having some nice features but with very little adoption.
The choices (Meteor vs. Sails vs. Loopback)
After the initial research, we quickly dropped Total.js and Koa.js because of considerations like lack of momentum, the strength of the organization behind it etc.
We had to drop mean.io and mean.js because they are tightly married to Angular and retrofitting React is a lot of work.
We gave more consideration to Meteor as it has nice features like a fully integrated tool chain and very easy data to front end binding etc. But we had to drop it because the choice meant that we couldn’t have a pure Node.js runtime. Besides, it was too opinionated, didn’t play nice with non-meteor specific third party components. Also, the front end was not switchable.
The decision then really boiled down to Sails and Loopback. Sails had the most adoption and Loopback had the most recent momentum.
Sails it is. Sails it isn’t.
We picked Sails because of the maturity, adoption, good documentation, availability of many useful plugins and our developer knowledge.
5438 commits, 23 branches, 173 releases, 195 contributors
1705 commits, 44 branches, 95 releases, 62 contributors
Oh, well and we did not live happily ever after with Sails. The proverbial shit hit the roof for us when the Sails team splintered and a rival framework called Trails.js came up. Also, though Sails had some decent GitHub statistics when we delve deeper most of it turned to be cosmetic changes like readme updates.
The fallback to Loopback
Finally, we decided to go with Loopback, for the following reasons:
- Isomorphic model definitions
- Strong support for API creation – plays well with our Microservices strategy
- Clean separation between API server and client
- Baked in mobile client SDKs
- Powerful ACLs
- Secure with baked in cross XSS
- Good core code quality
- Good suite of surrounding tools like StrongLoop Arc, visual API composer, CLI code generators etc.
- Great recent momentum
- Pedigree of the core developers
- Commercial tools from StrongLoop which gives them a business incentive to keep investing into
IBM has acquired StrongLoop, the company behind Loopback which will only increase the commitment to the commercial suite of products and keep the dedicated team working on Loopback funded. Also, IBM has a good track record of contributing to open source projects like Apache Spark, Cloud Foundry etc.
The jury is still out on whether our call is the right one. But we’ve been at it for a month now. If you are considering Loopback and want our detailed feedback, send me a shout out. I am Murali at our domain name if you are emailing me.
Update: Almost a year later, we decided to reflect on our decision to go with Loopback. You can read the article here