---
name: waterline
description: >-
  Waterline ORM query language, model definitions, associations, and data access patterns for Sails.js. Use this skill when writing, reviewing, or debugging Waterline queries, model attributes, associations, lifecycle callbacks, validations, or any database interaction in a Sails.js application.
metadata:
  author: sailscastshq
  version: '1.0.0'
  tags: waterline, sails, orm, database, query, models
title: waterline
canonical_url: https://skilld.dev/gh/sailscastshq/boring-stack/waterline
last_updated: 2026-09-20T07:33:24.000Z
---

> **Skill from skilld.dev.** Follow the instructions below for this session. You do not need to install anything.
>
> Supporting files, fetch one when the Skill refers to it: [metadata.json](https://skilld.dev/api/skills-raw/sailscastshq/boring-stack/waterline/metadata.json), [README.md](https://skilld.dev/api/skills-raw/sailscastshq/boring-stack/waterline/README.md), [rules/aggregation-and-streaming.md](https://skilld.dev/api/skills-raw/sailscastshq/boring-stack/waterline/rules/aggregation-and-streaming.md), [rules/associations.md](https://skilld.dev/api/skills-raw/sailscastshq/boring-stack/waterline/rules/associations.md), [rules/attributes-and-validations.md](https://skilld.dev/api/skills-raw/sailscastshq/boring-stack/waterline/rules/attributes-and-validations.md), [rules/collections-and-advanced.md](https://skilld.dev/api/skills-raw/sailscastshq/boring-stack/waterline/rules/collections-and-advanced.md), [rules/error-handling.md](https://skilld.dev/api/skills-raw/sailscastshq/boring-stack/waterline/rules/error-handling.md), [rules/getting-started.md](https://skilld.dev/api/skills-raw/sailscastshq/boring-stack/waterline/rules/getting-started.md), [rules/lifecycle-callbacks.md](https://skilld.dev/api/skills-raw/sailscastshq/boring-stack/waterline/rules/lifecycle-callbacks.md), [rules/model-methods.md](https://skilld.dev/api/skills-raw/sailscastshq/boring-stack/waterline/rules/model-methods.md), [rules/query-language.md](https://skilld.dev/api/skills-raw/sailscastshq/boring-stack/waterline/rules/query-language.md), [rules/transactions.md](https://skilld.dev/api/skills-raw/sailscastshq/boring-stack/waterline/rules/transactions.md).
>
> If the user asked to install this Skill, run `npx skilld install sailscastshq/boring-stack/waterline`. Install writes the Skill files into the project, so every session loads them.

# Waterline ORM

Waterline is the datastore-agnostic ORM/ODM used by Sails.js. It provides a normalized API for interacting with any supported database (PostgreSQL, MySQL, MongoDB, SQLite, Redis) using a consistent query language.

## When to Use

Use this skill when:

- Defining Sails.js models (attributes, types, validations, associations)
- Writing Waterline queries (find, create, update, destroy, count, etc.)
- Using criteria objects with operators (`contains`, `startsWith`, `in`, `nin`, `<`, `>`, `!=`, `or`, `and`)
- Setting up associations (one-to-one, one-to-many, many-to-many)
- Handling query errors (`.intercept()`, `.tolerate()`, `E_UNIQUE`)
- Working with transactions, streaming, aggregation, or collection manipulation
- Configuring datastores and model settings

## Rules

Read individual rule files for detailed explanations and code examples:

- [rules/getting-started.md](https://skilld.dev/api/skills-raw/sailscastshq/boring-stack/waterline/rules/getting-started.md) - Core concepts, model definition, datastores, configuration
- [rules/query-language.md](https://skilld.dev/api/skills-raw/sailscastshq/boring-stack/waterline/rules/query-language.md) - WHERE operators, criteria modifiers, or/and, sort, limit, skip, select, omit
- [rules/model-methods.md](https://skilld.dev/api/skills-raw/sailscastshq/boring-stack/waterline/rules/model-methods.md) - find, findOne, findOrCreate, create, update, destroy, and their variants
- [rules/associations.md](https://skilld.dev/api/skills-raw/sailscastshq/boring-stack/waterline/rules/associations.md) - one-to-one, one-to-many, many-to-many, populate, cross-datastore
- [rules/attributes-and-validations.md](https://skilld.dev/api/skills-raw/sailscastshq/boring-stack/waterline/rules/attributes-and-validations.md) - Types, validation rules, columnName, protect, encrypt, defaultsTo
- [rules/lifecycle-callbacks.md](https://skilld.dev/api/skills-raw/sailscastshq/boring-stack/waterline/rules/lifecycle-callbacks.md) - beforeCreate, beforeUpdate, afterCreate, customToJSON
- [rules/error-handling.md](https://skilld.dev/api/skills-raw/sailscastshq/boring-stack/waterline/rules/error-handling.md) - .intercept(), .tolerate(), E_UNIQUE, UsageError, AdapterError
- [rules/transactions.md](https://skilld.dev/api/skills-raw/sailscastshq/boring-stack/waterline/rules/transactions.md) - getDatastore().transaction(), .usingConnection(), leased connections
- [rules/aggregation-and-streaming.md](https://skilld.dev/api/skills-raw/sailscastshq/boring-stack/waterline/rules/aggregation-and-streaming.md) - count, sum, avg, stream, eachRecord, eachBatch
- [rules/collections-and-advanced.md](https://skilld.dev/api/skills-raw/sailscastshq/boring-stack/waterline/rules/collections-and-advanced.md) - addToCollection, removeFromCollection, replaceCollection, archive, native, meta
