What Is SCORM? 1.2 vs 2004 vs xAPI vs cmi5 Explained
Quick Summary
What is SCORM? A plain answer, a SCORM 1.2 vs 2004 vs xAPI vs cmi5 table, and how to debug completion and suspend_data failures in your LMS.

SCORM (Sharable Content Object Reference Model) is a set of technical specifications that let an eLearning course run in any compliant learning management system (LMS) and report back to it. A SCORM course reports completion, pass/fail, score, time spent and a bookmark so the learner can resume. In practice, SCORM is two things: a zip file with an imsmanifest.xml at its root, and a JavaScript API the course calls in the browser while the learner works through it.
SCORM was published by the US Advanced Distributed Learning (ADL) Initiative. Two versions are in use: SCORM 1.2, released in October 2001, and SCORM 2004, whose 4th edition (March 2009) is the most recent (scorm.com version history). SCORM hasn't changed since 2009, yet almost every corporate LMS still accepts it. That's why you still need to understand it, and why you should know when to use xAPI or cmi5 instead.
How SCORM works: packaging plus a runtime API
SCORM standardizes two things.
1. Content packaging. A course is delivered as a zip file, which the spec calls a package interchange file (PIF). The imsmanifest.xml file describes the course structure and resources, and it must sit at the root of the package. The package contains two kinds of content. SCOs (sharable content objects) are launchable pieces that talk to the LMS. Assets are static files, such as images, that don't.
2. Run-time communication. When a learner launches a SCO, the LMS provides a JavaScript object, and the course has to find it by searching its parent windows and its opener's parents. The course then calls a fixed sequence of functions:
- SCORM 1.2:
LMSInitialize→LMSGetValue/LMSSetValue→LMSCommit→LMSFinish - SCORM 2004:
Initialize→GetValue/SetValue→Commit→Terminate
Everything the LMS knows about the attempt comes from the data-model values (the cmi.* elements) written through those calls. SCORM content can't use web services or form posts to report. If a value isn't written through the JavaScript API, the LMS never sees it.
What SCORM tracks, and what it doesn't
SCORM tracks one learner's attempt at one piece of content:
- completion, pass/fail and score
- session time
- a bookmark and free-form "suspend data" so the learner can resume
- answers to individual questions (interactions)
- in SCORM 2004, objectives and a progress measure
It can't record anything that happens outside the launched course: a coaching conversation, a simulation in another app, a real customer call, or learning on a phone with no connection. xAPI was created to fill that gap.
SCORM 1.2 vs SCORM 2004 vs xAPI vs cmi5
| SCORM 1.2 | SCORM 2004 (3rd/4th ed.) | xAPI | cmi5 | |
|---|---|---|---|---|
| Released | Oct 2001 | 3rd ed. 2006, 4th ed. 2009 | IEEE 9274.1.1-2023 standard | Quartz 1st ed., June 2016 |
| How data moves | JavaScript API in the browser | JavaScript API in the browser | HTTP statements to a Learning Record Store (LRS) | xAPI statements to the LMS's LRS, launched by the LMS |
| Status model | One field: lesson_status (passed, completed, failed, incomplete, browsed, not attempted) | Two fields: completion_status and success_status | Any "actor did verb to object" statement | Defined verbs (launched, initialized, completed, passed, failed, terminated, abandoned, waived, satisfied) plus any other xAPI statements |
| Resume data limit | suspend_data 4,096 chars; lesson_location 255 | suspend_data 64,000 chars; location 1,000 | State documents stored in the LRS | State documents stored in the LRS |
| Offline | No: needs a live API connection | No | Yes: statements can be sent later | Launched online by the LMS; offline handling depends on the vendor |
| Sequencing | None | IMS Simple Sequencing (prerequisites, rollup, remediation) | None | Course → blocks → assignable units (AUs), with "moveOn" rules (Passed, Completed, CompletedAndPassed, CompletedOrPassed, NotApplicable) |
| Where content can live | Same domain as the LMS (browser cross-domain rules) | Same domain as the LMS | Anywhere | Anywhere: an AU can be a fully qualified URL |
| LMS support | Near-universal | Broad; 3rd edition is the most widely used | Needs an LRS (built in or separate) | Growing; confirm with your LMS |
Sources: SCORM run-time reference, SCORM versions, SCORM 2004 sequencing, xAPI overview, cmi5 specification (Quartz). Note that SCORM 2004 2nd edition caps suspend_data at 4,000 characters, not 64,000.
How to choose a version
- Choose SCORM 1.2 when the course is short and linear, and you have to be sure it works in any LMS, including your customers' LMSs. Scorm.com still calls 1.2 "the industry workhorse."
- Choose SCORM 2004 3rd or 4th edition when you need pass/fail recorded separately from completion, or the course has a lot of resume state: long courses, many slides, saved free-text answers. Also choose it if you genuinely need sequencing rules. Be warned that scorm.com says IMS Simple Sequencing is "anything but simple".
- Choose xAPI when the learning you want to measure happens outside a browser-launched course: in apps, simulations, on the job or offline.
- Choose cmi5 when your LMS supports it and you want xAPI-level data with LMS-controlled launch and assignment. ADL describes cmi5 as an xAPI profile that adds launch, authentication, session and course-structure rules to xAPI. In xapi.com's words, "cmi5 = xAPI + LMS."
Common SCORM failures and how to debug them
Most "SCORM is broken" tickets come down to one of six causes:
| Symptom | Likely cause | Fix |
|---|---|---|
| Course stays "incomplete" or "in progress" after the learner finishes | The course never calls LMSCommit/LMSFinish (or Commit/Terminate) before the window closes; or the completion trigger sits on a slide learners skip | Check the authoring tool's completion rule; make sure the course commits right after setting status and calls Terminate on exit |
| Shows "passed"/"failed" when you expected "completed", or the reverse | SCORM 1.2 mastery score in the manifest interacts with lesson_status, and LMSs read the spec differently | Remove the mastery score or report pass/fail consistently; test the exact combination in your LMS |
| Resume works on short courses but not long ones | suspend_data is over 4,096 characters in SCORM 1.2 (or 4,000 in 2004 2nd ed.) | Republish as SCORM 2004 3rd/4th ed. (64,000 chars); reduce saved slide states and stored free text |
| "LMS API not found" errors, or nothing records at all | Content is served from a different domain than the LMS (e.g. a CDN), or opened in a window the LMS doesn't control | Host the package on the LMS, use the LMS's proxy option, or move to cmi5/xAPI |
| LMS rejects the upload | imsmanifest.xml isn't at the zip root (you zipped the folder, not its contents), or the version isn't supported | Re-zip the contents; check which SCORM editions your LMS accepts |
| Learners lose progress after you update the course | Replacing a package mid-attempt resets or corrupts stored state | Version the course; push updates to new enrollments, or schedule them between cohorts |
Two of these need more explanation.
The mastery-score trap. In SCORM 1.2, the manifest can set a mastery score. Under one reading of the spec, the LMS should compare the learner's score with it and overwrite "completed" with "passed" or "failed". Under the other, the LMS should never override a status the course set itself. Rustici Software, the company behind scorm.com, shipped both behaviours in different releases, so expect LMSs to differ too. If completions look wrong only on courses with quizzes, check this first.
The suspend_data ceiling. Authoring tools store every slide's state in suspend_data. A long course with many interactions can pass 4,096 characters well before the end. Depending on the LMS, the write may be truncated or rejected, so check LMSGetLastError after the call. The learner sees a course that won't resume. Publishing as SCORM 2004 3rd or 4th edition raises the limit to 64,000 characters.
A debugging workflow that works
- Isolate the package. Upload it to SCORM Cloud. The free trial allows 3 courses, 5 GB and 10 resettable registrations, and its sandbox lets you relaunch without using them up. If the course works there but fails in your LMS, the problem is LMS configuration, not content.
- Read the debug log. SCORM Cloud logs every API call and value. Look for status being set without a Commit, for
Terminatethat never arrives, or for writes that return an error. - Watch the browser. Open developer tools and check the console for API-discovery errors and cross-origin warnings when the course launches.
- Check the manifest. Confirm the
imsmanifest.xmllocation, the SCORM version it declares and any mastery score. - Check time formats. SCORM 1.2 session time uses
CMITimespan(HHHH:MM:SS). SCORM 2004 uses an ISO 8601 duration such asPT1H5M. A wrong format can cause a rejected write.
When you still need SCORM in 2026, and when you don't
You still need SCORM when:
- your LMS, or your customer's LMS, only imports SCORM
- you're buying or selling off-the-shelf course libraries, where SCORM 1.2 is the safe exchange format
- compliance needs a simple, auditable record that a person completed a course and passed it
- content must move between platforms without being rebuilt
SCORM is the wrong tool when:
- the skill you care about shows up in conversations, not quiz answers
- learners are on mobile or often offline
- you need to connect training to on-the-job performance
The last case is where most enablement teams hit SCORM's limits. For example, in an 11-week pilot with a European B2B field sales team (37 reps), Shiken's meeting recorder scored all 224 recorded customer meetings on a 4-stage meeting rubric. The team averaged about 47/100, and the opening of the meeting was the weakest stage at 38/100. A SCORM package can't capture that kind of evidence, because it only knows what happened inside the course window. You need xAPI-style data, or a platform that measures real work directly.
Most teams end up with a hybrid. They keep SCORM for formal courses and compliance records, and add xAPI or a dedicated platform for practice and performance. Shiken, for example, delivers courses and quizzes into an existing LMS over LTI, SCORM or xAPI, and adds AI roleplay and call scoring alongside. Before you pick an authoring tool, check which standards it actually exports: our comparison of eLearning authoring tools lists them for 10 tools. To compare delivery platforms, see our LMS comparison.
FAQ
Is SCORM Cloud free?
SCORM Cloud, from Rustici Software, has a free trial plan with 3 courses at a time, up to 5 GB of storage and 10 resettable registrations. That's enough to test packages and read debug logs. Hosting real learners needs a paid plan.
How do I open a SCORM file?
A SCORM file is a zip, so you can unzip it to inspect imsmanifest.xml and the HTML, JavaScript and media inside. Double-clicking the HTML usually won't work properly, because the course expects to find an LMS API. To run it as learners will, upload it to an LMS or to SCORM Cloud.
Is SCORM an LMS?
No. SCORM is a standard that courses and LMSs both follow. An authoring tool exports a SCORM package, and a SCORM-compliant LMS imports it, launches it and stores the results.
