SCORM package example: a minimal one

A SCORM package example you can build by hand: the manifest at the zip root, one launch file, and the four API calls that make an LMS record it.

What does every SCORM package contain?

A minimal SCORM package example is a zip with two things: an imsmanifest.xml file at the root, and one HTML file the manifest names as the launch page. That HTML finds the LMS API, initialises, writes a status, commits and finishes. Everything else in a real course is content layered on that skeleton.

It helps to see the skeleton on its own, because most broken packages are broken at this level rather than in the content. If the manifest is in the wrong place, the LMS rejects the upload. If the launch page never talks to the API, the course plays perfectly and records nothing. Getting the two-file version right first makes every later problem easier to locate.

The manifest at the zip root

The single most common reason an LMS refuses a package is that imsmanifest.xml is not at the top level of the zip. It happens when someone right-clicks a folder and compresses the folder itself, so the zip contains my-course/imsmanifest.xml instead of imsmanifest.xml. The LMS opens the zip, does not find the manifest where the specification says it must be, and reports the package as invalid.

The fix is to select the files inside the folder and compress those. When you open the finished zip, the first thing you see should be the manifest, not a folder.

The manifest does three jobs: it says which SCORM version the package uses, it lists the course structure (the organisation and its items), and it points each launchable item at a resource with an href to the file the LMS should open. Every element is explained in imsmanifest.xml explained.

A two-file SCORM 1.2 example

Here is the smallest manifest that declares one launchable item, a sharable content object (SCO) in SCORM terms:

<?xml version="1.0" encoding="UTF-8"?>
<manifest identifier="com.example.minimal" version="1.0"
  xmlns="http://www.imsproject.org/xsd/imscp_rootv1p1p2"
  xmlns:adlcp="http://www.adlnet.org/xsd/adlcp_rootv1p2">
  <metadata>
    <schema>ADL SCORM</schema>
    <schemaversion>1.2</schemaversion>
  </metadata>
  <organizations default="org1">
    <organization identifier="org1">
      <title>Minimal course</title>
      <item identifier="item1" identifierref="res1">
        <title>Lesson 1</title>
      </item>
    </organization>
  </organizations>
  <resources>
    <resource identifier="res1" type="webcontent"
      adlcp:scormtype="sco" href="index.html">
      <file href="index.html"/>
    </resource>
  </resources>
</manifest>

And a launch page that does the minimum an LMS needs to record a completion:

<script>
function findAPI(w) {
  var n = 0;
  while (!w.API && w.parent && w.parent !== w && n++ < 10) { w = w.parent; }
  return w.API || (window.opener && window.opener.API) || null;
}
var api = findAPI(window);
if (api && api.LMSInitialize("") === "true") {
  api.LMSSetValue("cmi.core.lesson_status", "completed");
  api.LMSCommit("");
  api.LMSFinish("");
}
</script>

Zip those two files, with the manifest at the root, and you have a valid SCORM 1.2 package. It launches, initialises, marks itself completed, saves and closes the session. A real course does the same four things with more steps in between and more data written, such as score, bookmark and time. The item-and-resource relationship is described in what is a SCO.

What an authoring tool export looks like

Open a package exported from any mainstream authoring tool and the same skeleton is there, surrounded by much more:

imsmanifest.xml
*.xsd               (schema files the manifest references)
index_lms.html      (launch page named in the manifest)
scormdriver/ or lms/  (the tool's own API wrapper)
story_content/ or assets/  (slides, media, fonts)
data/               (quiz definitions, text, settings)

The names vary by tool, but the roles do not. There is always one manifest at the root, one launch file per SCO, a block of JavaScript that handles the API calls, and the course content itself. The schema definition files (.xsd) are often included so the manifest can be validated against them; strict validators expect them to be present.

If a package works in one LMS and not another, compare it to the two-file example first. Missing manifest at root, a wrong href, or no API call are far more common causes than anything in the content.

Where can you find sample packages?

When you need a package to test an LMS rather than build a course, you do not have to make one. ADL, the organisation behind SCORM, has published sample and test content alongside the specifications, and Rustici Software publishes a set of free sample packages on scorm.com covering SCORM 1.2 and the SCORM 2004 editions. Many LMS vendors and community forums also share small test courses. Treat any sample as a fixture for testing, not as a template to ship.

A sample package is most useful when it exercises the feature you are investigating: a single-SCO 1.2 package for basic completion, a multi-SCO 2004 package for sequencing, or one that writes interactions if you are testing quiz reporting.

How to check a sample really works

Do not trust a sample package, or your own, because it opened. Check it:

  1. Open the zip and confirm imsmanifest.xml is at the root.
  2. Confirm the resource href points to a file that exists in the zip, with the same capitalisation.
  3. Launch it and watch the runtime calls: one initialise returning "true", the status write, a commit, and a finish.
  4. Close it, relaunch, and check the LMS kept the status.

That last step catches more problems than the first three combined. A fuller pre-upload routine is in how to test a SCORM package before the LMS does.

Where SCORM Central fits

SCORM Central converts files you already have — PDF, PowerPoint, Word, or video — into SCORM 1.2, SCORM 2004, cmi5, or xAPI, and shows you the manifest, the full runtime log, and a conformance report on every build, so you can see exactly what a package will report before an LMS does. See how it works, or start with one file.

Keep reading

How-to4 min Convert SCORM to video or PowerPoint? Can you convert SCORM to MP4, HTML5 or PowerPoint? What is inside a package, the routes that work, and what you lose with each one. Explainer4 min Does your LMS support xAPI? How to check What xAPI LMS support really means: launching xAPI content, a built-in LRS, or forwarding statements. The questions to ask and a quick test to run. Explainer4 min LMS vs LRS: what is the difference? LMS vs LRS: an LMS runs courses and learners; an LRS stores xAPI statements. Why SCORM does not use an LRS, and when you need both.

Start with one file.

Upload something you already have and see it as a package, with the conformance report and the runtime log alongside it.

→ upload  handbook.pdf
  parsing … 14 sections
  building manifest …
  validating … 0 errors, 2 notes
✓ handbook-scorm2004.zip
✓ preview link ready