---
title: "Frappe Learning"
description: "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."
canonical_url: "https://scorm-tools.com/tools/frappe-learning"
last_updated: "2026-10-31T10:22:00.273Z"
---

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.
