RefreshLess is a drop-in alternative to single page apps (SPAs) which reuses Drupal's existing server-rendered HTML and layers a JavaScript framework on top that provides the kind of modern UX users expect. By fully embracing progressive enhancement, you don't need to choose between a web site/web app that works even with broken JavaScript or a smooth, fast, SPA-like user interface - you can have both.

Compared to an SPA:

  • Provides much higher resiliency in unexpected or adverse network or runtime conditions where JavaScript fails to load or execute correctly. In such situations, your users still have a working site. The browser is the most hostile runtime environment after all.
  • Reuses Drupal's server-rendered HTML, saving you the development time and cost of re-implementing a whole new front-end, while making use of Drupal's Twig templates, asset library system, caching, security, and so on.

Compared to a plain server-rendered HTML site:

  • Navigation feels faster and more fluid because the browser no longer needs to re-initialize all CSS and JavaScript on every page request.
  • Everyone thinks you're super cool because your site is an SPA but you secretly know it's even better than an SPA.

📢 Help needed 📢

If you want to help out, please see #3393105: Hotwire Turbo minimum viable implementation for what still needs to be done.

⚡ Hotwire Turbo implementation ⚡

RefreshLess implementation built on the Hotwire Turbo library. See modules/refreshless_turbo/readme.md. This is the current primary implementation, but other implementations are planned.

Supporting organizations: 
Sponsoring 2.x development and Hotwire Turbo port
Sponsored 1.x development, including the necessary API support in Drupal 8

Project information

Releases