
SailsJS 1.0 – Rails-like JS Framework - hit8run
https://sailsjs.com
======
Lazare
I've never tried Sails, but I'll note that it has a very bad reputation in the
node community for many years, with particular scorn heaped on its poor
documentation, many bugs, slow development pace, and (especially) its truly
bad ORM.

Representative criticism: [https://kev.inburke.com/kevin/dont-use-sails-or-
waterline/](https://kev.inburke.com/kevin/dont-use-sails-or-waterline/)

Or see the comments here:
[https://github.com/balderdashy/sails/issues/3429](https://github.com/balderdashy/sails/issues/3429)

Now admittedly that was three years ago, much may have changed, and this
release may be amazing, but I'd suggest doing some due diligence. I've run
across 6+ different projects regretting their use of Sails; I've yet to run
across someone celebrating their decision. The project is troubled and
probably on no one's list of "top 3 node js frameworks".

~~~
uncletammy
I'm seeing a lot of "I haven't used it but..." in this thread. As someone
who's actually been using Sails consistently since v0.10, I can easily say
that it's without a doubt my favorite node framework.

I use it because I can go from idea to functional prototype in just a few
hours. I don't need to spend a bunch of time deciding how to best structure my
projects because it's obvious where things go.

When I have to work on a product that wasn't built on Sails, it's either a
complete mess or it's clean but only because they've burned a ton of
development time creating many of the same abstractions that Sails comes with
out of the box.

I'll admit, the ORM hasn't always been great when you need to integrate with
an existing data store. It's absolutely perfect for simple CRUD apps though
and you always have the option to run native queries.

The only other semi-valid complaint I'm seeing is that the docs are bad. Well,
they've been bad in the past. The new docs for v1 are loads better. I've
referenced them quite a bit over the last few months.

I just launched my second product this year built on Sails and I'll soon start
my third. The new features in v1 are absolutely worth giving it a shot if you
haven't already.

~~~
vorpalhex
I've used Sails, and man, it was painful. When they say "Rails-like" they mean
they somehow managed to adopt the worst patterns from early versions of Rails
and none of the cleverness of later versions.

If bloat was a contest, Sails would be a winner.

~~~
uncletammy
You've obviously never used Meteor then

------
ruffrey
Sails was a disaster for a startup I joined 4 years ago. We spent countless
hours working around it and eventually ripped it out with great pain because
of an impossible upgrade path. There are so many JavaScript antipatterns and
unnecessary abstractions. Everything offered by this framework would be better
accomplished by cleaner, loosely coupled individual modules like Express,
socket.io, node-config, and Bookshelf.

Sails made the inexcusable choice of exposing everything globally.

Waterline tries to be a single ORM for all DBs. This is not a good idea. When
I used it, it made a mess of redis by leaking these weird indexes it invents
to support it's paradigms. The SQL pieces do not support joins or transactions
with any amount of sanity. Use sequelize.js or Bookshelf/knex instead.
Waterline can't hold a candle to the stability and expressiveness of Mongoose
for mongodb. And so on.

The creator of these projects is a super smart and nice guy. But the community
isn't strong enough to make this framework top notch like, say express or
hapi. Sails glues things together in a way that is useful for iterating
quickly as a newbie, but you can't build a realtime SaaS on it.

~~~
timrichard
I ripped it out of a startup too, but can't really add much to your excellent
summary. I also remember bloat, stability issues, and being locked into old
dependencies.

I was relieved when I had the goahead to mothball that project and build a new
MVP using plain Express and Knex.

~~~
ruffrey
Yeah - being locked into old dependencies, and old versions of Node,
ultimately made us rip it out (with much pain).

------
mahesh_rm
I am usually not into framework battles, and I am not a
contributor/affiliated, so take this as a sincere opinion of a fullstack js/ts
dev. If you are about to jump into js serverside, take the time to evaluate
Nest: [https://nestjs.com/](https://nestjs.com/). Especially if you are coming
from a modern SPA (react/angular/vue) background. I find its approach far
superior to any js (and non js) backend alternatives I have been so far
working with.

~~~
Vinnl
Wow, I confused that with Next.js for a moment, which I turn confused with
Nuxt.js. Great...

Anyway, it's great that it's written in TypeScript. I couldn't find this with
a cursory glance through the docs, but how does this handle the front-end? Can
it do server-side rendering, for example, or is that completely separate?

~~~
mahesh_rm
Yes naming is weirdly close to next. Nest is basically an architecture core,
think of it as a way to "angularize" (2+) your express app. You can use what
library better suits you for any purpose you'd need, e.g., nuxt or pug, for
SSR.

------
luislobo
I've been using Sails since version 0.10 (about 4 years from now). At the
time, it was the best framework you could find in Node with an MVC pattern. We
are still using it, and it works perfectly fine for us. Even Waterline, its
ORM has been great (we use MongoDB), and for doing some
optimization/shortcomings, it has a .native method that allows you to
implement whatever you need. I know that a lot of work have been put into this
new version, including a totally new refactored Waterline, great improvements
in speed and async/await support, much better code organization/style, etc.
About the "lack of support", well, I know it's been slow sometimes, but, hey,
it's open source, and all the work comes out the maintainers pocket (it's not
backed regularly by any company). I really want to congratulate the team for
reaching 1.0. I know all the effort you put into it, and always looking after
the users, trying to make it better.

------
idealboy
I've been using Sails 1.0 in production for the past year and haven't had any
problems. Excited to see this fully released!

My experience has been that Sails dramatically improves productivity and
efficiency for me and my team. As for the ORM (Waterline), we primarily make
CRUD apps and haven't had a single problem with it. But, in cases where you
might want more fine-grained control of your query, you can always drop out of
Waterline and write native queries.

Sails isn't perfect, but it provides native access to any of the components it
uses, so if you ever want to drop out and work with Express and your datastore
directly you can do that.

Sails is a convention-over-configuration framework, meaning if we all agree on
certain conventions then we don't all have to reconfigure every time we make
any app. I think that's very difficult for people that are new to the
framework, because they haven't learned the conventions yet, and they are used
to doing things a certain way. But if you're willing to embrace Sails'
conventions there is a huge upside in productivity.

~~~
mercer
I don't usually do this, but I find both idealboy's and luislobo's comments to
be somewhat suspicious. I can't for the life of me imagine that they were paid
to post positively about a crappy node framework, but one of them has few
previous comments, and the other's history is... odd to say the least
(including a previous similar accusation).

My sincere apologies if I'm wrong about this, but my experience with Sails
(and its 'culture') has been sufficiently negative that I wouldn't put it
beyond its leader(s) to pay some semi-real accounts to post in favor of it.
The alternative is lack of dev experience though, so maybe that's it.

~~~
idealboy
Hah or maybe I’m just a fan of the framework? There are quite a few of us out
there, and growing ([https://npm-
stat.com/charts.html?package=sails&from=2015-04-...](https://npm-
stat.com/charts.html?package=sails&from=2015-04-03&to=2018-04-03))

I find your comments suspicious. Perhaps you’re part of a Russian campaign to
sow discord in the open-source community? My sincere apologies if I'm wrong
about this, but from your comment history it sure seems like it.

Either way, I prefer to encourage the fine people that contribute to our
ecosystem instead of degrading their contributions. But to each their own I
guess.

~~~
mercer
Yeah, I kind of expected that response. I'd say my comment history doesn't
indicate anything like that. So your point is is not a very good one.

I'm happy to hear you actually like the framework. I just was truly suspicious
and felt it was worth saying.

Also, I also prefer to encourage fine people who contribute, which is exactly
why I raised this suspicion. If you're a contributor, I wish you'd contribute
to something better, but I commend you for doing so anyways.

------
poyu
There's also Adonis, which is somewhat the same. Never used it though.

[https://adonisjs.com/](https://adonisjs.com/)

~~~
velodrome
It is very easy to learn and is similar to Laravel.

~~~
sdfin
I started learning Adonis once, but then I noticed it attempts to copy Laravel
and that it's not yet a finished copy. So I decided to investigate Laravel,
liked it and stayed with it. Laracasts and its docs are great.

Maybe Adonis can keep improving and eventually get to Laravel's level, but I
highly doubt it, as it is a single developer project. Also it's a risky bet to
use a single dev project.

~~~
joshmanders
> Maybe Adonis can keep improving and eventually get to Laravel's level, but I
> highly doubt it, as it is a single developer project. Also it's a risky bet
> to use a single dev project.

You know Laravel is a single dev project right?

~~~
sdfin
You are right. Still with 41.000 github stars and thousands of users I
wouldn't worry about it being discontinued if the main developer stops working
on it.

~~~
joshmanders
That's the beauty of open source, just like with Laravel, Adonis can have a
fork if the main dev just up and disappears too.

------
TheAceOfHearts
I haven't looked at the latest release, but when I've previously looked into
SailsJS I found it quite disappointing. It falls short of the awesome Rails
ecosystem.

Two criticisms:

1\. No database migrations. With Rails you get built-in tools to managing
database migrations. If I recall correctly, their ORM used to have some absurd
default behavior, something like dropping the table and creating a new one
when you wanted to change something.

2\. No tests. With Rails you get a fully setup testing environment.

------
everdev
I tried Sails about 3-4 years ago. Basically, you're taking the good from
Rails (MVP code generation, relations, convention over configuration) and puts
it on JS, which unfortunately it's still a nightmare to develop CRUD apps
with.

Async is great for lots of things, but not for your entire app.

If you want an async-first app, JS is probably a good choice. If you want
CRUD, use Rails.

~~~
wild_preference
> Async is great for lots of things, but not for your entire app.

That criticism is pretty dated now that JS has async/await. Given that you
understand promises, async code has become trivial.

~~~
everdev
It's still an extra step to undo the async by default of JS. In other
languages, the async is added only as needed, which I prefer.

~~~
always_good
What do you mean by undo?

Languages that aren't async by default (most of them) make async tedious when
you do want it. A web application is precisely the sort of thing I want async.
So it's in fact an extra step to write async code in most languages when
building a web app.

For example, just firing off a few requests (database, other APIs) in a route
and awaiting them. JS makes this trivial.

------
sideproject
Interesting. It looks like it took a very long time for them to get to v1.0. I
used SailsJS a few years ago when it was a relatively new-kid-on-the-block
framework.

But if I remember correctly, the creators of SailsJS went through YCombinator
program with a product called Treeline

[https://treeline.io/](https://treeline.io/)

Not sure what happened to that product, but I do remember when it was
released, there was a concern about what would happen to SailsJS.

Correct me if I'm wrong, but I do believe in terms of framework on NodeJS,
Express is... the most widely used and sufficient enough for Rails-like MVC?

~~~
coev
Express doesn't really enforce MVC at all (it's pretty minimal), you have to
structure that yourself in your project.

------
hit8run
Did anyone use both Rails and Sails and could elaborate a bit about the
development process compared to Ruby On Rails? I had a brief look at the
boilerplate project sails generates supporting login and payments but I found
it not as clear as Rails. But I use Rails for about 9 years now and therefore
I am used to it.

~~~
damoonvisuals
I used Rails 3.2 and Sails 0.12 in the past.

The lifecycle callback methods are almost identical to Rails. Waterline is an
absolutely awful ORM for database management: You have almost no granular
control over joins on MySQL tables. Additionally, the third-party libraries
available for Node.js are much more sparse than the Rails' ecosystem.

Having said all of this, I am still very excited to upgrade my Sails API to
1.0 and take advantage of all of the new ES6 features.

------
nagarjun
I owe a great deal of gratitude to the Sails team. I've built numerous
projects over the last few years using Sails. Congratulations on the big 1.0!
I do somewhat agree that documentation is sparse and Waterline is a hit or
miss but for most things, Sails has served me very well.

------
handbanana
The only thing that stopped me from trying this out more in the past was it
not being at 1.0 yet. So definitely looking forward to giving it a go at some
point

------
niftylettuce
Near release of Lad beta 1.0.0 which uses Koa and is way faster

[https://lad.js.org](https://lad.js.org)

------
romanovcode
I've used sails 3 years ago on a startup that we wrote from scratch.

Don't want to be negative but it is by far the worst framework and ORM I've
ever used. Strongly recommend reading this[0] before you even start fiddling
with the framework.

Even tho there are 100 wrong things about it the absolute worst: ORM
"migrations" work in a way that they drop the tables and and then re-create
them. If you have a lot of data the table is dropped and you get Out Of Memory
exception - what a great ORM!

[0] [https://kev.inburke.com/kevin/dont-use-sails-or-
waterline/](https://kev.inburke.com/kevin/dont-use-sails-or-waterline/)

~~~
mikermcneil
Creator of Sails here. I’d like to set the record straight: The automigrations
system is not, and was never, designed for production use. Sails/Waterline
documentation explicitly and repeatedly warns against using this feature in
production.

On top of that, developers are forced to accept a prompt on the terminal the
first time they lift an empty new app indicating that they understand this.
The only way to make the prompt go away permanently is to hard-code
configuration, indicating that you understand what automigrations are designed
to do.

In fact, just to be safe and prevent accidents, automigrations are forcefully
disabled in production mode.

In other words, to get your production/staging app into a state where this
criticism is relevant, you have to ignore console warnings, skip reading the
documentation, and go out of your way to trick the framework into thinking
you’re running your app in development mode.

I won’t beat a dead horse re other points in that 3-year-old blog post, except
to say that, 3 years ago, some of them had merit. Those have been addressed in
the Sails 1.0 release.

~~~
jambaday
So, is there any production-ready migrations system ?

~~~
mikermcneil
Of course— luckily there are many great, framework-agnostic options for use in
post-production. I usually use knex.

------
nwhatt
I have lots of negative things to say about older versions of sails, but most
of the bugs I’ve had to workaround are fixed in later versions.

If you’re starting out just ditch the ORM altogether.

Sails is just plain express so if you need to piece it apart at some point in
the future it’s not too hard.

That said Sails is great for bootstrapping a reasonably secure and functioning
app in short amount of time.

------
D00M
Alright I think the timing is right with the implementation of SQL
transactions and ES6 features. Time to jump in and give it a go.

------
connor11528
Check out Adonis for a Laravel inspired Node.js framework that uses ES6
generators: [https://adonisjs.com/](https://adonisjs.com/)

------
singularity2001
We have tried it a year ago and were very disappointed: it was nothing like
rails and no batteries included worked as expected. Did the framework
categorically improved since then?

------
velodrome
How is this compared to FeathersJS?

~~~
luislobo
It's similar and different at the same time. Both handle HTTP and Websockets
at the same time, have different kind of adapters-hooks-pluggins to serve
different needs. Both are opinionated, but Sails is more express-like (you can
create "hooks" that are basically express middleware on steroids.

------
rhspeer
FYI: Sails plugins are called hooks, and there are about 7 community hooks at
this time

[https://sailsjs.com/documentation/concepts/extending-
sails/h...](https://sailsjs.com/documentation/concepts/extending-
sails/hooks/available-hooks)

~~~
chaostheory
I could be wrong but since it's based on express, there's probably more
plugins that are compatible; just not sailsjs specific.

------
baybal2
My experience is similar. Overengineered, unnecessary abstractions. Adds
little over basic Meteor. A RedHat style "consultanthiringware" in making.

