PHPackages                             luketowers/oc-easyspa-plugin - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. luketowers/oc-easyspa-plugin

ActiveOctober-plugin[Utility &amp; Helpers](/categories/utility)

luketowers/oc-easyspa-plugin
============================

Adds Single Page Application like features to the OctoberCMS frontend using the OctoberCMS AJAX framework

v1.0.4(5y ago)217716[3 issues](https://github.com/LukeTowers/oc-easyspa-plugin/issues)[2 PRs](https://github.com/LukeTowers/oc-easyspa-plugin/pulls)proprietaryJavaScript

Since Apr 17Pushed 5y ago3 watchersCompare

[ Source](https://github.com/LukeTowers/oc-easyspa-plugin)[ Packagist](https://packagist.org/packages/luketowers/oc-easyspa-plugin)[ Docs](https://github.com/LukeTowers/oc-easyspa-plugin)[ RSS](/packages/luketowers-oc-easyspa-plugin/feed)WikiDiscussions master Synced yesterday

READMEChangelogDependencies (1)Versions (7)Used By (0)

About
=====

[](#about)

Adds Single Page Application like features to the OctoberCMS frontend using the OctoberCMS AJAX framework. More specifically, it enables (through the adding of a component to your layout) loading and updating page content through AJAX.

Requirements
============

[](#requirements)

This plugin requires the [Ajax Framework](https://octobercms.com/docs/cms/ajax) to be included in your layout/page in order to handle requests.

Current Support
===============

[](#current-support)

Only loading new pages (Static Pages or CMS Pages, any URL that is controlled by the CMS) is currently supported. Components on dynamically loaded pages will also work, and assets will be dynamically added and removed as required.

Installation
============

[](#installation)

To install from the [Marketplace](https://octobercms.com/plugin/luketowers-easyspa), click on the "Add to Project" button and then select the project you wish to add it to before updating the project to pull in the plugin.

To install from the backend, go to **Settings -&gt; Updates &amp; Plugins -&gt; Install Plugins** and then search for `LukeTowers.EasySPA`.

To install from [the repository](https://github.com/luketowers/oc-easyspa-plugin), clone it into **plugins/luketowers/easyspa** and then run `composer update` from your project root in order to pull in the dependencies.

To install it with Composer, run `composer require luketowers/oc-easyspa-plugin` from your project root.

Usage
=====

[](#usage)

To use this plugin, simply attach the `[easySPA]` component to any layouts that you want to be able to have their pages loaded over AJAX. The loader needs to be attached to an element on the page that contains anchor tags with the URLs to the pages that are to be loaded. This is done by adding the `data-control="easy-spa-loader"` attribute onto the containing element. There is also an optional attribute `data-refresh-partials` that can be used to define additional partials that should be refreshed when the page is load in the form of `partialPath1:#partialSelector1` with additional partials appended with an `&` symbol.

Example Layout:

```
description="Default layout"
[easySPA]
==

        ...

            {% partial 'site/header' %}

        {% page %}

            ...

```

Use Of Third-party/Custom Javascript
====================================

[](#use-of-third-partycustom-javascript)

Since this plugin uses the Ajax framework to dynamically make changes to the DOM, not all third-party Javascript libraries/scripts may work properly when a page is updated. This is because many of these scripts rely on the $(document).ready event or $(window).load which is not triggered during an ajax update. If you have scripts like this, you may need to re-instantiate some Javascript objects in your code using a $(document).render event listener.

Example (with fake third-party libraries):

```
 $(document).render(function(){
    $('.example-slider').slider({transition: 30});
    $('.example-carousel').carousel();
 });

```

Note: The script file with your $(document).render event listener must be included (script tag) after {% framework extras %} to work properly.

###  Health Score

33

—

LowBetter than 75% of packages

Maintenance17

Infrequent updates — may be unmaintained

Popularity21

Limited adoption so far

Community15

Small or concentrated contributor base

Maturity67

Established project with proven stability

 Bus Factor1

Top contributor holds 94.4% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~178 days

Recently: every ~222 days

Total

6

Last Release

2058d ago

Major Versions

v0.1.0 → v1.0.02018-04-20

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/7253840?v=4)[Luke Towers](/maintainers/LukeTowers)[@LukeTowers](https://github.com/LukeTowers)

---

Top Contributors

[![LukeTowers](https://avatars.githubusercontent.com/u/7253840?v=4)](https://github.com/LukeTowers "LukeTowers (17 commits)")[![mrgswift](https://avatars.githubusercontent.com/u/2319364?v=4)](https://github.com/mrgswift "mrgswift (1 commits)")

---

Tags

ajaxoctoberoctobercmsSPAsingle-page-application

### Embed Badge

![Health badge](/badges/luketowers-oc-easyspa-plugin/health.svg)

```
[![Health](https://phpackages.com/badges/luketowers-oc-easyspa-plugin/health.svg)](https://phpackages.com/packages/luketowers-oc-easyspa-plugin)
```

###  Alternatives

[rainlab/blog-plugin

Blog plugin for October CMS

17257.7k](/packages/rainlab-blog-plugin)[rainlab/builder-plugin

Builder plugin for October CMS

17147.2k1](/packages/rainlab-builder-plugin)[responsiv/currency-plugin

Currency plugin for October CMS

171.3k1](/packages/responsiv-currency-plugin)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
