Download one of the 3 free packages below, import it into your LMS, click Mark complete, and check that the LMS records completed with a score of 100. Each package prints every SCORM call it makes and the LMS's answer, so you can hold its log up against the LMS report. If the two disagree, suspect the LMS and its settings before your course. For Moodle, use SCORM 1.2: Moodle's FAQ says SCORM 2004 is not supported1.
- Download the SCORM 1.2 sample (ZIP, 13 KB, free, no email required)
- Download the SCORM 2004 4th Edition sample (ZIP, 27 KB, free, no email required)
- Download the SCORM 1.2 video sample (ZIP, 54 KB, free, no email required)
Each zip's README.txt lists every call the package makes.
What does a test SCORM package prove?
A test package proves that your LMS can import a SCORM zip, launch it, hand it the SCORM API and store what comes back. Everything a course reports travels through that JavaScript API, never "through web services, form posts, database writes or any other mechanism"2.
When your course will not track, run a package whose API log you can read first. If the test package records completed and 100 and your course does not, look at your course or its export settings. If both fail, no republish of your course will fix it.
A clean run does not prove conformance. Under ADL's rules, claiming conformance to a SCORM version means passing ADL's Conformance Test Suite for that version, on an honor system3. SCORM Cloud, Rustici Software's hosted test service, "does not check for strict technical conformance"4 either.
What do the 3 sample packages do and report?
Each package is 1 SCO, a resource that can talk to the LMS5, in a single index.html with its CSS and JavaScript inside.
| Package | SCORM version | What it reports on Mark complete | File size | When to use it |
|---|---|---|---|---|
| scorm-1-2-sample.zip | 1.2 | cmi.core.lesson_status completed, cmi.core.score.raw 100 (min 0, max 100), session time | 13 KB | Moodle, or any LMS that lists SCORM 1.2 |
| scorm-2004-4th-sample.zip | 2004 4th Edition | cmi.completion_status completed, cmi.success_status passed, score 100 raw and 1 scaled, session time | 27 KB | An LMS that lists SCORM 2004 4th Edition; not core Moodle |
| scorm-1-2-video-sample.zip | 1.2 | The same as the 1.2 sample, once a 5 second MP4 has played to its end | 54 KB | A course whose video will not play, or will not let the learner finish |
On launch, each package looks for the API where SCORM says the LMS puts it, in a parent window or the window that opened the lesson: an object named API in SCORM 1.2, API_1484_11 in SCORM 20042. The package then initializes, reads the learner name, status, entry and mode, and turns a "not attempted" status into incomplete. It keeps a launch counter in cmi.suspend_data, the field for data "between learner sessions"6.
Mark complete sends the values in the table, the time on the page and a normal exit, then calls Commit and LMSFinish("") in SCORM 1.2 or Terminate("") in SCORM 20042. Close the page without clicking and the package still sends the time and a "suspend" exit, then commits and finishes, because Terminate must be called however the learner leaves2.
The video sample adds a 5 second test card made for this page: color bars, a countdown and a quiet tone. Mark complete unlocks only when the video ends, and a video that will not load writes the browser's media error to the log. For which version your own courses should export, see SCORM 1.2 vs SCORM 2004.
If you build your own, mind the case: the SCO attribute is adlcp:scormtype in SCORM 1.2 and adlcp:scormType in SCORM 20047. Carry the schema files too, which "should be included in every SCORM package"8; these 3 zips hold SCORM.com's own set.
The manifest file must always exist at the root of the content. To be fully conformant, the content should also include a set of XML schema definition files (.xsd and .dtd files) that formally describe the XML grammar contained within the manifest, including any extensions that may have been used.
SCORM.com (Rustici Software), "SCORM Content Packaging"5
Neither SCORM 1.2 manifest sets a mastery score, so the LMS should keep the status the SCO sets; if a 1.2 manifest did set one, the LMS could turn the status into passed or failed by comparing it with the raw score1. The SCORM 2004 manifest sets none either.
How do you test a package in SCORM Cloud?
Import the zip, launch it, click Mark complete, and read the result. Rustici Software's testing page says you can "view completion and pass/fail status along with score and time", find problems in the debug logs, and do it on a free trial4. Expect completed and 100 from the 1.2 sample, plus passed from the 2004 sample.
SCORM Cloud takes SCORM 1.2, SCORM 2004, AICC, xAPI and cmi54, so either version should import there even if your LMS takes only one. Rustici Software's page does not say how to compare a Cloud result with your own LMS; the package log does that job. These packages have not been run in SCORM Cloud yet.
How do you test a package in Moodle?
Use the SCORM 1.2 sample. Moodle supports SCORM 1.2, while SCORM 2004 is not supported and some 2004 packages "may appear to work"1.
Turn on API logging before you upload: in Site administration > Plugins > Activity modules > SCORM package, tick "Activate API debug and tracing"9. Moodle's capture mask example, admin:.*, "will debug for admin user only"10, so put your test learner's username in place of admin. Then upload the zip exactly as downloaded, because Moodle needs imsmanifest.xml at the root of the zip1.
Switch off 3 Compatibility settings for the first run. Force completed sets the status of the attempt to complete, Auto commit commits 60 seconds after values are set, and Mastery score overrides status can set the status to failed9.
Launch as your test learner, not with the Preview button9. The Mode row should say normal; browse and review are for previewing and rereading. A SCO in review mode "should be careful not to change the learner’s status or reset the score"2, so a run in browse or review mode tells you little about tracking.
How do you read the results?
Compare the package log with the LMS report, value by value. Moodle's FAQ says that if the values in the debug log do not match what Moodle saved, there may be a problem with Moodle; if they match, look at the SCO or the activity settings1.
A clean first run of the 1.2 sample logs the API found, LMSInitialize("") returning "true", 5 reads, 2 writes and a commit, then, on Mark complete, 6 writes, a commit and LMSFinish("").
In the package's log, green lines are calls that worked. Amber marks error 403 on the first read of suspend data in SCORM 2004, one of SCORM.com's "perfectly legitimate situations"2. Red is a failed call, as in Moodle's own debug log1.
In the report, you want completed (plus passed, for the 2004 sample), 100, and a time close to how long the page was open. In Moodle, a completed attempt with no grade can be the grading method talking: Learning Objects records a 1 or a 0 per SCO, while Highest grade, Average grade and Sum grade need cmi.core.score.raw1.
Which 3 failures does a test package expose?
The import fails. Moodle says so on screen, for instance that imsmanifest.xml "was not in the root of your zip file"10; on Linux servers the name must also be lowercase1. These packages meet both rules and hold every file their manifests list, so an import failure points first at the upload or the LMS. No real LMS has imported them yet, so a fault in a package cannot be ruled out.
The lesson opens but gets no API, or no session. The page shows a red warning.
The API object should sit in a parent window or the opener window2, so a copy opened from your desktop never finds one. A Moodle package set to open in a new window needs pop ups allowed9.
If the 1.2 sample finds only API_1484_11, the page says so: your LMS is offering the SCORM 2004 API to a SCORM 1.2 package. If LMSInitialize fails, nothing sent after it is saved1.
The values arrive, then change. The log says completed and 100; the report disagrees. These packages set no mastery score, so a status that changed on its way into the report was changed by the LMS. In Moodle, check the Compatibility settings and the grading method first91.
How to do it yourself
You need the packages above, a free SCORM Cloud trial4, admin rights in your LMS and a test learner account. Allow about 30 minutes, a working estimate rather than a vendor figure.
The 3 packages were validated against the SCORM schema files and exercised in a browser against a simulated SCORM API. They have not yet been run in SCORM Cloud or in any named LMS, so your first run is also their first run on a real LMS.
- Pick the version your LMS lists in writing. For Moodle, that is SCORM 1.21.
- Get a baseline in SCORM Cloud. Run the sample there and note status, score, time and the debug log4.
- Prepare your LMS as in the Moodle section: API debugging for the test learner, the 3 Compatibility settings off, the zip uploaded as downloaded into a test course9101.
- Launch as the learner and leave without clicking. The API row should say Found, the Mode row normal6, and the log should have no red lines. The report should show incomplete.
- Launch again and finish. Entry should read resume and the launch count 2, because a "suspend" exit keeps the attempt's data2. If Force new attempt is on, every access is a new attempt9 with fresh data2, and the count restarts at 1. Click Mark complete.
- Compare the log with the report. Completed, 100, a plausible time. A clean log with a wrong report is a question for the LMS1. Then put your real course through steps 3 to 6.
The mistakes that cost the most
- Zipping the package again. Unzip it to look inside, compress the folder, and the manifest sits 2 levels deep where Moodle cannot find it1.
- A mastery score nobody chose. Many authoring tools write one into the manifest by default1. If the test package passes and your SCORM 1.2 course comes back failed, search its imsmanifest.xml for "masteryscore".
- Uploading over the live activity. If the new package's item identifier differs from the old one, Moodle deletes the tracking data1.
Questions people also ask
Where else can I download a free sample SCORM package? SCORM.com's Golf Examples; most are SCORM 1.2 or 2004 3rd Edition7. ADL's SCORM page lists LMS Test Packages, but adlnet.gov refused connections on 9 October 2026, so they were not checked3. Moodle's FAQ points to a sample at pipwerks.com1.
Does Moodle accept SCORM 2004 packages? Not officially. Parts of the SCORM 2004 API were implemented and some packages may appear to work, but native development has stopped1.
What should a SCORM test package report? At least a status and a score. SCORM.com's first tier of data is status, score, session time, location and exit2; these packages send all of them except location, the bookmark.
Moodle Docs 5.3, "SCORM FAQ", last edited 16 April 2024, read live 9 October 2026; the passages beyond Supported Versions read in the Internet Archive copy of the Moodle 4.5 docs of 6 November 2024, which has the same last-edited date. https://docs.moodle.org/503/en/SCORM_FAQ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎
SCORM.com (Rustici Software), "SCORM Run-Time Environment", modified 4 October 2024, read 9 October 2026. https://scorm.com/scorm-explained/technical-scorm/run-time/ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎
ADL Initiative, "Sharable Content Object Reference Model (SCORM)", read 9 October 2026 in the Internet Archive copy of 13 December 2025, because adlnet.gov refused connections that day. https://adlnet.gov/past-projects/scorm/ ↩︎ ↩︎
Rustici Software, "SCORM Cloud Testing: The Solution for Testing SCORM Content", undated, read 9 October 2026. https://rusticisoftware.com/resources/test-scorm/ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎
SCORM.com (Rustici Software), "SCORM Content Packaging", modified 31 January 2023, read 9 October 2026. https://scorm.com/scorm-explained/technical-scorm/content-packaging/ ↩︎ ↩︎
SCORM.com (Rustici Software), "SCORM Run-Time Reference Guide", data model for SCORM 1.2 and SCORM 2004, undated, read 9 October 2026. https://scorm.com/scorm-explained/technical-scorm/run-time/run-time-reference/ ↩︎ ↩︎
SCORM.com (Rustici Software), "Sample SCORM packages" (the Golf Examples), modified 21 March 2024, read 9 October 2026. https://scorm.com/scorm-explained/technical-scorm/golf-examples/ ↩︎ ↩︎
SCORM.com (Rustici Software), "XML Schema Definition Files", modified 19 November 2018, read 9 October 2026. https://scorm.com/scorm-explained/technical-scorm/content-packaging/xml-schema-definition-files/ ↩︎
Moodle Docs 5.3, "SCORM settings", last edited 14 August 2025, read 9 October 2026. https://docs.moodle.org/503/en/SCORM_settings ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎
Moodle, English language strings for the SCORM package activity (
mod/scorm/lang/en/scorm.php), branch MOODLE_503_STABLE, read 9 October 2026. https://github.com/moodle/moodle/blob/MOODLE_503_STABLE/public/mod/scorm/lang/en/scorm.php ↩︎ ↩︎ ↩︎