[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-3053":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":16,"stars7d":17,"stars30d":18,"stars90d":16,"forks30d":16,"starsTrendScore":16,"compositeScore":19,"rankGlobal":10,"rankLanguage":10,"license":20,"archived":21,"fork":21,"defaultBranch":22,"hasWiki":21,"hasPages":23,"topics":24,"createdAt":10,"pushedAt":10,"updatedAt":25,"readmeContent":26,"aiSummary":27,"trendingCount":16,"starSnapshotCount":16,"syncStatus":17,"lastSyncTime":28,"discoverSource":29},3053,"sails","balderdashy\u002Fsails","balderdashy","Realtime MVC Framework for Node.js","https:\u002F\u002Fsailsjs.com",null,"JavaScript",22809,1920,623,515,0,2,4,71.25,"MIT License",false,"master",true,[],"2026-06-12 04:00:16","# [![Sails.js](http:\u002F\u002Fbalderdashy.github.io\u002Fsails\u002Fimages\u002Flogo.png \"Sails.js\")](http:\u002F\u002Fsailsjs.com)\n\n### [Website](https:\u002F\u002Fsailsjs.com\u002F)  &nbsp; [Get Started](https:\u002F\u002Fsailsjs.com\u002Fget-started) &nbsp;  [Docs](http:\u002F\u002Fsailsjs.com\u002Fdocumentation)  &nbsp; [News](http:\u002F\u002Ftwitter.com\u002Fsailsjs) &nbsp; [Submit Issue](http:\u002F\u002Fsailsjs.com\u002Fbugs)\n\n[![NPM version](https:\u002F\u002Fbadge.fury.io\u002Fjs\u002Fsails.svg)](http:\u002F\u002Fbadge.fury.io\u002Fjs\u002Fsails) &nbsp; [![Gitter](https:\u002F\u002Fbadges.gitter.im\u002FJoin%20Chat.svg)](https:\u002F\u002Fgitter.im\u002Fbalderdashy\u002Fsails)  &nbsp; [![Twitter Follow](https:\u002F\u002Fimg.shields.io\u002Ftwitter\u002Ffollow\u002Fsailsjs.svg?style=social&maxAge=3600)](https:\u002F\u002Ftwitter.com\u002Fsailsjs)\n\nSails.js is a [web framework](http:\u002F\u002Fsailsjs.com\u002Fwhats-that) that makes it easy to build custom, enterprise-grade Node.js apps. It is designed to resemble the MVC architecture from frameworks like Ruby on Rails, but with support for the more modern, data-oriented style of web app & API development. It's especially good for building realtime features like chat.\n\nSince version 1.0, Sails supports `await` out of the box.  This replaces nested callbacks (and the commensurate error handling) with simple, familiar usage:\n\n```javascript\nvar orgs = await Organization.find();\n```\n\n\n## Installation &nbsp;\n**With [node](http:\u002F\u002Fnodejs.org) [installed](http:\u002F\u002Fnodejs.org\u002Fen\u002Fdownload):**\n```sh\n# Get the latest stable release of Sails\n$ npm install sails -g\n```\n\n> ##### Upgrading from an earlier version of Sails?\n> Upgrade guides for all major releases since 2013 are available on the Sails website under [**Upgrading**](http:\u002F\u002Fsailsjs.com\u002Fupgrading).\n\n\n## Your First Sails Project\n\n**Create a new app:**\n```sh\n# Create the app\nsails new my-app\n```\n\n**Lift sails:**\n```sh\n# cd into the new folder\ncd my-app\n\n# fire up the server\nsails lift\n```\n\n[![Screenshot from the original Sails video](http:\u002F\u002Fi.imgur.com\u002FIi88jlhl.png)](https:\u002F\u002Fsailsjs.com\u002Fget-started)\n\nFor the most up-to-date introduction to Sails, [get started here](https:\u002F\u002Fsailsjs.com\u002Fget-started).\n\n## Compatibility\n\nSails is built on [Node.js](http:\u002F\u002Fnodejs.org\u002F), [Express](http:\u002F\u002Fexpressjs.com\u002F), and [Socket.io](http:\u002F\u002Fsocket.io\u002F).\n\nSails [actions](http:\u002F\u002Fsailsjs.com\u002Fdocumentation\u002Fconcepts\u002Factions-and-controllers) are compatible with Connect middleware, so in most cases, you can paste code into Sails from an existing Express project and everything will work-- plus you'll be able to use WebSockets to talk to your API, and vice versa.\n\nThe ORM, [Waterline](https:\u002F\u002Fgithub.com\u002Fbalderdashy\u002Fwaterline), has a well-defined adapter system for supporting all kinds of datastores.  Officially supported databases include [MySQL](https:\u002F\u002Fnpmjs.com\u002Fpackage\u002Fsails-mysql), [PostgreSQL](https:\u002F\u002Fnpmjs.com\u002Fpackage\u002Fsails-postgresql), [MongoDB](https:\u002F\u002Fnpmjs.com\u002Fpackage\u002Fsails-mongo), [Redis](https:\u002F\u002Fnpmjs.com\u002Fpackage\u002Fsails-redis), and [local disk \u002F memory](https:\u002F\u002Fnpmjs.com\u002Fpackage\u002Fsails-disk).\nCommunity adapters exist for [CouchDB](https:\u002F\u002Fgithub.com\u002Fsearch?q=sails+couch&nwo=codeswarm%2Fsails-couchdb-orm&search_target=global&ref=cmdform), [neDB](https:\u002F\u002Fgithub.com\u002Fadityamukho\u002Fsails-nedb), [SQLite](https:\u002F\u002Fgithub.com\u002FAndrewJo\u002Fsails-sqlite3\u002Ftree\u002F0.10), [Oracle](https:\u002F\u002Fgithub.com\u002Fsearch?utf8=%E2%9C%93&q=%22sails+oracle%22+OR+%22waterline+oracle%22&type=Repositories&ref=searchresults), [MSSQL](https:\u002F\u002Fgithub.com\u002FmisterGF\u002Fsails-mssqlserver), [DB2](https:\u002F\u002Fgithub.com\u002Fsearch?q=sails+db2&type=Repositories&ref=searchresults), [ElasticSearch](https:\u002F\u002Fgithub.com\u002Fsearch?q=%28elasticsearch+AND+sails%29+OR+%28elasticsearch+AND+waterline%29+&type=Repositories&ref=searchresults), [Riak](https:\u002F\u002Fgithub.com\u002Fsearch?q=sails+riak&type=Repositories&ref=searchresults),\n[neo4j](https:\u002F\u002Fwww.npmjs.org\u002Fpackage\u002Fsails-neo4j), [OrientDB](https:\u002F\u002Fgithub.com\u002Fappscot\u002Fsails-orientdb),\n[Amazon RDS](https:\u002F\u002Fgithub.com\u002FTakenPilot\u002Fsails-rds), [DynamoDB](https:\u002F\u002Fgithub.com\u002FTakenPilot\u002Fsails-dynamodb), [Azure Tables](https:\u002F\u002Fgithub.com\u002Fazuqua\u002Fsails-azuretables), [RethinkDB](https:\u002F\u002Fgithub.com\u002Fgutenye\u002Fsails-rethinkdb) and [Solr](https:\u002F\u002Fgithub.com\u002Fsajov\u002Fsails-solr); for various 3rd-party REST APIs like Quickbooks, Yelp, and Twitter, including a configurable generic [REST API adapter](https:\u002F\u002Fgithub.com\u002Fzohararad\u002Fsails-rest); plus some [eclectic projects](https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=OmcQZD_LIAE).\n\n\u003C!-- Core adapter logos -->\n\u003Ca target=\"_blank\" href=\"http:\u002F\u002Fwww.mysql.com\">\n  \u003Cimg width=\"75\" src=\"http:\u002F\u002Fwww.mysql.com\u002Fcommon\u002Flogos\u002Fpowered-by-mysql-125x64.png\" alt=\"Powered by MySQL\" title=\"sails-mysql: MySQL adapter for Sails\"\u002F>\n\u003C\u002Fa>&nbsp; &nbsp; &nbsp; &nbsp;\n\u003Ca target=\"_blank\" href=\"http:\u002F\u002Fwww.postgresql.org\u002F\">\u003Cimg width=\"50\" title=\"PostgreSQL\" src=\"http:\u002F\u002Fi.imgur.com\u002FOSlDDKv.png\"\u002F>\u003C\u002Fa>&nbsp; &nbsp; &nbsp; &nbsp;\n\u003Ca target=\"_blank\" href=\"http:\u002F\u002Fwww.mongodb.org\u002F\">\u003Cimg width=\"100\" title=\"MongoDB\" src=\"http:\u002F\u002Fi.imgur.com\u002FbC2j13z.png\"\u002F>\u003C\u002Fa>&nbsp; &nbsp; &nbsp; &nbsp;\n\u003Ca target=\"_blank\" href=\"http:\u002F\u002Fredis.io\u002F\">\u003Cimg width=\"75\" title=\"Redis\" src=\"http:\u002F\u002Fi.imgur.com\u002Fdozv0ub.jpg\"\u002F>\u003C\u002Fa>&nbsp; &nbsp; &nbsp; &nbsp;\n\u003C!-- \u002Fcore adapter logos -->\n\n> For the latest core adapters and notable community adapters, see [Available Adapters](http:\u002F\u002Fsailsjs.com\u002Fdocumentation\u002Fconcepts\u002Fextending-sails\u002Fadapters\u002Favailable-adapters).\n\n## Tutorial Course\n- [Sailscasts](https:\u002F\u002Fsailscasts.com\u002F), taught by [Kelvin Omereshone](https:\u002F\u002Ftwitter.com\u002FDominus_Kelvin) _(English)_\n- [Full-Stack JavaScript with Sails.js and Vue.js](https:\u002F\u002Fplatzi.com\u002Fcursos\u002Fjavascript-pro\u002F), taught by [Mike McNeil](https:\u002F\u002Ftwitter.com\u002Fmikermcneil) _(in English, with optional Spanish subtitles)_\n\n\n## Books\n- [Sails.js in Action](https:\u002F\u002Fwww.manning.com\u002Fbooks\u002Fsails-js-in-action) by Mike McNeil and Irl Nathan (Manning Publications).\n- [Sails.js Essentials](https:\u002F\u002Fwww.packtpub.com\u002Fweb-development\u002Fsailsjs-essentials) by Shaikh Shahid (Packt)\n- [Pro Express.js: Part 3](http:\u002F\u002Flink.springer.com\u002Fchapter\u002F10.1007%2F978-1-4842-0037-7_18) by Azat Mardan (Apress).\n\n## Support\nNeed help or have a question?\n- [Frequently Asked Questions (FAQ)](http:\u002F\u002Fsailsjs.com\u002Ffaq)\n- [Tutorials](http:\u002F\u002Fsailsjs.com\u002Ffaq#?what-are-some-good-community-tutorials)\n- [Community support](http:\u002F\u002Fsailsjs.com\u002Fsupport)\n- [Professional\u002FEnterprise options](http:\u002F\u002Fsailsjs.com\u002Ffaq#?are-there-professional-support-options)\n\n\n## Issue submission\nPlease read the [submission guidelines](http:\u002F\u002Fsailsjs.com\u002Fdocumentation\u002Fcontributing\u002Fissue-contributions) and [code of conduct](http:\u002F\u002Fsailsjs.com\u002Fdocumentation\u002Fcontributing\u002Fcode-of-conduct) before opening a new issue.  Click [here](https:\u002F\u002Fgithub.com\u002Fbalderdashy\u002Fsails\u002Fsearch?q=&type=Issues) to search\u002Fpost issues in this repository.\n\n## Contribute\nThere are many different ways you can contribute to Sails:\n- answering questions on [StackOverflow](http:\u002F\u002Fstackoverflow.com\u002Fquestions\u002Ftagged\u002Fsails.js), [Gitter](https:\u002F\u002Fgitter.im\u002Fbalderdashy\u002Fsails), [Facebook](https:\u002F\u002Fwww.facebook.com\u002Fsailsjs), or [Twitter](https:\u002F\u002Ftwitter.com\u002Fsearch?f=tweets&vertical=default&q=%40sailsjs%20OR%20%23sailsjs%20OR%20sails.js%20OR%20sailsjs&src=typd)\n- improving the [documentation](https:\u002F\u002Fgithub.com\u002Fbalderdashy\u002Fsails-docs#contributing-to-the-docs)\n- translating the [documentation](https:\u002F\u002Fgithub.com\u002Fbalderdashy\u002Fsails-docs\u002Fissues\u002F580) to your native language\n- writing [tests](https:\u002F\u002Fgithub.com\u002Fbalderdashy\u002Fsails\u002Fblob\u002Fmaster\u002Ftest\u002FREADME.md)\n- writing a [tutorial](https:\u002F\u002Fgithub.com\u002Fsails101\u002Fcontribute-to-sails101), giving a [talk](https:\u002F\u002Fspeakerdeck.com\u002Fmikermcneil), or supporting [your local Sails meetup](https:\u002F\u002Fwww.meetup.com\u002Ffind\u002F?allMeetups=false&keywords=node.js&radius=Infinity&sort=default)\n- troubleshooting [reported issues](http:\u002F\u002Fsailsjs.com\u002Fbugs)\n- and [submitting patches](http:\u002F\u002Fsailsjs.com\u002Fdocumentation\u002Fcontributing\u002Fcode-submission-guidelines).\n\n_Please carefully read our [contribution guide](http:\u002F\u002Fsailsjs.com\u002Fdocumentation\u002Fcontributing) and check the [build status](http:\u002F\u002Fsailsjs.com\u002Farchitecture) for the relevant branch before submitting a pull request with code changes._\n\n\n## Links\n- [Website](http:\u002F\u002Fsailsjs.com\u002F)\n- [Documentation](http:\u002F\u002Fsailsjs.com\u002Fdocumentation)\n- [Ask a question](http:\u002F\u002Fsailsjs.com\u002Fsupport)\n- [Tutorial](https:\u002F\u002Fplatzi.com\u002Fcursos\u002Fjavascript-pro\u002F)\n- [Roadmap](https:\u002F\u002Ftrello.com\u002Fb\u002Fs9zEnyG7\u002Fsails-v1)\n- [Twitter (@sailsjs)](https:\u002F\u002Ftwitter.com\u002Fsailsjs)\n- [Facebook](https:\u002F\u002Fwww.facebook.com\u002Fsailsjs)\n\n## Team\nSails is actively maintained with the help of many amazing [contributors](https:\u002F\u002Fgithub.com\u002Fbalderdashy\u002Fsails\u002Fgraphs\u002Fcontributors).  Our core team consists of:\n\n[![Mike McNeil](https:\u002F\u002Fwww.gravatar.com\u002Favatar\u002F4b02a9d5780bdd282151f7f9b8a4d8de?s=144&d=identicon&rating=g)](https:\u002F\u002Ftwitter.com\u002Fmikermcneil) |  [![Kelvin Omereshone](https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F24433274?s=144&v=3)](https:\u002F\u002Ftwitter.com\u002Fdominus_kelvin) |  [![Eric Shaw](https:\u002F\u002Favatars2.githubusercontent.com\u002Fu\u002F7445991?s=144&v=3)](https:\u002F\u002Fgithub.com\u002Feashaw)\n|:---:|:---:|:---:|\n[Mike McNeil](http:\u002F\u002Fgithub.com\u002Fmikermcneil) | [Kelvin Omereshone](https:\u002F\u002Fgithub.com\u002FDominusKelvin) | [Eric Shaw](https:\u002F\u002Fgithub.com\u002Feashaw)\n\n\n[Our company](https:\u002F\u002Fsailsjs.com\u002Fabout) designs\u002Fbuilds Node.js websites and apps for startups and enterprise customers. After building a few applications and taking them into production, we realized that the Node.js development landscape was very much still the Wild West. Over time, after trying lots of different methodologies, we decided to crystallize all of our best practices into this framework.  Six years later, Sails is now one of the most widely-used web application frameworks in the world. I hope it saves you some time! :)\n\n## License\n\n[MIT License](https:\u002F\u002Fopensource.org\u002Flicenses\u002FMIT)  Copyright © 2012-present, Mike McNeil\n\n> Sails is built around so many great open-source technologies that it would never have crossed our minds to keep it proprietary.  We owe huge gratitude and props to Ryan Dahl ([@ry](https:\u002F\u002Fgithub.com\u002Fry)), TJ Holowaychuk ([@tj](https:\u002F\u002Fgithub.com\u002Ftj)), Doug Wilson ([@dougwilson](https:\u002F\u002Fgithub.com\u002Fdougwilson)) and Guillermo Rauch ([@rauchg](https:\u002F\u002Fgithub.com\u002Frauchg)) for the work they've done, as well as the stewards of all the other open-source modules we use.  Sails could never have been developed without your tremendous contributions to the JavaScript community.\n\n![A squid peering inside a book, halation and cosmic Sails.js knowledge emanating from the pages of the substantial tome](https:\u002F\u002Fsailsjs.com\u002Fimages\u002Fget_started_hero.png)\n","Sails.js 是一个基于 Node.js 的实时 MVC 框架，旨在简化企业级应用的开发。它支持现代的数据驱动型 Web 应用和 API 开发，并且自 1.0 版本起内置了 `await` 支持，使得异步代码编写更加直观易读。Sails 构建于 Express 和 Socket.io 之上，提供强大的 WebSocket 功能，非常适合用于需要实时通信的应用场景，如聊天应用。此外，通过 Waterline ORM，Sails 能够兼容多种数据库系统，包括 MySQL、PostgreSQL、MongoDB 等，为开发者提供了极大的灵活性。","2026-06-11 02:52:19","top_language"]