11 ms·
SailsJS 1.0 – Rails-like JS Framework
- hit8run 9y agoDid 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.
- chaostheory 9y agoI agree. The documentation feels lacking as well, though maybe it's gotten better for 1.0. There's no equivalent to the Rails Guide which was something I've taken for granted. One of the sails devs came out with a detailed book but it uses Angular 1.x as part of the examples. That said, this is probably still the best nodejs framework. It's one of the few that support relational databases.
- damoonvisuals 9y agoI 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.
- martinlev 9y agoI used rails about 3 years with multiple versions, and recently started to work on Node.js. Typically pure express-based websites tend to become quite messy, at least the projects I worked on. Started a new site with Sails.js 1.0 (beta) recently. It's definitely not as solid as rails. But overall I am pleased so far, except some shortcoming, ex. the lack of out-of-the-box migration system.
- rhspeer 9y agoFYI: Sails plugins are called hooks, and there are about 7 community hooks at this time https://sailsjs.com/documentation/concepts/extending-sails/hooks/available-hooks https://sailsjs.com/documentation/concepts/extending-sails/h...
- rachaelshaw 9y agoList got out of date- check out: https://www.npmjs.com/search?q=sails%20hook https://www.npmjs.com/search?q=sails%20hook
- chaostheory 9y agoI could be wrong but since it's based on express, there's probably more plugins that are compatible; just not sailsjs specific.
- ashelmire 9y agoFrom that page: > There are more than 200 community hooks for Sails.js available on NPM. Here are a few highlights: You appear to have read this a bit too quickly. As someone linked below, there are actually over 350 community hooks. Disclaimer: I have never used Sails, know nothing about it, and have no intention to use it in the future.
- handbanana 9y agoThe 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
- mahesh_rm 9y agoI 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.
- handbanana 9y agoCan confirm, nestjs looks nice
- marpstar 9y agoOn my most recent app, I started with Hapi but was starting to get bothered by the number of "official plugins" that did not include TypeScript typings. After waiting weeks for official Hapi v17 typings to make it into DefinitelyTyped, I gave up and switched to Nest and found it much easier to get started. For me, the fact that it's written in TypeScript and based on Express (i.e. you can use any Express middleware) was enough to make it more compelling than other options.
- chaostheory 9y agowow - supports SQL and not just through GraphQL
- Vinnl 9y agoWow, 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 9y agoYes 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.
- Lazare 9y agoI'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".
- winrid 9y ago+1 The fact that the core developers of the ORM think that defaulting to case-insensitivity for all queries and not using indexes is OK is enough to scare me away.
- rachaelshaw 9y agoIt doesn't work that way in Sails 1.0; case sensitivity is adapter-specific
- winrid 9y agoThat's good!
- kethinov 9y agoIf you're looking for something between the minimalism of vanilla Express and the heaviness of Sails, check out a project I've been quietly building with a small team for a couple years: https://github.com/rooseveltframework/roosevelt https://github.com/rooseveltframework/roosevelt We don't consider it finished (or 1.0 quality) by any means, nor do we consider the API stable or fully thought out, but we think we have something here that is unique and a good balance between simplicity and features. The main emphasis is on having as low a learning curve as possible. We're also happy to take suggestions or even better pull requests. Got many issues marked "help wanted" for anyone interested, and we do provide mentorship to people who want to contribute but have limited experience with Express or Node.js in general and want to learn as they go.
- everdev 9y agoI 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.
- mikermcneil 9y agomajor changes occurred here in 2017 with `await` making its way into the LTS release of Node - more on that: https://gist.github.com/mikermcneil/c1028d000cc0cc8bce995a2a82b29245 https://gist.github.com/mikermcneil/c1028d000cc0cc8bce995a2a...
- wild_preference 9y ago> 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 9y agoIt'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 9y agoWhat 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.
- spraak 9y agoSails is definitely not a great framework, but overall it's not hard to do CRUD in Node.
- D00M 9y agoAlright I think the timing is right with the implementation of SQL transactions and ES6 features. Time to jump in and give it a go.
- nwhatt 9y agoI 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.
- TheAceOfHearts 9y agoI 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.
- poyu 9y agoThere's also Adonis, which is somewhat the same. Never used it though. https://adonisjs.com/ https://adonisjs.com/
- velodrome 9y agoIt is very easy to learn and is similar to Laravel.
- sdfin 9y agoI 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.
- yeskia 9y agoI think, to Adonis's credit, they have started slowly diverge from being a Laravel clone and forge their own path going forward. It looks really nice to use, I look forward to giving it a crack.
- joshmanders 9y ago> 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 9y agoYou 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.
- 9y ago
- velodrome 9y agoHow is this compared to FeathersJS?
- SparkyMcUnicorn 9y agoI really like FeathersJS. Real-time built in, service oriented architecture, and awesome community. SailsJS was nice when I used it, but seemed clunky. I left it when all the drama went down with core, and haven't looked back.
- luislobo 9y agoIt'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.
- sideproject 9y agoInteresting. 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 9y agoExpress doesn't really enforce MVC at all (it's pretty minimal), you have to structure that yourself in your project.
- luislobo 9y agoI'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.
- niftylettuce 9y agoNear release of Lad beta 1.0.0 which uses Koa and is way faster https://lad.js.org https://lad.js.org
- ruffrey 9y agoSails 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 9y agoI 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 9y agoYeah - being locked into old dependencies, and old versions of Node, ultimately made us rip it out (with much pain).
- nagarjun 9y agoI 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.
- singularity2001 9y agoWe 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?
- romanovcode 9y agoI'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 9y agoCreator 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 9y agoSo, is there any production-ready migrations system ?
- mikermcneil 9y agoOf course— luckily there are many great, framework-agnostic options for use in post-production. I usually use knex.
- baybal2 9y agoMy experience is similar. Overengineered, unnecessary abstractions. Adds little over basic Meteor. A RedHat style "consultanthiringware" in making.
- connor11528 9y agoCheck out Adonis for a Laravel inspired Node.js framework that uses ES6 generators: https://adonisjs.com/ https://adonisjs.com/
- idealboy 9y agoI'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 9y agoI 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 9y agoHah 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-03&to=2018-04-03 https://npm-stat.com/charts.html?package=sails&from=2015-04-...) 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.