Frappe Learning
Open-source LMS from the Frappe stack, with a deliberately minimal SCORM chapter type
The facts
- Licence
- AGPL-3.0
- Pricing
- Open source Price source for Frappe Learning, opens in a new tab
- Deployment
- Self-hosted
- Platforms
- Web · Hosted service
- Documentation
- docs.frappe.io/learning — opens in a new tab
- Source code
- github.com/frappe/lms — opens in a new tab
Standards support
Every line says where the claim came from. We do not test conformance ourselves and we issue no badge of our own.
| Standard | Supported | Provenance | Checked | Note |
|---|---|---|---|---|
| SCORM 1.2 | Yes | editor-checked · 24 Aug 2026— source, opens in a new tab | A window.API object is exposed, but only cmi.core.lesson_status and cmi.suspend_data are persisted; every function returns "true" and LMSGetLastError always returns "0". | |
| SCORM 2004 | Yes | editor-checked · 24 Aug 2026— source, opens in a new tab | window.API_1484_11 is exposed with the same minimal behaviour — completion status and suspend data only. Scores, interactions and objectives are logged to the browser console and discarded. | |
| xAPI | No | editor-checked · 24 Aug 2026 | — | |
| cmi5 | No | editor-checked · 24 Aug 2026 | — | |
| AICC | Not stated | — | — | — |
| LTI | Not stated | — | — | — |
- Claimed
- — the vendor states it. We have not confirmed it.
- Checked
- — an editor confirmed it on the date shown.
- Verified
- — an official registry lists it, and we link to the entry.
Editor's notes
Frappe Learning is a full LMS — courses, batches, cohorts, assignments, quizzes, certificates, live classes — built on the Frappe framework and sharing an identity and database with ERPNext. It is the natural choice for an organisation already running that stack, and it is genuinely well maintained: thousands of stars, a large fork count, and commits most days.
Its SCORM support should be understood as a chapter type, not a runtime. Reading the player, both window.API and window.API_1484_11 are declared so content of either generation will find something and initialise. Beyond that the implementation is a stub: every function returns "true", GetLastError always returns "0", and of the whole data model only completion status and cmi.suspend_data reach the server. Scores, interactions, objectives and timing are printed to the browser console and dropped.
For a lot of compliance work that is enough — the question being asked is whether someone finished the module, and bookmarking survives a reload. It is not enough where a score, an attempt history, question-level reporting or a regulator's evidence trail is required, and it is not the platform to test a package against if you want to know whether that package is correct.
Deciding today: adopt it for its own authoring and cohort features, treat imported SCORM as a secondary path, and test your specific package before committing.
Listed on scorm-tools.com
Maintainers and vendors are welcome to show the listing badge in a README or on a product page. It is free, it does not require a claim, and there is nothing to buy.
Get the embed code