Status of Sails.js
github.com
github.com
I guess we are in a time where our tools are expected to significantly change frequently? It seems like I have a disconnect with this mentality as we're running products where stability (reliability as well as API stability) and solid documentation are more important than constant innovation. I like to see bug fixes or security patches addressed quickly, and perhaps a branch for the next major version. But if there's no major issues then I really don't need to see hundreds of commits happening every month on the current branch.
I don't know, perhaps sails is riddled with unfixed bugs? If not though, judging a project on the number of commits seems somewhat like judging it based on lines of code. Neither of those metrics necessarily indicate quality.
I wrote about a fair amount of unexpected behavior with Sails/Waterline. Some of these have since been fixed, some of them (Waterline defaults to dropping tables unless you have NODE_ENV=production in an env var) are deliberate decisions and hence not "fixable". https://kev.inburke.com/kevin/dont-use-sails-or-waterline/
There's a fair amount of other stuff I would hope to change and that we've just ripped out of our fork.
- If count() isn't implemented in an adapter Waterline will fetch the entire table into memory to count the number of rows.
- Sails by default creates a route for every function in a controller, which makes it easy for an attacker to bypass policies
- blueprints routinely 500 server error based on user input
- https://github.com/balderdashy/waterline/issues/1248
- All SELECT queries on text fields call LOWER() before matching, so all of your indexes also have to match this
- There's a batch insert interface but N connections are established to insert N records... if one of the inserts fails, the behavior of the other inserts is not guaranteed
After the ugly discussion at the OP's link we decided to fork Sails and Waterline and rip out all of the stuff we don't need. I wrote about that here: https://kev.inburke.com/kevin/safely-moving-a-large-shrinkwr...
Whoa, that is bad. If you don't understand what a transaction is, you have no business writing a database library.
Like I said, I don't really know much about Sails. I was just interested in the idea that ~10 commits per month would be insinuated to be an abandoned project.
https://github.com/django/django/pulse/monthly.
For rails, 468:
https://github.com/rails/rails/pulse/monthly
ExpressJS, on the other hand, only had 5 commits this past month, but one could argue that it's not as "heavy" as SailsJS and others are trying to be.
I agree commit count by itself is not a good pulse on a project's life, but, as this thread shows, there's a lot of issues left unresolved. Not mentioned yet one of the lead developers posted on Sails.js future right here:
https://www.reddit.com/r/node/comments/2p2i40/is_sailsjs_dea...
The most important line is:
> There's not much really left to add to Sails other than bug fixes at this point.
All these indicators together = a dead project.
https://github.com/balderdashy/sails/issues/3429
> Hey Cody, thanks for sharing your concern. Apologies for the lack of transparency from our end- it's coming from a place of limited resources, not deliberate opacity. Like you said, we're a small team spread across a few large projects right now; and it's part of why we've been in more of maintenance/stability mode with Sails and Waterline over the past 9 months.
> Another thing has happened too: we've become more attuned to the full lifecycle of development with a Sails app. The work we do outside of open-source has always been a huge influence on Sails-- I mean, I firmly believe the reason why the framework has helped so many other folks is that we've always focused on solving real-world problems that we have ourselves. Now that we are a product company (as opposed to being focused on services), our team has become more attuned with the experience of working w/ a Sails app over the course of months or years (as opposed to the experience of the first 2-3 months). As you might expect, maintaining our own large-scale production deployment has drawn our attention to issues like security and performance more than ever before.
I agree with fideloper that it's better not to use NodeJs or any of that mess of an ecosystem for projects more complex than 'plumbing code'.
Saw this comment and it reminded me how Waterline ORM became a running joke at my office. Save yourself a headache and avoid these JS backend frameworks:
> I can chime in on Waterline since everyone keeps mentioning deep populate! The PR for the polyfill is pretty much ready to go, it's a recursive query runner that will run queries until the results are completed. This will increase the query count in sql adapters until the adapters understand how to interpret and build these join queries (nosql adapters don't have joins so those will work).
Who needs N+1 select issues when we can have recursive queries baked right into the ORM! smh
Linkedin also uses Node.js and they found a 50% increase in development speeds as a result after making the switch a few years ago.
The problem with the node.js ecosystem that I see is in the ORM world. There exist ORM frameworks (waterline, bookshelf, etc), but they're a bit less actively-supported, a bit more kludgy, and that area is (subjectively to me) more likely to be a pain point. When I have issues on the back end, I end up having to write some custom SQL to fix them (which is easy enough, but hardly elegant). I rarely have framework-level problems with the stuff hapi.js is in charge of. As an example, I typically use bookshelf as a starting point for ORM stuff, but rolled my own hasmany and migrations code because I was unsatisfied with what bookshelf provided. Not a big deal, but also not standardized. I guess that may be one reason people end up using mongo - mongoose is a pretty handy library. I prefer postgres, so I'm stuck with my hybrid of raw SQL extending more generic ORM models.
I previewed sails.js a while ago when I was jumping into node from RoR (mainly so I could live in the dangerous world of websockets), and it was the all-in-one, monolithic nature of the framework that I found off-putting. Sails at the time didn't support hmabtm relationships at all, and it was going to be pretty difficult to lever in the business logic I needed to support on the back end (view permissions on both sides of the join). I ended up enjoying the decoupled app / orm framework model, since it meant I had more mix-and-match flexibility.
Ultimately, there's definitely no one true batteries included framework to do the entirety of a CRUD application in node.js (although who knows, one may emerge), but I'm enjoying the fragmentation's flipside: mix-and-match stuff, and lots of little libraries that just do one thing.
^^ after spending several man years of effort on the subject, that's the inevitable boundary in ORM development, IMHO. It was this that made me realize that we needed to be focused on providing a better, cleaner way to allow running custom queries using a declarative, database-agnostic syntax, rather than focusing on implementing even-deeper support for xD/A queries.
Also I don't mean to nitpick, but I'm hearing a lot of negativity towards Waterline from a couple of the commenters in this thread, and I'm not clear on how it lines up with specific, actionable criticism that I or the rest of the core team can do anything about. I get that having to use a framework or stack for work when you aren't excited about it is horrible (it was originally how I felt about Grails and Hibernate when I was using them every day in 2011).
But I think it's important to keep in mind that this is always "compared to what". The Java ecosystem has had years to develop tools for working with data, and it certainly still provides more mature utilities out of the box than you're going to get as someone new to the Node world, even today. But I firmly believe in the power and flexibility of JavaScript-- not because it's a good language or anything-- but because we all had to learn it to do front-end development in the browser. And so will the next generation of developers.
Whether we like it or not, Node.js is here to stay. And for me, that's a tremendously exciting thought. A future with the world sharing a common programming language is a goal worth fighting for. It's a future that dramatically lowers the barrier to entry to full stack web development, and vastly expands the pool of people willing and able to contribute to free and open-source technology.
Hang in there :)
I am certainly more productive in Ruby or more recently Elixir than JavaScript on either the client or server.
http://highscalability.com/blog/2012/10/4/linkedin-moved-fro...
When you have a company which is split up between frontend and backend teams, this requires your engineers to coordinate their work with one another and this reduces overall productivity (you usually need a lot of back-and-forth to bring the feature to completion).
I mean, sure, someone could learn RoR on the job, but in practice, will they actually do it? In all companies I worked for where the frontend and backend languages were different, developers tended to stick to one side of the fence. Developers just don't like context switching.
On the other hand, if a developer cannot figure out Ruby on Rails (or Sinatra, or Django, or Flask, or any of the PHP frameworks), and does not even know SQL, do they really have any business doing server-side web development?
Knowing JavaScript and one server-side web app framework/language is a pretty minimal requirement for a full-stack web developer. It boggles my mind to think that there are people working as professional developers that literally only know JavaScript. Those people should not be doing server-side development.
Edit: Unless he is only using helpers? Then I wonder how much power he can do with client side applications compared with modern javascript/typescript tools...
@SignMeTheHELLUp is complaining about Waterline ORM, but I'd argue that Hibernate is worse (and it's an "industry standard"). It's just a fact of life that ANY ORM will suck because it tries to build an isomorphic API over several database abstractions.
Also, come on, entire world-class companies are based on a Node.js architecture (Uber comes to mind)[1]. If you can't write solid code in Node, you're probably just a shitty programmer.
[1] https://www.quora.com/What-is-the-technology-stack-behind-Ub...
Are you serious. Hibernate and all it's language-specific variants are actual feature-complete ORMs. Waterline falls flat as soon as you get past eager-fetching a child property. It's a toy.
I wasn't just complaining about Waterline either. Every time I had issues with Sails I had to dip into the Sails source and patch bugs out, eventually I replaced parts of Sails with libraries that actually worked. By the end of the project the only "Sails" left was the routing component...
Edit: Of the two sites you linked to, one is a splash page and the other is an aggregator that loads slowly. Neither are real-world LOB applications with complex logic underneath them.
I can write solid code on Node the same way I can on any PHP framework, but I'm experienced enough to know to look elsewhere when my requirements are complex.
Would love to hear more about this - if time permits, would be a great write-up.
> I wasn't just complaining about Waterline either. Every time I had issues with Sails I had to dip into the Sails source and patch bugs out, eventually I replaced parts of Sails with libraries that actually worked.
I don't even know what this means. Sails is basically just a router on top of express with grunt tying everything together. What part of sails did you have to "replace"? The i18n? Let's not be dramatic here.
But then again, your post about staying away from Node just showed how unhinged you are. I'm no language zealot, but that's just ignorant to say when world-class companies are using Node on incredible scales.
Moving fast and breaking things seems par for the course in javascript land, I don't really try to keep up.
I've ended up only using NodeJS for plumbing type apps (e.g. web hook listeners calling other APIs), definitely not for full on web apps, which I've found too-easily devolve into a mess of code.
Keeping up with anything in the NodeJS community is hard - from Node/NPM itself to all the OSS projects around it. I still use it, but I do definitely make fun of how often I'm destroying the node_modules directory and npm installing "fresh" due to the weirdest errors.
At my current one, we are re-implementing a ton of very detailed business logic from a PHP/Cake app, while writing comprehensive functional and browser tests. We considered Sails.js but decided the framework was immature vs. Ruby on Rails.
Rails has worked great for us, and has a ludicrously evolved ecosystem, with fantastic gems available, Stack Overflow answers, and lots of other users filing and resolving Github bugs before us (most of the time).
Rails is not as trendy as Isomorphic Javascript, but Ruby is a pleasure to develop on.
The turbulence with Sails.js makes me feel even better about our choice.
The Trails project is developing thanks to Travis Webb and team, and his reasons are described in the pull request.
The Trails README includes this intro:
"Trails is built and maintained by former members of the Sails.js core team, and offers an upgrade path from existing Sails applications, but it utilizes exactly zero lines of code from the original Sails project."
I've looked over these issues and noticed Travis is just copy/pasting the same message stating "Sails.js is no longer actively maintained". It seems like this guy has a real vendetta against Mike (the creator of Sails) and is dead set on getting all current developers of Sails libraries to either make their library trails compatible or die. This guy really doesn't like Mike and even though he has some good points on making a new framework it seems there might also be some personal issues driving this decision.
Our company lives off consulting around the open-source tools we build and support. That's it.
It's good that you can be passionate about what you are doing, but it's obvious there are other motivators
EDIT: sp and example motivator -> https://twitter.com/TravisWebbUSA/status/679406525358600192
If I were to speculate, I believe this diction has less to do with Travis hating Mike and more to do with the fear of being outmoded, i.e. "We built our library on SailsJS and it would be unthinkable/very difficult to change if SailsJS was subsumed by another project"
Comments on your main library give credence to this fear, such as the one posted by the main dev just recently in the Github issues:
> Waterlock has been struggling recently because of a lack of time from the guys that maintain it. I've tried to do what I can and so have the other guys. But there hasn't been enough going on recently.
Factoring in that Waterlock has 43 open issues since 2014 that have either not been closed or given a label, I can see why there would be uncertainty over this library's future.
For beginners, you can still use sails to build apps and also take the project structure of sails as a good starting point for building node.js applications.
The only minor gripe I had with sails is that the "neglected" vibe it gives on github.
Otherwise, I will continue to use sails and also check out trailsjs on the side.
I think Meteor did a better job in this respect. That said, Meteor's services are a bit too expensive.
Never mind the fact that you gotta have SQL for almost any robust enterprise app, which, in turn, is such a huge chunk of the market.
I just don't understand the hitching of the Meteor wagon to that broke-down MongoDB horse.
Meteor, imho, focuses much more efforts around building shiny things to convincing new developers to try it out. It has gained a reputation of being a great framework for writing hello world in 60 seconds, but not for building real business applications. Sails is a great tool, but unfortunately is dying, as evidenced by the attitude of the creators (who have moved on to work on other things), and the multiple articles on hackernews and elsewhere discussing whether it is dying. That answer, obviously, is yes.
It is for these reasons that we (several of the core Sails.js maintainers) decided to invest in building a new framework, where we could offer a Sails-like development experience using modern node.js tools and design practices. If anyone is interested in working with us, we'd be happy to talk with you: https://github.com/trailsjs/trails.
Also, hasn't Treeline been in 'preview mode' for almost a year now?
When using Node.js I always just throw some small modules together and be done with it. It also seems to me, that newer modules encourage this behavior, for example Koa is more modular than Express.
I don't get it... CEO and Founder don't seem to happy with eachother...
Trails will be the replacement for Sails. Modern, maintained, open, and community-run.
I've pieced this together based on Google searches.
Sails was started by Mike McNeil, who also started a company called Balderdash to do consulting and dev work using Sails. From what I can tell Balderdash isn't quite a "real" company in that everyone listed as working there also does other things at present (http://i.imgur.com/dFVQawi.png). (Mike also started a product company that utilizes Sails called Treeline. Full disclosure, I've been to some of their meetups in Austin, they seemed like clever guys.)
LinkedIn paints a slightly different picture (https://www.linkedin.com/vsearch/p?f_CC=2604050) with a few more employees listed, including listing both Mike and Travis Webb as "CEO" (http://i.imgur.com/onnhqqO.png).
Given the size of the company, and the fact that the staff seem to be doing other things, I'd assume someone told Travis, "Hey you can be CEO, but you have to hit some metrics... and if you don't you can't be CEO any more..." And given some of the bickery on the other threads... maybe it wasn't clear or maybe those metrics weren't possible given the range of projects Mike and the other people were working on. We've all been there... Client says, "Yeah we'd like to work with you, but... Do A, B, C, and fix X, Y, Z first..." maybe Travis needed Mike's help and didn't get it. But who knows, and regardless it sounds like Travis was shown the door.
So, and you can see this in the numerous videos where Travis has been promoting Sails the last few years (just Google, he comes up for all the training / discussions around Sails), Travis really liked Sails, and had his feelings hurt because he couldn't work on the project he really liked. And in response, he's now saying, "Burn the ships, Sails is dead, everyone come with me to Trails."
Guy goes from being a huge Sails fanboy in hours and hours of videos that are posted online, to coming here 2 weeks later saying, paraphrased, "I'm going to build my own Sails... with blackjack, and hookers." This scenario sucks for everyone.
You hire a good dev, someone who knows how to get the technology side done... he offers to step up to a bigger role... but who knows, maybe he can't make sales, can't retain customers, he isn't a leader, or isn't focused on the company needs because he's only interested in being a dev... but wants the title of CE-something because he's 22 and it's an ego boost... so rather than leave with dignity, and move on to his next job going back to what he was good at, he is out to sink the people he had been working with.
That's my read. I could be totally wrong, but the drama here peeked my curiosity and after an hour of digging around that's what I came up with.
First, I'm not 22, and our COO ran the largest jQuery cobsulting firm (appendTo) for 5 years. Second, McNeil did not hire us, we purchased the company; McNeil has no ownership in the "new" Balderdash. Your educated guesses about hitting metrics and so forth don't apply to anything here.
Mike McNeil needs control of Sails.js because he promised it to his VC investors behind treeline. We did not know this when we entered into the acquisition of Balderdash, and that's not what we signed up for. Since we were lied to for nearly a year, we are pivoting the company and our open-source efforts toward other things. Trails is one of those things.
So yeah, you saying the project is dead when you know others are still working on it, and trying to tell other people to switch with you -- seems at best shady. Getting a project rolling is hard enough without an active saboteur. Not a great way to get your own business going. Seems to me -- outsider perspective -- you should just move on and focus on your own thing. Clean breaks, right?
He refuses to speak with me directly, so there's no resolution to this yet. Nor do we really understand why he decided on this course of action at all. I hope to bring things back to some equilibrium, but one permanent change is that we are no longer supporting Sails, and are directing all our efforts toward developing Trails.
The maintained-ness of Sails is really a separate issue from the ceo-schism drama. There are plenty of other literature which discuss the technical deficits of Sails, and the incredible amount of work it needs merely to be viable as an enterprise framework. That it relies on EOL'd dependencies, and has no plans to upgrade them, is an example.
Hopefully relationships can be amended amicably and if Sails.js is truly dead in the water then hopefully Trails.js will pick up where it left off and on better footing I hope, but it will take some time and also some proper PR might of been helpful to the many Sails.js users as well as it didn't need to reach this point, also on that PR note should we expect that they can easily port over their Sails.js projects over to Trails.js?
I was hoping to re-visit Sails.js for a project but considering all that's been happening I'm not sure I should just go with something else like Python+Flask and let Trails.js mature a bit more.
I posted a few important clarifications here in the original issue: https://github.com/balderdashy/sails/issues/3429#issuecommen...