Skip to content

inertia-sailsThe Sails adapter for Inertia.js

Build modern single-page Vue, React, and Svelte apps using classic server-side routing and controllers.

Quick Start

bash
# Create a new app with everything set up
npx create-sails my-app

Or add to an existing Sails app:

bash
npm install inertia-sails

Example Action

js
// api/controllers/dashboard/view-dashboard.js
module.exports = {
  exits: {
    success: { responseType: 'inertia' }
  },

  fn: async function () {
    return {
      page: 'dashboard/index',
      props: {
        user: await User.findOne({ id: this.req.session.userId }),
        stats: await Stats.find()
      }
    }
  }
}

Key Features

Shared Data

js
// Share with current request
sails.inertia.share('user', currentUser)

// Flash messages
sails.inertia.flash('success', 'Saved!')

Once Props (Cached)

js
sails.inertia.share(
  'loggedInUser',
  sails.inertia.once(async () => {
    return await User.findOne({ id: req.session.userId })
  })
)

// Refresh when data changes
sails.inertia.refreshOnce('loggedInUser')

Deferred Props

js
props: {
  user: currentUser,  // Loads immediately
  analytics: sails.inertia.defer(() => getAnalytics())  // Loads after render
}

Infinite Scroll

js
props: {
  invoices: sails.inertia.scroll(() => invoices, {
    page,
    perPage,
    total,
    wrapper: 'data'
  })
}

All open source projects are released under the MIT License.