Shiken

What Is SCORM? 1.2 vs 2004 vs xAPI vs cmi5 Explained

Updated

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.

What Is SCORM? 1.2 vs 2004 vs xAPI vs cmi5 Explained

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.2SCORM 2004 (3rd/4th ed.)xAPIcmi5
ReleasedOct 20013rd ed. 2006, 4th ed. 2009IEEE 9274.1.1-2023 standardQuartz 1st ed., June 2016
How data movesJavaScript API in the browserJavaScript API in the browserHTTP statements to a Learning Record Store (LRS)xAPI statements to the LMS's LRS, launched by the LMS
Status modelOne field: lesson_status (passed, completed, failed, incomplete, browsed, not attempted)Two fields: completion_status and success_statusAny "actor did verb to object" statementDefined verbs (launched, initialized, completed, passed, failed, terminated, abandoned, waived, satisfied) plus any other xAPI statements
Resume data limitsuspend_data 4,096 chars; lesson_location 255suspend_data 64,000 chars; location 1,000State documents stored in the LRSState documents stored in the LRS
OfflineNo: needs a live API connectionNoYes: statements can be sent laterLaunched online by the LMS; offline handling depends on the vendor
SequencingNoneIMS Simple Sequencing (prerequisites, rollup, remediation)NoneCourse → blocks → assignable units (AUs), with "moveOn" rules (Passed, Completed, CompletedAndPassed, CompletedOrPassed, NotApplicable)
Where content can liveSame domain as the LMS (browser cross-domain rules)Same domain as the LMSAnywhereAnywhere: an AU can be a fully qualified URL
LMS supportNear-universalBroad; 3rd edition is the most widely usedNeeds 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:

SymptomLikely causeFix
Course stays "incomplete" or "in progress" after the learner finishesThe course never calls LMSCommit/LMSFinish (or Commit/Terminate) before the window closes; or the completion trigger sits on a slide learners skipCheck 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 reverseSCORM 1.2 mastery score in the manifest interacts with lesson_status, and LMSs read the spec differentlyRemove the mastery score or report pass/fail consistently; test the exact combination in your LMS
Resume works on short courses but not long onessuspend_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 allContent is served from a different domain than the LMS (e.g. a CDN), or opened in a window the LMS doesn't controlHost the package on the LMS, use the LMS's proxy option, or move to cmi5/xAPI
LMS rejects the uploadimsmanifest.xml isn't at the zip root (you zipped the folder, not its contents), or the version isn't supportedRe-zip the contents; check which SCORM editions your LMS accepts
Learners lose progress after you update the courseReplacing a package mid-attempt resets or corrupts stored stateVersion 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

  1. 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.
  2. Read the debug log. SCORM Cloud logs every API call and value. Look for status being set without a Commit, for Terminate that never arrives, or for writes that return an error.
  3. Watch the browser. Open developer tools and check the console for API-discovery errors and cross-origin warnings when the course launches.
  4. Check the manifest. Confirm the imsmanifest.xml location, the SCORM version it declares and any mastery score.
  5. Check time formats. SCORM 1.2 session time uses CMITimespan (HHHH:MM:SS). SCORM 2004 uses an ISO 8601 duration such as PT1H5M. 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.

Evaluate with AI

Not sure if Shiken is right for you? Ask an AI.

Get an honest, outside read. These open your AI assistant with a prompt to weigh Shiken against your team, goals and budget — and tell you if it's a fit, a stretch, or a mismatch.

Opens in a new tab. No account or sign-up required.

Try Shiken Premium for free

Start creating interactive learning content in minutes with Shiken. 96% of learners report 2x faster learning.

Free 7 day trialCancel anytime30k+ learners globally
Shiken UI showing questions and overall results