Sails.js

Website   Get Started   Docs   News   Submit Issue

NPM version   Gitter   Twitter Follow

Sails.js is a web framework 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.

Since version 1.0, Sails supports await out of the box. This replaces nested callbacks (and the commensurate error handling) with simple, familiar usage:

var orgs = await Organization.find();

Installation  

With node installed:

# Get the latest stable release of Sails
$ npm install sails -g
Upgrading from an earlier version of Sails?

Upgrade guides for all major releases since 2013 are available on the Sails website under Upgrading.

Your First Sails Project

Create a new app:

# Create the app
sails new my-app

Lift sails:

# cd into the new folder
cd my-app

# fire up the server
sails lift

Screenshot from the original Sails video

For the most up-to-date introduction to Sails, get started here.

Compatibility

Sails is built on Node.js, Express, and Socket.io.

Sails actions 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.

The ORM, Waterline, has a well-defined adapter system for supporting all kinds of datastores. Officially supported databases include MySQL, PostgreSQL, MongoDB, Redis, and local disk / memory. Community adapters exist for CouchDB, neDB, SQLite, Oracle, MSSQL, DB2, ElasticSearch, Riak, neo4j, OrientDB, Amazon RDS, DynamoDB, Azure Tables, RethinkDB and Solr; for various 3rd-party REST APIs like Quickbooks, Yelp, and Twitter, including a configurable generic REST API adapter; plus some eclectic projects.

Powered by MySQL                                

For the latest core adapters and notable community adapters, see Available Adapters.

Tutorial Course

Books

Support

Need help or have a question?

Issue submission

Please read the submission guidelines and code of conduct before opening a new issue. Click here to search/post issues in this repository.

Contribute

There are many different ways you can contribute to Sails:

Please carefully read our contribution guide and check the build status for the relevant branch before submitting a pull request with code changes.

Links

Team

Sails is actively maintained with the help of many amazing contributors. Our core team consists of:

Mike McNeil Kelvin Omereshone Eric Shaw
Mike McNeil Kelvin Omereshone Eric Shaw

Our company designs/builds 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! :)

License

MIT License Copyright © 2012-present, Mike McNeil

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), TJ Holowaychuk (@tj), Doug Wilson (@dougwilson) and Guillermo Rauch (@rauchg) 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.

A squid peering inside a book, halation and cosmic Sails.js knowledge emanating from the pages of the substantial tome

balderdashy/sails

{
"props": {
"initialPayload": {
"allShortcutsEnabled": false,
"path": "/",
"repo": {
"id": 3757512,
"defaultBranch": "master",
"name": "sails",
"ownerLogin": "balderdashy",
"currentUserCanPush": false,
"isFork": false,
"isEmpty": false,
"createdAt": "2012-03-18T19:46:15.000Z",
"ownerAvatar": "https://avatars.githubusercontent.com/u/1445252?v=4",
"public": true,
"private": false,
"isOrgOwned": true
},
"currentUser": null,
"refInfo": {
"name": "master",
"listCacheKey": "v0:1704405228.0",
"canEdit": false,
"refType": "branch",
"currentOid": "f581a629e5340a70b9f2a0752c152e1fd73b0a06"
},
"tree": {
"items": [
{
"name": ".github",
"path": ".github",
"contentType": "directory"
},
{
"name": "accessible",
"path": "accessible",
"contentType": "directory"
},
{
"name": "bin",
"path": "bin",
"contentType": "directory"
},
{
"name": "docs",
"path": "docs",
"contentType": "directory"
},
{
"name": "errors",
"path": "errors",
"contentType": "directory"
},
{
"name": "lib",
"path": "lib",
"contentType": "directory"
},
{
"name": "test",
"path": "test",
"contentType": "directory"
},
{
"name": ".editorconfig",
"path": ".editorconfig",
"contentType": "file"
},
{
"name": ".eslintrc",
"path": ".eslintrc",
"contentType": "file"
},
{
"name": ".gitignore",
"path": ".gitignore",
"contentType": "file"
},
{
"name": ".npmignore",
"path": ".npmignore",
"contentType": "file"
},
{
"name": ".travis.yml",
"path": ".travis.yml",
"contentType": "file"
},
{
"name": "CHANGELOG.md",
"path": "CHANGELOG.md",
"contentType": "file"
},
{
"name": "CODE-OF-CONDUCT.md",
"path": "CODE-OF-CONDUCT.md",
"contentType": "file"
},
{
"name": "CONTRIBUTING.md",
"path": "CONTRIBUTING.md",
"contentType": "file"
},
{
"name": "LICENSE.md",
"path": "LICENSE.md",
"contentType": "file"
},
{
"name": "MODULES.md",
"path": "MODULES.md",
"contentType": "file"
},
{
"name": "README.md",
"path": "README.md",
"contentType": "file"
},
{
"name": "ROADMAP.md",
"path": "ROADMAP.md",
"contentType": "file"
},
{
"name": "appveyor.yml",
"path": "appveyor.yml",
"contentType": "file"
},
{
"name": "package.json",
"path": "package.json",
"contentType": "file"
}
],
"templateDirectorySuggestionUrl": null,
"readme": null,
"totalCount": 21,
"showBranchInfobar": false
},
"fileTree": null,
"fileTreeProcessingTime": null,
"foldersToFetch": [],
"treeExpanded": false,
"symbolsExpanded": false,
"isOverview": true,
"overview": {
"banners": {
"shouldRecommendReadme": false,
"isPersonalRepo": false,
"showUseActionBanner": false,
"actionSlug": null,
"actionId": null,
"showProtectBranchBanner": false,
"recentlyTouchedDataChannel": null,
"publishBannersInfo": {
"dismissActionNoticePath": "/settings/dismiss-notice/publish_action_from_repo",
"releasePath": "/balderdashy/sails/releases/new?marketplace=true",
"showPublishActionBanner": false
},
"interactionLimitBanner": null,
"showInvitationBanner": false,
"inviterName": null
},
"codeButton": {
"contactPath": "/contact",
"isEnterprise": false,
"local": {
"protocolInfo": {
"httpAvailable": true,
"sshAvailable": null,
"httpUrl": "https://github.com/balderdashy/sails.git",
"showCloneWarning": null,
"sshUrl": null,
"sshCertificatesRequired": null,
"sshCertificatesAvailable": null,
"ghCliUrl": "gh repo clone balderdashy/sails",
"defaultProtocol": "http",
"newSshKeyUrl": "/settings/ssh/new",
"setProtocolPath": "/users/set_protocol"
},
"platformInfo": {
"cloneUrl": "https://desktop.github.com",
"showVisualStudioCloneButton": false,
"visualStudioCloneUrl": "https://windows.github.com",
"showXcodeCloneButton": false,
"xcodeCloneUrl": "https://developer.apple.com",
"zipballUrl": "/balderdashy/sails/archive/refs/heads/master.zip"
}
},
"newCodespacePath": "/codespaces/new?hide_repo_select=true&repo=3757512"
},
"popovers": {
"rename": null,
"renamedParentRepo": null
},
"commitCount": "7,179",
"overviewFiles": [
{
"displayName": "README.md",
"repoName": "sails",
"refName": "master",
"path": "README.md",
"preferredFileType": "readme",
"tabName": "README",
"richText": "<article class=\"markdown-body entry-content container-lg\" itemprop=\"text\"><h1 tabindex=\"-1\" dir=\"auto\"><a id=\"\" class=\"anchor\" aria-hidden=\"true\" tabindex=\"-1\" href=\"#\"><svg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"><path d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"></path></svg></a><a href=\"http://sailsjs.com\" rel=\"nofollow\"><img src=\"https://camo.githubusercontent.com/fe77e81032ef461a7f85fad4eda71b0b0b2cbeb5f264eb66baf735dd3e5e6bf4/687474703a2f2f62616c64657264617368792e6769746875622e696f2f7361696c732f696d616765732f6c6f676f2e706e67\" alt=\"Sails.js\" title=\"Sails.js\" data-canonical-src=\"http://balderdashy.github.io/sails/images/logo.png\" style=\"max-width: 100%;\"></a></h1>\n<h3 tabindex=\"-1\" dir=\"auto\"><a id=\"user-content-website---get-started---docs---news--submit-issue\" class=\"anchor\" aria-hidden=\"true\" tabindex=\"-1\" href=\"#website---get-started---docs---news--submit-issue\"><svg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"><path d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"></path></svg></a><a href=\"https://sailsjs.com/\" rel=\"nofollow\">Website</a>   <a href=\"https://sailsjs.com/get-started\" rel=\"nofollow\">Get Started</a>   <a href=\"http://sailsjs.com/documentation\" rel=\"nofollow\">Docs</a>   <a href=\"http://twitter.com/sailsjs\" rel=\"nofollow\">News</a>   <a href=\"http://sailsjs.com/bugs\" rel=\"nofollow\">Submit Issue</a></h3>\n<p dir=\"auto\"><a href=\"http://badge.fury.io/js/sails\" rel=\"nofollow\"><img src=\"https://camo.githubusercontent.com/f8b34b3959453aead7eccee52c6465db7acdc3d4e309eaa360bffde9a33dedcf/68747470733a2f2f62616467652e667572792e696f2f6a732f7361696c732e737667\" alt=\"NPM version\" data-canonical-src=\"https://badge.fury.io/js/sails.svg\" style=\"max-width: 100%;\"></a>   <a href=\"https://gitter.im/balderdashy/sails\" rel=\"nofollow\"><img src=\"https://camo.githubusercontent.com/2da7039d862cabe847953554272000b86e80b158a0723c9a832720b935df3f43/68747470733a2f2f6261646765732e6769747465722e696d2f4a6f696e253230436861742e737667\" alt=\"Gitter\" data-canonical-src=\"https://badges.gitter.im/Join%20Chat.svg\" style=\"max-width: 100%;\"></a>   <a href=\"https://twitter.com/sailsjs\" rel=\"nofollow\"><img src=\"https://camo.githubusercontent.com/85825f8515cbc7eba076a54292d2ee1d7c13b92122680cfcfd54758da9836e92/68747470733a2f2f696d672e736869656c64732e696f2f747769747465722f666f6c6c6f772f7361696c736a732e7376673f7374796c653d736f6369616c266d61784167653d33363030\" alt=\"Twitter Follow\" data-canonical-src=\"https://img.shields.io/twitter/follow/sailsjs.svg?style=social&amp;maxAge=3600\" style=\"max-width: 100%;\"></a></p>\n<p dir=\"auto\">Sails.js is a <a href=\"http://sailsjs.com/whats-that\" rel=\"nofollow\">web framework</a> 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 &amp; API development. It's especially good for building realtime features like chat.</p>\n<p dir=\"auto\">Since version 1.0, Sails supports <code>await</code> out of the box. This replaces nested callbacks (and the commensurate error handling) with simple, familiar usage:</p>\n<div class=\"highlight highlight-source-js notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"var orgs = await Organization.find();\"><pre><span class=\"pl-k\">var</span> <span class=\"pl-s1\">orgs</span> <span class=\"pl-c1\">=</span> <span class=\"pl-k\">await</span> <span class=\"pl-v\">Organization</span><span class=\"pl-kos\">.</span><span class=\"pl-en\">find</span><span class=\"pl-kos\">(</span><span class=\"pl-kos\">)</span><span class=\"pl-kos\">;</span></pre></div>\n<h2 tabindex=\"-1\" dir=\"auto\"><a id=\"user-content-installation-\" class=\"anchor\" aria-hidden=\"true\" tabindex=\"-1\" href=\"#installation-\"><svg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"><path d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"></path></svg></a>Installation  </h2>\n<p dir=\"auto\"><strong>With <a href=\"http://nodejs.org\" rel=\"nofollow\">node</a> <a href=\"http://nodejs.org/en/download\" rel=\"nofollow\">installed</a>:</strong></p>\n<div class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"# Get the latest stable release of Sails\n$ npm install sails -g\"><pre><span class=\"pl-c\"><span class=\"pl-c\">#</span> Get the latest stable release of Sails</span>\n$ npm install sails -g</pre></div>\n<blockquote>\n<h5 tabindex=\"-1\" dir=\"auto\"><a id=\"user-content-upgrading-from-an-earlier-version-of-sails\" class=\"anchor\" aria-hidden=\"true\" tabindex=\"-1\" href=\"#upgrading-from-an-earlier-version-of-sails\"><svg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"><path d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"></path></svg></a>Upgrading from an earlier version of Sails?</h5>\n<p dir=\"auto\">Upgrade guides for all major releases since 2013 are available on the Sails website under <a href=\"http://sailsjs.com/upgrading\" rel=\"nofollow\"><strong>Upgrading</strong></a>.</p>\n</blockquote>\n<h2 tabindex=\"-1\" dir=\"auto\"><a id=\"user-content-your-first-sails-project\" class=\"anchor\" aria-hidden=\"true\" tabindex=\"-1\" href=\"#your-first-sails-project\"><svg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"><path d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"></path></svg></a>Your First Sails Project</h2>\n<p dir=\"auto\"><strong>Create a new app:</strong></p>\n<div class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"# Create the app\nsails new my-app\"><pre><span class=\"pl-c\"><span class=\"pl-c\">#</span> Create the app</span>\nsails new my-app</pre></div>\n<p dir=\"auto\"><strong>Lift sails:</strong></p>\n<div class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"# cd into the new folder\ncd my-app\n\n# fire up the server\nsails lift\"><pre><span class=\"pl-c\"><span class=\"pl-c\">#</span> cd into the new folder</span>\n<span class=\"pl-c1\">cd</span> my-app\n\n<span class=\"pl-c\"><span class=\"pl-c\">#</span> fire up the server</span>\nsails lift</pre></div>\n<p dir=\"auto\"><a href=\"https://sailsjs.com/get-started\" rel=\"nofollow\"><img src=\"https://camo.githubusercontent.com/5645f9e6312a03072bb32e0636a6ab60bc25cac633bc53ff8b1cdf2015f767d9/687474703a2f2f692e696d6775722e636f6d2f496938386a6c686c2e706e67\" alt=\"Screenshot from the original Sails video\" data-canonical-src=\"http://i.imgur.com/Ii88jlhl.png\" style=\"max-width: 100%;\"></a></p>\n<p dir=\"auto\">For the most up-to-date introduction to Sails, <a href=\"https://sailsjs.com/get-started\" rel=\"nofollow\">get started here</a>.</p>\n<h2 tabindex=\"-1\" dir=\"auto\"><a id=\"user-content-compatibility\" class=\"anchor\" aria-hidden=\"true\" tabindex=\"-1\" href=\"#compatibility\"><svg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"><path d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"></path></svg></a>Compatibility</h2>\n<p dir=\"auto\">Sails is built on <a href=\"http://nodejs.org/\" rel=\"nofollow\">Node.js</a>, <a href=\"http://expressjs.com/\" rel=\"nofollow\">Express</a>, and <a href=\"http://socket.io/\" rel=\"nofollow\">Socket.io</a>.</p>\n<p dir=\"auto\">Sails <a href=\"http://sailsjs.com/documentation/concepts/actions-and-controllers\" rel=\"nofollow\">actions</a> 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.</p>\n<p dir=\"auto\">The ORM, <a href=\"https://github.com/balderdashy/waterline\">Waterline</a>, has a well-defined adapter system for supporting all kinds of datastores. Officially supported databases include <a href=\"https://npmjs.com/package/sails-mysql\" rel=\"nofollow\">MySQL</a>, <a href=\"https://npmjs.com/package/sails-postgresql\" rel=\"nofollow\">PostgreSQL</a>, <a href=\"https://npmjs.com/package/sails-mongo\" rel=\"nofollow\">MongoDB</a>, <a href=\"https://npmjs.com/package/sails-redis\" rel=\"nofollow\">Redis</a>, and <a href=\"https://npmjs.com/package/sails-disk\" rel=\"nofollow\">local disk / memory</a>.\nCommunity adapters exist for <a href=\"https://github.com/search?q=sails+couch&amp;nwo=codeswarm%2Fsails-couchdb-orm&amp;search_target=global&amp;ref=cmdform\">CouchDB</a>, <a href=\"https://github.com/adityamukho/sails-nedb\">neDB</a>, <a href=\"https://github.com/AndrewJo/sails-sqlite3/tree/0.10\">SQLite</a>, <a href=\"https://github.com/search?utf8=%E2%9C%93&amp;q=%22sails+oracle%22+OR+%22waterline+oracle%22&amp;type=Repositories&amp;ref=searchresults\">Oracle</a>, <a href=\"https://github.com/misterGF/sails-mssqlserver\">MSSQL</a>, <a href=\"https://github.com/search?q=sails+db2&amp;type=Repositories&amp;ref=searchresults\">DB2</a>, <a href=\"https://github.com/search?q=%28elasticsearch+AND+sails%29+OR+%28elasticsearch+AND+waterline%29+&amp;type=Repositories&amp;ref=searchresults\">ElasticSearch</a>, <a href=\"https://github.com/search?q=sails+riak&amp;type=Repositories&amp;ref=searchresults\">Riak</a>,\n<a href=\"https://www.npmjs.org/package/sails-neo4j\" rel=\"nofollow\">neo4j</a>, <a href=\"https://github.com/appscot/sails-orientdb\">OrientDB</a>,\n<a href=\"https://github.com/TakenPilot/sails-rds\">Amazon RDS</a>, <a href=\"https://github.com/TakenPilot/sails-dynamodb\">DynamoDB</a>, <a href=\"https://github.com/azuqua/sails-azuretables\">Azure Tables</a>, <a href=\"https://github.com/gutenye/sails-rethinkdb\">RethinkDB</a> and <a href=\"https://github.com/sajov/sails-solr\">Solr</a>; for various 3rd-party REST APIs like Quickbooks, Yelp, and Twitter, including a configurable generic <a href=\"https://github.com/zohararad/sails-rest\">REST API adapter</a>; plus some <a href=\"https://www.youtube.com/watch?v=OmcQZD_LIAE\" rel=\"nofollow\">eclectic projects</a>.</p>\n\n<a href=\"http://www.mysql.com\" rel=\"nofollow\">\n <img width=\"75\" src=\"https://camo.githubusercontent.com/3dead262a6aa5ffcecccd8df290892839eb36d8436a509139b451eea5e17efce/687474703a2f2f7777772e6d7973716c2e636f6d2f636f6d6d6f6e2f6c6f676f732f706f77657265642d62792d6d7973716c2d3132357836342e706e67\" alt=\"Powered by MySQL\" title=\"sails-mysql: MySQL adapter for Sails\" data-canonical-src=\"http://www.mysql.com/common/logos/powered-by-mysql-125x64.png\" style=\"max-width: 100%;\">\n</a>       \n<a href=\"http://www.postgresql.org/\" rel=\"nofollow\"><img width=\"50\" title=\"PostgreSQL\" src=\"https://camo.githubusercontent.com/c0d21192dd5b9603279bc53dbbc8fbec8fe476696b02d2aad37d57794e1ae97b/687474703a2f2f692e696d6775722e636f6d2f4f536c44444b762e706e67\" data-canonical-src=\"http://i.imgur.com/OSlDDKv.png\" style=\"max-width: 100%;\"></a>       \n<a href=\"http://www.mongodb.org/\" rel=\"nofollow\"><img width=\"100\" title=\"MongoDB\" src=\"https://camo.githubusercontent.com/15369bcb07d432093f300a85f3fff61e9a3ca2fd3ade5e7bf7d42a8a0dcc877b/687474703a2f2f692e696d6775722e636f6d2f6243326a31337a2e706e67\" data-canonical-src=\"http://i.imgur.com/bC2j13z.png\" style=\"max-width: 100%;\"></a>       \n<a href=\"http://redis.io/\" rel=\"nofollow\"><img width=\"75\" title=\"Redis\" src=\"https://camo.githubusercontent.com/9093b3316883b37768f9801f99f77b1212de705dccfe3a0b722018e5e61e706c/687474703a2f2f692e696d6775722e636f6d2f646f7a763075622e6a7067\" data-canonical-src=\"http://i.imgur.com/dozv0ub.jpg\" style=\"max-width: 100%;\"></a>       \n\n<blockquote>\n<p dir=\"auto\">For the latest core adapters and notable community adapters, see <a href=\"http://sailsjs.com/documentation/concepts/extending-sails/adapters/available-adapters\" rel=\"nofollow\">Available Adapters</a>.</p>\n</blockquote>\n<h2 tabindex=\"-1\" dir=\"auto\"><a id=\"user-content-tutorial-course\" class=\"anchor\" aria-hidden=\"true\" tabindex=\"-1\" href=\"#tutorial-course\"><svg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"><path d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"></path></svg></a>Tutorial Course</h2>\n<ul dir=\"auto\">\n<li><a href=\"https://sailscasts.com/\" rel=\"nofollow\">Sailscasts</a>, taught by <a href=\"https://twitter.com/Dominus_Kelvin\" rel=\"nofollow\">Kelvin Omereshone</a> <em>(English)</em></li>\n<li><a href=\"https://platzi.com/cursos/javascript-pro/\" rel=\"nofollow\">Full-Stack JavaScript with Sails.js and Vue.js</a>, taught by <a href=\"https://twitter.com/mikermcneil\" rel=\"nofollow\">Mike McNeil</a> <em>(in English, with optional Spanish subtitles)</em></li>\n</ul>\n<h2 tabindex=\"-1\" dir=\"auto\"><a id=\"user-content-books\" class=\"anchor\" aria-hidden=\"true\" tabindex=\"-1\" href=\"#books\"><svg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"><path d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"></path></svg></a>Books</h2>\n<ul dir=\"auto\">\n<li><a href=\"https://www.manning.com/books/sails-js-in-action\" rel=\"nofollow\">Sails.js in Action</a> by Mike McNeil and Irl Nathan (Manning Publications).</li>\n<li><a href=\"https://www.packtpub.com/web-development/sailsjs-essentials\" rel=\"nofollow\">Sails.js Essentials</a> by Shaikh Shahid (Packt)</li>\n<li><a href=\"http://link.springer.com/chapter/10.1007%2F978-1-4842-0037-7_18\" rel=\"nofollow\">Pro Express.js: Part 3</a> by Azat Mardan (Apress).</li>\n</ul>\n<h2 tabindex=\"-1\" dir=\"auto\"><a id=\"user-content-support\" class=\"anchor\" aria-hidden=\"true\" tabindex=\"-1\" href=\"#support\"><svg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"><path d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"></path></svg></a>Support</h2>\n<p dir=\"auto\">Need help or have a question?</p>\n<ul dir=\"auto\">\n<li><a href=\"http://sailsjs.com/faq\" rel=\"nofollow\">Frequently Asked Questions (FAQ)</a></li>\n<li><a href=\"http://sailsjs.com/faq#?what-are-some-good-community-tutorials\" rel=\"nofollow\">Tutorials</a></li>\n<li><a href=\"http://sailsjs.com/support\" rel=\"nofollow\">Community support</a></li>\n<li><a href=\"http://sailsjs.com/faq#?are-there-professional-support-options\" rel=\"nofollow\">Professional/Enterprise options</a></li>\n</ul>\n<h2 tabindex=\"-1\" dir=\"auto\"><a id=\"user-content-issue-submission\" class=\"anchor\" aria-hidden=\"true\" tabindex=\"-1\" href=\"#issue-submission\"><svg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"><path d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"></path></svg></a>Issue submission</h2>\n<p dir=\"auto\">Please read the <a href=\"http://sailsjs.com/documentation/contributing/issue-contributions\" rel=\"nofollow\">submission guidelines</a> and <a href=\"http://sailsjs.com/documentation/contributing/code-of-conduct\" rel=\"nofollow\">code of conduct</a> before opening a new issue. Click <a href=\"https://github.com/balderdashy/sails/search?q=&amp;type=Issues\">here</a> to search/post issues in this repository.</p>\n<h2 tabindex=\"-1\" dir=\"auto\"><a id=\"user-content-contribute\" class=\"anchor\" aria-hidden=\"true\" tabindex=\"-1\" href=\"#contribute\"><svg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"><path d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"></path></svg></a>Contribute</h2>\n<p dir=\"auto\">There are many different ways you can contribute to Sails:</p>\n<ul dir=\"auto\">\n<li>answering questions on <a href=\"http://stackoverflow.com/questions/tagged/sails.js\" rel=\"nofollow\">StackOverflow</a>, <a href=\"https://gitter.im/balderdashy/sails\" rel=\"nofollow\">Gitter</a>, <a href=\"https://www.facebook.com/sailsjs\" rel=\"nofollow\">Facebook</a>, or <a href=\"https://twitter.com/search?f=tweets&amp;vertical=default&amp;q=%40sailsjs%20OR%20%23sailsjs%20OR%20sails.js%20OR%20sailsjs&amp;src=typd\" rel=\"nofollow\">Twitter</a></li>\n<li>improving the <a href=\"https://github.com/balderdashy/sails-docs#contributing-to-the-docs\">documentation</a></li>\n<li>translating the <a href=\"https://github.com/balderdashy/sails-docs/issues/580\">documentation</a> to your native language</li>\n<li>writing <a href=\"https://github.com/balderdashy/sails/blob/master/test/README.md\">tests</a></li>\n<li>writing a <a href=\"https://github.com/sails101/contribute-to-sails101\">tutorial</a>, giving a <a href=\"https://speakerdeck.com/mikermcneil\" rel=\"nofollow\">talk</a>, or supporting <a href=\"https://www.meetup.com/find/?allMeetups=false&amp;keywords=node.js&amp;radius=Infinity&amp;sort=default\" rel=\"nofollow\">your local Sails meetup</a></li>\n<li>troubleshooting <a href=\"http://sailsjs.com/bugs\" rel=\"nofollow\">reported issues</a></li>\n<li>and <a href=\"http://sailsjs.com/documentation/contributing/code-submission-guidelines\" rel=\"nofollow\">submitting patches</a>.</li>\n</ul>\n<p dir=\"auto\"><em>Please carefully read our <a href=\"http://sailsjs.com/documentation/contributing\" rel=\"nofollow\">contribution guide</a> and check the <a href=\"http://sailsjs.com/architecture\" rel=\"nofollow\">build status</a> for the relevant branch before submitting a pull request with code changes.</em></p>\n<h2 tabindex=\"-1\" dir=\"auto\"><a id=\"user-content-links\" class=\"anchor\" aria-hidden=\"true\" tabindex=\"-1\" href=\"#links\"><svg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"><path d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"></path></svg></a>Links</h2>\n<ul dir=\"auto\">\n<li><a href=\"http://sailsjs.com/\" rel=\"nofollow\">Website</a></li>\n<li><a href=\"http://sailsjs.com/documentation\" rel=\"nofollow\">Documentation</a></li>\n<li><a href=\"http://sailsjs.com/support\" rel=\"nofollow\">Ask a question</a></li>\n<li><a href=\"https://platzi.com/cursos/javascript-pro/\" rel=\"nofollow\">Tutorial</a></li>\n<li><a href=\"https://trello.com/b/s9zEnyG7/sails-v1\" rel=\"nofollow\">Roadmap</a></li>\n<li><a href=\"https://twitter.com/sailsjs\" rel=\"nofollow\">Twitter (@sailsjs)</a></li>\n<li><a href=\"https://www.facebook.com/sailsjs\" rel=\"nofollow\">Facebook</a></li>\n</ul>\n<h2 tabindex=\"-1\" dir=\"auto\"><a id=\"user-content-team\" class=\"anchor\" aria-hidden=\"true\" tabindex=\"-1\" href=\"#team\"><svg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"><path d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"></path></svg></a>Team</h2>\n<p dir=\"auto\">Sails is actively maintained with the help of many amazing <a href=\"https://github.com/balderdashy/sails/graphs/contributors\">contributors</a>. Our core team consists of:</p>\n<table>\n<thead>\n<tr>\n<th align=\"center\"><a href=\"https://twitter.com/mikermcneil\" rel=\"nofollow\"><img src=\"https://camo.githubusercontent.com/0a154759f0b8031f8ba4bf50735bd0745cd8078140f33aaa5426ef77eb51d82f/68747470733a2f2f7777772e67726176617461722e636f6d2f6176617461722f34623032613964353738306264643238323135316637663962386134643864653f733d31343426643d6964656e7469636f6e26726174696e673d67\" alt=\"Mike McNeil\" data-canonical-src=\"https://www.gravatar.com/avatar/4b02a9d5780bdd282151f7f9b8a4d8de?s=144&amp;d=identicon&amp;rating=g\" style=\"max-width: 100%;\"></a></th>\n<th align=\"center\"><a href=\"https://twitter.com/dominus_kelvin\" rel=\"nofollow\"><img src=\"https://avatars.githubusercontent.com/u/24433274?s=144&amp;v=3\" alt=\"Kelvin Omereshone\" style=\"max-width: 100%;\"></a></th>\n<th align=\"center\"><a href=\"https://github.com/eashaw\"><img src=\"https://avatars2.githubusercontent.com/u/7445991?s=144&amp;v=3\" alt=\"Eric Shaw\" style=\"max-width: 100%;\"></a></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td align=\"center\"><a href=\"http://github.com/mikermcneil\">Mike McNeil</a></td>\n<td align=\"center\"><a href=\"https://github.com/DominusKelvin\">Kelvin Omereshone</a></td>\n<td align=\"center\"><a href=\"https://github.com/eashaw\">Eric Shaw</a></td>\n</tr>\n</tbody>\n</table>\n<p dir=\"auto\"><a href=\"https://sailsjs.com/about\" rel=\"nofollow\">Our company</a> designs/builds 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! :)</p>\n<h2 tabindex=\"-1\" dir=\"auto\"><a id=\"user-content-license\" class=\"anchor\" aria-hidden=\"true\" tabindex=\"-1\" href=\"#license\"><svg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"><path d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"></path></svg></a>License</h2>\n<p dir=\"auto\"><a href=\"https://opensource.org/licenses/MIT\" rel=\"nofollow\">MIT License</a> Copyright © 2012-present, Mike McNeil</p>\n<blockquote>\n<p dir=\"auto\">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 (<a href=\"https://github.com/ry\">@ry</a>), TJ Holowaychuk (<a href=\"https://github.com/tj\">@tj</a>), Doug Wilson (<a href=\"https://github.com/dougwilson\">@dougwilson</a>) and Guillermo Rauch (<a href=\"https://github.com/rauchg\">@rauchg</a>) 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.</p>\n</blockquote>\n<p dir=\"auto\"><a target=\"_blank\" rel=\"noopener noreferrer nofollow\" href=\"https://camo.githubusercontent.com/28bf2634de1f3c7553ed6a3333eb71440c59c6343377a840737034156a195b67/68747470733a2f2f7361696c736a732e636f6d2f696d616765732f6765745f737461727465645f6865726f2e706e67\"><img src=\"https://camo.githubusercontent.com/28bf2634de1f3c7553ed6a3333eb71440c59c6343377a840737034156a195b67/68747470733a2f2f7361696c736a732e636f6d2f696d616765732f6765745f737461727465645f6865726f2e706e67\" alt=\"A squid peering inside a book, halation and cosmic Sails.js knowledge emanating from the pages of the substantial tome\" data-canonical-src=\"https://sailsjs.com/images/get_started_hero.png\" style=\"max-width: 100%;\"></a></p>\n</article>",
"loaded": true,
"timedOut": false,
"errorMessage": null,
"headerInfo": {
"toc": [
{
"level": 1,
"text": "",
"anchor": "",
"htmlText": ""
},
{
"level": 3,
"text": "Website   Get Started   Docs   News   Submit Issue",
"anchor": "website---get-started---docs---news--submit-issue",
"htmlText": "Website   Get Started   Docs   News   Submit Issue"
},
{
"level": 2,
"text": "Installation  ",
"anchor": "installation-",
"htmlText": "Installation  "
},
{
"level": 5,
"text": "Upgrading from an earlier version of Sails?",
"anchor": "upgrading-from-an-earlier-version-of-sails",
"htmlText": "Upgrading from an earlier version of Sails?"
},
{
"level": 2,
"text": "Your First Sails Project",
"anchor": "your-first-sails-project",
"htmlText": "Your First Sails Project"
},
{
"level": 2,
"text": "Compatibility",
"anchor": "compatibility",
"htmlText": "Compatibility"
},
{
"level": 2,
"text": "Tutorial Course",
"anchor": "tutorial-course",
"htmlText": "Tutorial Course"
},
{
"level": 2,
"text": "Books",
"anchor": "books",
"htmlText": "Books"
},
{
"level": 2,
"text": "Support",
"anchor": "support",
"htmlText": "Support"
},
{
"level": 2,
"text": "Issue submission",
"anchor": "issue-submission",
"htmlText": "Issue submission"
},
{
"level": 2,
"text": "Contribute",
"anchor": "contribute",
"htmlText": "Contribute"
},
{
"level": 2,
"text": "Links",
"anchor": "links",
"htmlText": "Links"
},
{
"level": 2,
"text": "Team",
"anchor": "team",
"htmlText": "Team"
},
{
"level": 2,
"text": "License",
"anchor": "license",
"htmlText": "License"
}
],
"siteNavLoginPath": "/login?return_to=https%3A%2F%2Fgithub.com%2Fbalderdashy%2Fsails"
}
},
{
"displayName": "CODE-OF-CONDUCT.md",
"repoName": "sails",
"refName": "master",
"path": "CODE-OF-CONDUCT.md",
"preferredFileType": "code_of_conduct",
"tabName": "Code of conduct",
"richText": null,
"loaded": false,
"timedOut": false,
"errorMessage": null,
"headerInfo": {
"toc": null,
"siteNavLoginPath": "/login?return_to=https%3A%2F%2Fgithub.com%2Fbalderdashy%2Fsails"
}
},
{
"displayName": "LICENSE.md",
"repoName": "sails",
"refName": "master",
"path": "LICENSE.md",
"preferredFileType": "license",
"tabName": "MIT",
"richText": null,
"loaded": false,
"timedOut": false,
"errorMessage": null,
"headerInfo": {
"toc": null,
"siteNavLoginPath": "/login?return_to=https%3A%2F%2Fgithub.com%2Fbalderdashy%2Fsails"
}
}
],
"overviewFilesProcessingTime": 16.866513
}
},
"appPayload": {
"helpUrl": "https://docs.github.com",
"findFileWorkerPath": "/assets-cdn/worker/find-file-worker-32bb159cc57c.js",
"findInFileWorkerPath": "/assets-cdn/worker/find-in-file-worker-c6704d501c10.js",
"githubDevUrl": null,
"enabled_features": {
"code_nav_ui_events": false,
"copilot_conversational_ux": false,
"copilot_conversational_ux_embedding_update": false,
"copilot_popover_file_editor_header": false,
"copilot_smell_icebreaker_ux": true,
"copilot_workspace": false,
"codeview_firefox_inert": true
}
}
}
}
{
"accept-ranges": "bytes",
"cache-control": "max-age=0, private, must-revalidate",
"content-encoding": "gzip",
"content-security-policy": "default-src 'none'; base-uri 'self'; child-src github.com/assets-cdn/worker/ gist.github.com/assets-cdn/worker/; connect-src 'self' uploads.github.com www.githubstatus.com collector.github.com raw.githubusercontent.com api.github.com github-cloud.s3.amazonaws.com github-production-repository-file-5c1aeb.s3.amazonaws.com github-production-upload-manifest-file-7fdce7.s3.amazonaws.com github-production-user-asset-6210df.s3.amazonaws.com api.githubcopilot.com objects-origin.githubusercontent.com *.actions.githubusercontent.com wss://*.actions.githubusercontent.com productionresultssa0.blob.core.windows.net/ productionresultssa1.blob.core.windows.net/ productionresultssa2.blob.core.windows.net/ productionresultssa3.blob.core.windows.net/ productionresultssa4.blob.core.windows.net/ productionresultssa5.blob.core.windows.net/ productionresultssa6.blob.core.windows.net/ productionresultssa7.blob.core.windows.net/ productionresultssa8.blob.core.windows.net/ productionresultssa9.blob.core.windows.net/ productionresultssa10.blob.core.windows.net/ productionresultssa11.blob.core.windows.net/ productionresultssa12.blob.core.windows.net/ productionresultssa13.blob.core.windows.net/ productionresultssa14.blob.core.windows.net/ productionresultssa15.blob.core.windows.net/ productionresultssa16.blob.core.windows.net/ productionresultssa17.blob.core.windows.net/ productionresultssa18.blob.core.windows.net/ productionresultssa19.blob.core.windows.net/ github-production-repository-image-32fea6.s3.amazonaws.com github-production-release-asset-2e65be.s3.amazonaws.com insights.github.com wss://alive.github.com; font-src github.githubassets.com; form-action 'self' github.com gist.github.com objects-origin.githubusercontent.com; frame-ancestors 'none'; frame-src viewscreen.githubusercontent.com notebooks.githubusercontent.com; img-src 'self' data: github.githubassets.com media.githubusercontent.com camo.githubusercontent.com identicons.github.com avatars.githubusercontent.com github-cloud.s3.amazonaws.com objects.githubusercontent.com secured-user-images.githubusercontent.com/ user-images.githubusercontent.com/ private-user-images.githubusercontent.com opengraph.githubassets.com github-production-user-asset-6210df.s3.amazonaws.com customer-stories-feed.github.com spotlights-feed.github.com objects-origin.githubusercontent.com *.githubusercontent.com; manifest-src 'self'; media-src github.com user-images.githubusercontent.com/ secured-user-images.githubusercontent.com/ private-user-images.githubusercontent.com github-production-user-asset-6210df.s3.amazonaws.com gist.github.com; script-src github.githubassets.com; style-src 'unsafe-inline' github.githubassets.com; upgrade-insecure-requests; worker-src github.com/assets-cdn/worker/ gist.github.com/assets-cdn/worker/",
"content-type": "text/html; charset=utf-8",
"date": "Mon, 26 Feb 2024 11:21:20 GMT",
"etag": "e8dce560b517f7a58c8f1f6f3dc89413",
"referrer-policy": "no-referrer-when-downgrade",
"server": "GitHub.com",
"set-cookie": "logged_in=no; Path=/; Domain=github.com; Expires=Wed, 26 Feb 2025 11:21:19 GMT; HttpOnly; Secure; SameSite=Lax",
"strict-transport-security": "max-age=31536000; includeSubdomains; preload",
"transfer-encoding": "chunked",
"vary": "X-PJAX, X-PJAX-Container, Turbo-Visit, Turbo-Frame, Accept-Encoding, Accept, X-Requested-With",
"x-content-type-options": "nosniff",
"x-frame-options": "deny",
"x-github-request-id": "B854:51AC:1A894AD:25B493F:65DC7419",
"x-xss-protection": "0"
}