SCORM 1.2 — what it is, what it cannot do, and the tools that support it
The oldest version of SCORM still in daily use, and still the safest export format when you do not control the target LMS.
Written and maintained by the scorm-tools.com editor. 65 listed tools state support.
What SCORM 1.2 is
SCORM 1.2 is the version of the Sharable Content Object Reference Model that most e-learning content still ships as. ADL published it in October 2001, and it fixed a simple contract: a course is a ZIP file containing an imsmanifest.xml that describes its resources, and once inside the LMS the course looks up a JavaScript object called API on a parent or opener window. It calls LMSInitialize, reads and writes a small flat data model through LMSGetValue and LMSSetValue, and calls LMSFinish when the learner leaves.
That data model is both why SCORM 1.2 persists and why people outgrow it. It carries a lesson status, a raw score with optional minimum and maximum, session time, interaction records and a 4,096-character suspend area — and nothing else. There is no separate pass mark, no scaled score, no standard place for anything the model did not anticipate, and no sequencing beyond whatever menu the LMS chooses to draw.
SCORM 2004 replaced it in 2004 with a larger data model and real sequencing rules. SCORM 1.2 was never withdrawn, support for it is close to universal, and a package that only needs to report completion and a score will travel further as 1.2 than as anything newer.
Versions and what changed
| Version | Released | What changed |
|---|---|---|
| SCORM 1.0 | January 2000 | First public release; a working draft rather than something to build on. |
| SCORM 1.1 | January 2001 | Short-lived revision; superseded within the year. |
| SCORM 1.2 | October 2001 | The version that stuck: the CMI data model, the API object and content packaging as they are still implemented today. |
| Superseded | January 2004 | SCORM 2004 took over new development. SCORM 1.2 was not withdrawn and remains widely supported. |
Who says so
We link to the specification and to other people's registries. We do not run a conformance programme and we do not issue badges of our own: a claim here is registry-verified only when an official registry says so, and otherwise it is marked as the vendor's statement or as our own check on a date.
Specification
Registry
- No active registry
ADL retired the SCORM certification programme, so no active registry lists conformant SCORM 1.2 products — and adlnet.gov itself has been unreachable since around May 2026, with the specifications and test suites surviving on its GitHub org. Claims on this site are therefore vendor-stated or editor-checked; none can be registry-verified.
Tools that support SCORM 1.2
Grouped by what the tool does, and within each group ordered by how well the claim is evidenced: registry entries first, then facts we checked ourselves, then the vendor's own statement.
Authoring tools & course frameworks
| Tool | Evidence | Licence | Pricing |
|---|---|---|---|
| Adapt Authoring ToolSelf-hosted web UI for the Adapt framework, publishing responsive HTML5 courses | editor-checked— source, opens in a new tab Checked | GPL-3.0 | Open source |
| Adapt FrameworkResponsive HTML5 course framework whose SCORM output is a bundled plugin | editor-checked— source, opens in a new tab Checked | GPL-3.0 | Open source |
| CourseCodeCode-first course framework and CLI that packages to SCORM, cmi5 and LTI 1.3 | editor-checked— source, opens in a new tab Checked | MIT | Open source |
| eXeLearningFree authoring tool from the Spanish education ministry, exporting SCORM, IMS CP and EPUB | editor-checked— source, opens in a new tab Checked | AGPL-3.0 | Open source |
| LernkitCode-first authoring from MDX with SCORM 1.2 export and runnable code as a lesson primitive | editor-checked— source, opens in a new tab Checked | MIT | Open source |
| LessonKitAuthor courses as React components, then export SCORM, xAPI or cmi5 from the same codebase | editor-checked— source, opens in a new tab Checked | Apache-2.0 | Open source |
| LiaScript ExporterTurns a Markdown course into a SCORM 1.2, SCORM 2004, IMS or xAPI package from the command line | editor-checked— source, opens in a new tab Checked | BSD-3-Clause | Open source |
| LumiA desktop H5P editor that exports a working SCORM 1.2 package offline | editor-checked— source, opens in a new tab Checked | AGPL-3.0 | Open source |
| Xerte Online ToolkitsServer-hosted, template-driven authoring for institutions, with SCORM and xAPI export | editor-checked— source, opens in a new tab Checked | Apache-2.0 | Open source |
Converters & migration
| Tool | Evidence | Licence | Pricing |
|---|---|---|---|
| markdown2scormA Perl script that runs Markdown through pandoc and wraps the result as SCORM 1.2 | editor-checked— source, opens in a new tab Checked | none | Open source |
| pptx_to_scormRuby scripts that turn PowerPoint slides into an HTML slideshow in a SCORM folder | editor-checked— source, opens in a new tab Checked | none | Open source |
| scorm-h5p-wrapperWeb app that packs an H5P file into a self-contained SCORM 1.2 package | editor-checked— source, opens in a new tab Checked | MIT | Open source |
| SCORM-to-xAPI WrapperADL's drop-in APIWrapper.js that re-emits SCORM calls as xAPI statements | editor-checked— source, opens in a new tab Checked | none | Open source |
| ppt-to-scorm.comPowerPoint decks turned into packages that actually record completion | vendor-stated— source, opens in a new tab | proprietary | Freemium |
Players, runtimes & debuggers
| Tool | Evidence | Licence | Pricing |
|---|---|---|---|
| lms-lrsA NestJS and Vue reference build of an LMS with a SCORM runtime and an xAPI store | editor-checked— source, opens in a new tab Checked | MIT | Open source |
| Moodle SCORM activity (mod_scorm)The SCORM player inside Moodle — the most exercised open-source runtime there is | editor-checked— source, opens in a new tab Checked | GPL-3.0-or-later | Open source |
| SCORM-LearningManagementSystemA small .NET SCORM LMS and player you can read end to end | editor-checked— source, opens in a new tab Checked | MIT | Open source |
| scorm-playerBrowser-only SCORM 1.2 player and run-time inspector, with no server and no upload | editor-checked— source, opens in a new tab Checked | MIT | Open source |
| SCORM LabDrop a package in the browser and watch every API call it makes | vendor-stated— source, opens in a new tab | proprietary | Free |
Testing, validation & conformance
| Tool | Evidence | Licence | Pricing |
|---|---|---|---|
| PrismUnzips a SCORM, AICC, cmi5 or xAPI package and runs axe-core over every page in it | editor-checked— source, opens in a new tab Checked | MIT | Open source |
| SCORM ValidatorA small Streamlit app that opens a package zip and reports structural faults | editor-checked— source, opens in a new tab Checked | MIT | Open source |
| scorm_debugDrop SCORM zips in a folder and launch each one against a 1.2 or 2004 harness locally | editor-checked— source, opens in a new tab Checked | NOASSERTION | Open source |
| scorm-localA SCORM 1.2 API shim that keeps CMI data in localStorage while you build content | editor-checked— source, opens in a new tab Checked | MIT | Open source |
| simple-scorm-apiOne HTML file that impersonates an LMS so a SCORM 1.2 SCO can be run locally | editor-checked— source, opens in a new tab Checked | none | Open source |
| SCORM LabDrop a package in the browser and watch every API call it makes | vendor-stated— source, opens in a new tab | proprietary | Free |
Packagers, SDKs & libraries
| Tool | Evidence | Licence | Pricing |
|---|---|---|---|
| @gamestdio/scormA TypeScript port of the pipwerks wrapper, published once in 2019 and untouched since | editor-checked— source, opens in a new tab Checked | MIT | Open source |
| @studiolxd/scormHeadless SCORM 1.2 and 2004 runtime with React, Vue, Angular, Svelte and Web Component adapters | editor-checked— source, opens in a new tab Checked | MIT | Open source |
| @szenadam/scorm-api-wrapperA TypeScript reimplementation of the pipwerks SCORM wrapper, published to npm | editor-checked— source, opens in a new tab Checked | MIT | Open source |
| dart_scormSCORM 1.2 and 2004 bindings for Flutter and Dart web applications | editor-checked— source, opens in a new tab Checked | Apache-2.0 | Open source |
| grunt-scorm-manifestGrunt task that writes an imsmanifest.xml for a single-SCO package | editor-checked— source, opens in a new tab Checked | MIT | Open source |
| ngx-scorm-wrapperAn injectable Angular service wrapping the SCORM 1.2 and 2004 runtime APIs | editor-checked— source, opens in a new tab Checked | MIT | Open source |
| node-scorm-packagerNode library that writes an imsmanifest and lays out a SCORM course directory | editor-checked— source, opens in a new tab Checked | MIT | Open source |
| pipwerks SCORM API WrapperThe JavaScript wrapper most SCORM courses have been built on since 2008 | editor-checked— source, opens in a new tab Checked | MIT | Open source |
| React SCORM ProviderA React context and higher-order component over the pipwerks SCORM wrapper | editor-checked— source, opens in a new tab Checked | MIT | Open source |
| SCOBotSCORM 1.2 and 2004 content wrapper with a mock LMS for working offline | editor-checked— source, opens in a new tab Checked | CC-BY-SA-4.0 | Open source |
| SCOL-RA thin SCORM shell that proxies the API to content hosted on another domain | editor-checked— source, opens in a new tab Checked | MIT | Open source |
| scorm (Ruby gem)Reads, checks and builds SCORM packages from Ruby, with a small CLI alongside | editor-checked— source, opens in a new tab Checked | MIT | Open source |
| SCORM Cloud API v2 clientsRustici's generated client libraries for the SCORM Cloud REST API, in six languages | editor-checked— source, opens in a new tab Checked | Apache-2.0 | Open source |
| scorm-againA tested JavaScript SCORM 1.2 and 2004 runtime for anything that has to host a course | editor-checked— source, opens in a new tab Checked | MIT | Open source |
| scorm-godot-pluginGodot editor plugin that wires a web export to the SCORM 1.2 runtime and zips it | editor-checked— source, opens in a new tab Checked | MIT | Open source |
| scorm-kitA nine-command CLI that lints, diffs and audits SCORM packages before upload | editor-checked— source, opens in a new tab Checked | MIT | Open source |
| SCORM-ManifestsBoilerplate imsmanifest.xml files for single-SCO SCORM 1.2 and 2004 packages | editor-checked— source, opens in a new tab Checked | none | Open source |
| scorm-mcp-serverAn MCP tool that wraps a finished HTML module into an offline SCORM package | editor-checked— source, opens in a new tab Checked | MIT | Open source |
| SCORMifySixty lines of JavaScript that turn a folder of HTML into a SCORM 1.2 package | editor-checked— source, opens in a new tab Checked | MIT | Open source |
| simple-scorm-packagerNode package that turns a build directory into a conformant SCORM zip | editor-checked— source, opens in a new tab Checked | MIT | Open source |
| simplify-scormSCORM 1.2 and 2004 runtime APIs in plain JavaScript, for the LMS side of the fence | editor-checked— source, opens in a new tab Checked | MIT | Open source |
| TesseraAuthor a course as Svelte pages, then export the same source as SCORM, cmi5 or xAPI | editor-checked— source, opens in a new tab Checked | MIT | Open source |
| usescormReact hook that wraps the SCORM run-time API and keeps state in suspend data | editor-checked— source, opens in a new tab Checked | MIT | Open source |
| eLearning Module ParserJava library that detects and parses SCORM, AICC, cmi5 and xAPI packages into typed metadata | vendor-stated— source, opens in a new tab Checked | Apache-2.0 | Open source |
| RESCORMReact boilerplate that ships SCORM tracking alongside the application code | vendor-stated— source, opens in a new tab Checked | MIT | Open source |
LMS & LMS plugins
| Tool | Evidence | Licence | Pricing |
|---|---|---|---|
| Chamilo LMSFull open-source LMS with SCORM 1.2 and AICC learning paths and a bundled LTI plugin | editor-checked— source, opens in a new tab Checked | GPL-3.0 | Open source |
| Claroline ConnectSymfony and React learning platform with a SCORM 1.2 and 2004 player plugin | editor-checked— source, opens in a new tab Checked | AGPL-3.0 | Open source |
| EscolaLMS ScormLaravel package that stores, plays and tracks SCORM packages over a REST API | editor-checked— source, opens in a new tab Checked | MIT | Open source |
| Forma LMSCorporate-focused PHP learning platform with its own SCORM 1.2 and 2004 player | editor-checked— source, opens in a new tab Checked | GPL-2.0-only | Open source |
| Frappe LearningOpen-source LMS from the Frappe stack, with a deliberately minimal SCORM chapter type | editor-checked— source, opens in a new tab Checked | AGPL-3.0 | Open source |
| ILIASGerman open-source LMS carrying SCORM 1.2, SCORM 2004 and cmi5 objects in core | editor-checked— source, opens in a new tab Checked | GPL-3.0 | Open source |
| laravel-scormLaravel package that unpacks SCORM zips and stores CMI tracking in your database | editor-checked— source, opens in a new tab Checked | MIT | Open source |
| mod_scormremoteServe a SCORM package from your Moodle into someone else's LMS via a thin wrapper SCO | editor-checked— source, opens in a new tab Checked | GPL-3.0-or-later | Open source |
| MoodleThe most widely deployed open-source LMS, and the SCORM behaviour most content gets tested against | editor-checked— source, opens in a new tab Checked | GPL-3.0-or-later | Open source |
| Open edXThe large self-hosted learning platform, with SCORM and xAPI arriving via plugins | editor-checked— source, opens in a new tab Checked | AGPL-3.0 | Open source |
| Open edX SCORM XBlockUpload a SCORM package into an Open edX course and grade it like any other block | editor-checked— source, opens in a new tab Checked | AGPL-3.0 | Open source |
| OpenOLATLong-running Swiss open-source LMS with SCORM 1.2, QTI 2.1 and LTI 1.3 built in | editor-checked— source, opens in a new tab Checked | Apache-2.0 | Open source |
| SakaiHigher-education LMS with an in-tree SCORM player built on the ADL reference code | editor-checked— source, opens in a new tab Checked | ECL-2.0 | Open source |
| Opigno LMSDrupal distribution turned LMS, with SCORM and xAPI handled by its own modules | vendor-stated— source, opens in a new tab Checked | GPL-2.0-or-later | Open source |
| Totara LearnMoodle-derived enterprise LMS, GPL-licensed but distributed only through a paid subscription | vendor-stated— source, opens in a new tab Checked | GPL-3.0 | On application |
Distribution, licensing & hosting
| Tool | Evidence | Licence | Pricing |
|---|---|---|---|
| SCORMBridgeLicense your SCORM course into a client's LMS without handing over the file | vendor-stated— source, opens in a new tab | proprietary | Freemium |
Choosing between them
SCORM 1.2 or SCORM 2004?
Choose 1.2 when the course reports completion, a score and little else, and when you do not know which LMS it will land in. Choose 2004 when you need completion and success tracked separately, a scaled score, more than 4,096 characters of suspend data, or sequencing rules enforced by the LMS.
SCORM 1.2 or xAPI?
SCORM 1.2 describes content running inside an LMS. xAPI describes an event happening anywhere, stored in a Learning Record Store. If the learning is not a course inside an LMS, SCORM has nowhere to put it.
Questions people ask about SCORM 1.2
Is SCORM 1.2 obsolete?
It is superseded but not withdrawn, and it is the most widely supported version there is. Content authored today is still routinely published as SCORM 1.2 because it imports cleanly almost everywhere.
What is the SCORM 1.2 suspend data limit?
cmi.suspend_data is specified as up to 4,096 characters. Some LMSs allow more and some enforce the limit strictly, which is a common cause of a course resuming in the wrong place on one system and not another.
How does a SCORM 1.2 course report a pass or a fail?
Through cmi.core.lesson_status, whose vocabulary includes passed, failed, completed, incomplete, browsed and not attempted. Because one element carries both completion and success, a course cannot say "finished but failed" as cleanly as SCORM 2004 can.
Can a SCORM 1.2 package be hosted on a different domain from the LMS?
Not reliably. The course finds the API object by walking up the window hierarchy, which the browser blocks across origins. Dispatch and proxy products exist specifically to work around this.
Can I convert SCORM 1.2 to SCORM 2004 or xAPI?
Converters exist and are listed in the converters category. What they cannot do is invent data the original package never collected — a 1.2 course that only reported lesson status will not produce a rich xAPI statement stream after conversion.