Durable UI Patterns
Durable UI is a set of patterns for building interfaces that survive refreshes, navigation, and real users. A practical guide to state placement, cleanup contracts, and UI that doesn't break.
Best practices, Tips & Tricks, Updates, ideas, and inspiration from Sailscasts to help developers build and design software.
Durable UI is a set of patterns for building interfaces that survive refreshes, navigation, and real users. A practical guide to state placement, cleanup contracts, and UI that doesn't break.
Your AI writes the component. But does it survive a refresh? Durable UI is a new Sailscasts course that teaches the state placement decisions no LLM can make for you.
Slipway is an open-source, self-hosted platform purpose-built for Sails.js and The Boring JavaScript Stack. Deploy, manage, monitor, and debug your apps on your own infrastructure with one command.
The Boring JavaScript Stack 1.0 is here with a complete architectural overhaul: AsyncLocalStorage for request isolation, once() props for intelligent caching, and a suite of new APIs that make building full-stack JavaScript apps even more boring (in the best way).
Say goodbye to Grunt. Shipwright brings Rsbuild-powered bundling to Sails with 10x faster builds, TypeScript support, and Hot Module Replacement out of the box.
Wish 1.0.0 is here with a simplified configuration, automatic environment variable detection, and support for multiple instances of the same provider.
Parley is a lightweight flow control library that powers async operations across the Sails ecosystem. Learn how this pre-Promise Deferred pattern enables timeout and error negotiation in Waterline models and Sails helpers.
Learn how to implement fair, region-based pricing in your Sails.js application using Purchasing Power Parity. A step-by-step guide to making your products accessible globally while maintaining sustainable revenue.
Meet Quest, the job scheduler that brings elegant, human-readable scheduling to your Sails.js applications with full access to models, helpers, and configuration.
Explore how Sails.js manages user sessions over persistent WebSocket connections, ensuring secure and consistent authentication for both browser and native clients.
A technical examination of how Sails.js uses virtual requests to handle HTTP and WebSocket protocols with a single codebase, eliminating duplication.
A practical introduction to how Sails.js handles WebSockets: from the virtual request pattern to JWR responses, and why the sails-hook-sockets approach is a game-changer for real-time Node.js apps.
Discover how Waterline processes your queries through a multi-stage pipeline—validating, normalizing, and transforming them for reliable, database-agnostic execution.
Learn about Waterline Features — optional, database-specific capabilities like unique constraints, auto-increment, spatial data, and cross-adapter operations that extend core ORM functionality.
Learn the difference between connections and datastores in Sails.js. See how Waterline uses them to manage database configuration and scale apps across multiple databases.
Learn how Waterline interfaces define the contract between models and adapters. Discover why interfaces matter and how they keep your Sails.js app database-agnostic.
sails-disk doesn’t support native transactions, so I built a snapshot-based system that adds commit/rollback capabilities. Here’s how I designed, implemented, and tested transaction support in a file-based adapter for Sails.js.
Discover how Waterline adapters let your models connect to MySQL, PostgreSQL, MongoDB, SQLite, and more. Learn why adapters matter and how they power Waterline’s database-agnostic design.
Waterline is a database-agnostic ORM for Node.js that lets you define models once and use them across MySQL, MongoDB, Redis, and more with a single API.
Learn how to use customToJSON in Sails.js models to control what data gets sent back in yor Sails responses. We’ll cover why it’s useful, how to hide sensitive fields like passwords or tokens, and show practical examples you can drop into your project.
Learn how to streamline notifications in your The Boring JavaScript Stack apps by unifying flash messages and toast notifications. Discover a practical approach to reduce duplication, ensure consistency, and simplify your codebase for a smoother developer experience.
Sails.js announces the official Sails.js Discord community! Join now to connect with developers, get the latest release updates, and help revitalize the Sails ecosystem.
The Boring JavaScript Stack 0.5.0 is out, bringing support for Inertia 2.0, React 19, Svelte 5, some, major simplifications
The Boring JavaScript Stack 0.3.0 is out, it brings an upgrade to Shipright 0.2.0 which brings dynamic injecting assets and chunk splitting strategies
Sails Shipwright 0.1.0 is out, it brings a long requested DX to Sails - Hot Module Replacement & Live Reload.
The Boring JavaScript Stack 0.2.2 is out, introducing create-sails-generator for a better DX.
The Boring JavaScript Stack 0.2.0 is out, it brings a better DX for sending Inertia responses and fixed an edge case bug.
The Boring JavaScript Stack 0.1.3 is out, it brings an amazing DX for handling server-side validation errors and good old flash messages.
sails-mongo 2.1.0 is out, this minor release brings an upgrade of the MongoDB driver used in the adapter from version 3.7.3 to 6.3.0.
Sails 1.5.6 is out, it brings displaying the local dev server URL when you lift your Sails project.
Sails 1.5.5 is out, it brings a fix to the broken custom inspect implementation on sails.helpers.
wish 0.0.7 is out, this release brings Google as an OAuth 2 provider
Excited to announce that I am now the lead maintainer of the Sails framework.
After working with Express for a while, I was introduced to Sails after joining the Sailscasts community. I have come to like Sails and I want to say why in this article.
Rate limiting helps you control the rate of incoming requests to an API. In this article we go over how to set up rate limiting in Sails
Part 1 of the Sails for Express developers series of article aimed at showing how Express developers can use Sails today.
I recently discovered Treblle - an API monitoring service that let's you monitor your APIs in production. Here is how to set it up in a Sails project.
I have been researching Playwright for a while now and finally decided to take the plunge and set up end-to-end testing in the sailscasts.com codebase with it. Let me show you how I did it.
The vision of Sailscasts is to empower anyone with a basic idea of JavaScript to build fullstack Node.js applications. With the new docs we hope to provide great documentation for the technologies we build to foster this vision
Super excited to announce a whole new rewrite to sailscasts.com powered by simple technologies
Alright this is an article I have been looking forward to writing for quite a while now. I have been experimenting on a new way to have it all with a Sails driven codebase and I think I’ve found it.
The second Sailsconf - a global conference for the Sails community goes live in a couple of days
Sails provides a super useful syntactic sugar for paginating Waterline queries. In this article we will see how to get started using it in your applications.
Japa is an API-first testing framework. It focuses only on testing Node.js (backend) applications, thus resulting in a fast, small, and simple tests runner.
Sails ship with an elegant logger called captains-log. In this article we will see how to modify your logs prefix with the prefixTheme option.
The sails global gives you access to the running Sails application instance and the properties and methods it exposes. In this article we will see how we can disable it and other ways to access the running Sails application instance.
In this article I will discuss why I created the sails-js-hook-dotenv package. We'll see why I needed the package and my learnings as I made it.
Sails makes it easy to setup and use WebSocket. In this article we will look at how I setup a WebSocket client to talk to a Sails API via WebSocket.
Tailwind CSS is a utility-first CSS framework that allows you rapidly build modern websites without ever leaving your HTML. Here is how I setup a Sails project to use Tailwind CSS.
Having trouble testing your loading state when making a request to your local Sails API from your local frontend? Here is how to simulate latency...
Say ahoy to guppy - the needed tinker tool for every backend Javascript developer. You will find yourself having this desktop app open as you do any backend Javascript development.
So you think Sails run on port 1337 by default? Wrong! In this article we will see how Sails really handles the default running port and how you can change it.
Sailsconf 2021 was an outstanding and unprecendented success, here is the gist...
The very first Sailsconf - a global conference for the Sails community goes live tomorrow
A URL shortener is basically a tool that you give a long URL and it gives a shorter URL for convenience. In this article we will build a basic URL shortener using Sails.
Actions2 are a more modern way for authoring Sails actions. In this article we will look at how we can simply return or throw Sails responses.
Docker makes it easy to set up and run a development environment and also simplifies the deployment of your applications. In this article we will see how to setup a Sails development workflow with Docker and Docker Compose.
Projections make for faster performance and better security when sending back records to a client by allowing you to select or omit fields to be returned.
Sails 1.4.2 release fixes the cyclic dependency warning in Node versions >= 14
Linting improves readability and consitency in a codebase. It is a must have for teams to enforce coding style guides and standards, fix typos, find potential bugs across a codebase. In this article, we will be setting up ESLint and StandardJS in a Sails project.
Testing or automated testing helps ensure code quality and serves as a measure to prevent you or other members of your team from shipping code with defects aka bugs to production. In this article we will look at setting up automated tests in Sails applications using Mocha and Supertest.
Pagination helps splits the dataset being returned to a user into smaller chunks and return the rest as requested. In this article we will look at a couple of options on implementing pagination in your Sails APIs.
Sailscasts will be built by the folks at The Sailscasts Company - a company founded by Kelvin Omereshone dedicated to building and helping others build on Sails
Sails provides you with a mechanism to share code in different places in your applications. This mechanism is called helpers. In this article we will dive into what helpers are and how to begin using them in your Sails application.
Your custom routes definitions can easily get out of hand in a large Sails application. In this article we are going to take a look at a pattern I use in large Sails applications for organizing custom routes definitions.
Routes are URLs that a web client use to communicate with your application. In this article you will learn how Sails handles routes and how you can use them in your application.
Policies are versatile tools in Sails for authorization and access control. They give you the ability to execute some logic before an action is run for the purpose of ascertaining if the request should continue or not. This article will introduce policies in Sails, explain how to go about creating policies in Sails and the best practices to observe when doing so.
Actions are Sails mechanisms that are responsible for responding and handling requests to your Sails applications. This article will introduce you to the actions2 style of writing actions in Sails and how to start using it in your Sails applications.
The Sailscasts Blog is meant to augment Sailscasts with quality articles for developers to step up their game with production ready server-side JavaScript and of course tips and tricks on Sails.js.