Learning Management System with RESTful API.
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.


Percolate LMS Logo

Percolate LMS

Percolate is a Learning Management System with the following features:

  • Native course builder

  • Multi-tenancy (optional)

  • Discussions (comment boards)

  • Tag-based organization and creative use of tags

  • RESTful API with HATEOAS and JSON Web Token authentication

  • PDF certificate generation

Percolate is also available as a SaaS subscription. Try a FREE 14 day trial!


Percolate uses the following technologies and libraries:

  • API "backend" written in PHP

  • UI "frontend" written in JavaScript

    • Mithril, a tiny framework for Single-Page Applications

    • Moment.js for date and time manipulation

    • Ramda for "functional-style" utilities

    • Sortable for drag-n-drop lists (specifically Percolate’s learning paths)

  • Relational database targets PostgreSQL

  • The "build" system is a simple shell script which "minifies" (with JSMin) and then concatenates the JavaScript UI into a bundle.js file.


High-level overview

Percolate aims to be flexible while using as few unique concepts as possible. Much of this is achieved with the pervasive use of tags.


The database contains a PostgreSQL 'schema' for each LMS tenant which gives complete isolation between tenants.

See db/master.sql.

Tenants are looked up by one or more hostnames (think "domain name": example.com, lms1.example.org, lms2.example.org, etc.).

If you prefer, you can create a single tenant and treat Percolate as a single instance, ignoring the multi-tenancy aspect entirely.

Database elements

The database stores these basic elements:

  • file

  • person

  • content

  • enrollment rules (erules)

  • records

  • comments (for discussions)

  • config (tenant-specific system settings)

For the complete story, see db/tenant.sql.

Types of content

There are four types of content:

  • SCORM - the standard e-learning package uploaded to the LMS in a .zip file

  • Content Builder or just "content" - the native content type in Percolate which is composed of pages containing images, videos, audio, quizzes, file attachments, etc.

  • Discussions - small forum-like discussion boards

  • Learning Paths - lists of other content put into specific order, may be nested


People may be grouped and organized by tags. Percolate LMS Administrators are simply people with the special $admin system tag. An initial administrator account is created for each new tenant.

Content is likewise organized by tags. There are system tags for content such as $catalog and $certificate which can affect how the LMS treats the content.

Assignments are made by creating "enrollment rules" which may be one of these four types:

  • Person to Content

  • Person Tag to Content

  • Person to Content Tag

  • Person Tag to Content Tag

Bascially, an enrollment rule can be as simple as assigning one content item to one person or as complex as assigning an entire lesson plan to a group of people.

Because people in an organization can sometimes be part of overlapping groups, Percolate has a more advanced feature for creating logical combinations of tags called "metatags". Metatags use boolean operators AND and OR to combine exactly two other tags (example: sales AND department-c). After being created, metatags are automatically appended to any person who matches the rule (anyone who has both the sales and department-c tags in our example).

When a person launches a content item, a record is created or updated with the launch time, launch count, etc. All content types have the same basic records, even discussions. Other types such as SCORM and those made with the Content Builder can record much more information.


Percolate is released under AFFERO GPL v3. See LICENSE.

Subdirectories such as vendor may have other FOSS libraries released under other licenses.