A SCORM compliant LMS takes your own package, plays it, and writes a correct record of what the learner did. The only proof is watching it do that before you sign. The organization that wrote SCORM has been shut down, so nobody certifies the label, and a vendor’s “yes” is self-reported. This guide gives you five tests to run in a trial or demo with packages you already own, what a pass and a fail look like for each, and which failures should end the evaluation.
If the module you want to test with doesn’t exist yet, you can build it from a policy document you already have first.
Key Takeaways
- No live body certifies “SCORM compliant”. ADL, which wrote SCORM, has been shut down, and its SCORM 2004 conformance test suite hasn’t changed since April 2015.
- A platform can accept a SCORM 2004 package without running it properly. Moodle’s own FAQ says some 2004 packages “may appear to work” while native 2004 development has stopped.
- A quiz scored 7 out of 10 has to reach a SCORM 1.2 report as 70. The 1.2 score field is declared 0 to 100, so a raw 7 reads as 7%.
- Resume state is capped at 4,096 characters in SCORM 1.2 and 64,000 in SCORM 2004, and a long course that outgrows it loses the learner’s place without an error.
- The costliest failure makes no noise: a package that plays and records nothing, or a platform that records a completion the package never sent.
Why “SCORM Compliant” Is a Claim You Have to Test Yourself
SCORM is an agreement about how a course package and a learning platform talk to each other, and the ADL Initiative wrote it. ADL has been shut down and its work archived for public use. The official conformance test suite for SCORM 2004 4th Edition hasn’t changed since April 2015, and there’s no public register of certified products left to check a vendor against.
So when you ask whether a platform is a SCORM compliant learning management system, every LMS with SCORM on its feature list says yes, and nobody outside the company has checked that answer. That doesn’t make it false. It makes it untested. The difference between “compliant”, “conformant” and “certified” is laid out in what a SCORM file is and what the label promises.
Even an honest claim is narrower than it sounds. “Supports SCORM” can mean any of three separate jobs:
- The zip imports and the lessons appear.
- The SCORM 2004 rules run the way the package expects.
- A status, a score and a date reach the report your auditor reads.
A platform can do the first while failing the other two.
The five tests below check each job with a package you already trust. Leave the sales deck out of it: an hours-saved figure or a cost-savings percentage describes someone else’s program and says nothing about whether your package reports.
Before the Trial: Pick the Packages and Write the Answer Key
None of the five tests works on the vendor’s sample course, because you don’t know what it’s supposed to do. Ask for a trial or demo environment where you can upload content, with one admin login and one learner login. If a vendor resists, the demo questions that make a vendor prove it on screen help you push for the upload.
Then gather four packages:
- A SCORM 1.2 package with a quiz that already records correctly in a system you use today.
- A SCORM 2004 package, if you own any 2004 content, ideally one that records completion and pass separately.
- Your longest or most branching module, whatever its version.
- Two broken copies of the first package, which you’ll make during Test 4.
Before you upload anything, write down what each package should do: the status it ends on, the score for a set of answers you choose in advance, and the screen it should resume on. That’s your answer key. Without it, you’ll look at a report and have nothing to grade it against.
Last, check which version each package claims. Unzip a copy, open imsmanifest.xml in a text editor, and find the schemaversion line. How to tell a 1.2 package from a 2004 one shows which values mean what.
Test 1: Does It Run the Version and Edition You Own?
A platform can list SCORM 1.2 and SCORM 2004 and still run only one of them properly. Moodle’s own SCORM FAQ is unusually direct about it. Its SCORM 1.2 support passes all the tests in ADL’s 1.2 conformance suite, while “some SCORM 2004 packages may appear to work, however development on native SCORM 2004 support in Moodle has stopped.” Cornerstone’s developer documentation for its Course Asset Connector names only one SCORM 2004 edition, the 3rd.
The version check itself happens on one line of text. Moodle matches a package’s version line against five exact values, 1.2, 1.3, CAM 1.3, 2004 3rd Edition and 2004 4th Edition, and runs anything else under SCORM 1.2. The import shows no error. A 2004 package served the 1.2 runtime then fails every 2004 call it makes.
To run the test:
- Ask the vendor, in writing, which SCORM versions and 2004 editions its player runs, and which version strings it recognizes.
- Compare that answer with the
schemaversionlines you found before the trial. - Upload your 1.2 and 2004 packages, then take the 2004 one to the end as the learner.
- Pass: the 2004 package’s report shows completion and pass or fail as two separate results.
- Fail: it imports and plays, then ends with no status, a single status, or stuck at incomplete.
If everything you own is SCORM 1.2, this test is short. If you own 2004 content, a fail means choosing another platform or re-exporting at 1.2, which puts completion and pass back into one field. Either way, it’s cheaper to learn that now than after the contract.
Test 2: Does the Record Match What the Learner Did?
A package can play perfectly and still put the wrong status or the wrong number in the report. What lands there is what an auditor sees, so check it field by field.
The fields depend on the version. SCORM 1.2 has one status field, cmi.core.lesson_status, holding one of six values at a time: passed, completed, failed, incomplete, browsed or not attempted. Every attempt starts at not attempted, and a package can’t set that value itself, only the other five.
Its score, cmi.core.score.raw, is declared from 0 to 100. SCORM 2004 splits status into cmi.completion_status and cmi.success_status, set separately, and adds a scaled score from -1 to 1.
Here’s an example with a 10-question quiz:
- As the learner, answer exactly 7 questions correctly and finish the module.
- Open the admin report, not the learner’s screen.
- Check for a status, a score and a completion date.
- With a second learner account, answer 3 correctly and check again.
In a SCORM 1.2 report, 7 out of 10 should read as 70. If it reads 7, the package sent the raw count instead of a percentage, and a report built for 0 to 100 shows a score of 7%. That’s a package problem rather than a platform one, and it’s still worth finding before anyone is assigned the module.
- Pass: both attempts show the status, score and date your answer key predicted, and the report you’d hand an auditor exports all three.
- Fail: a missing date, a blank score, or a status that doesn’t match what the learner did.
Test 3: Does It Remember Where the Learner Stopped?
The field a package uses to remember a learner’s place, cmi.suspend_data, is stored by the LMS, and it has a ceiling. Moodle’s runtime caps it at 4,096 characters for SCORM 1.2 and 64,000 for SCORM 2004, a factor of about fifteen. A short linear module never gets close. A long branching course that stores every choice can outgrow the smaller limit, and then the saved state is cut off and the learner comes back to the wrong place, with no error on either side.
Use your longest or most branching package:
- As the learner, go past the halfway point and note the screen you’re on.
- Leave with the course’s own exit button, log back in and relaunch.
- Go past halfway again, close the browser tab this time, and relaunch.
- Pass: both times you return to the screen you noted, or you’re offered the choice to.
- Fail: you land on the first screen, on an earlier screen, or with your quiz answers gone.
A fail here is a deal-breaker for long compliance modules that people finish over several sittings. For a 10-minute module most people finish in one go, it’s a note on the scorecard.
Test 4: Does a Broken Package Fail With a Message You Can Act On?
Sooner or later someone uploads a package that was zipped wrong. What the platform says then decides whether the fix takes two minutes or a support ticket.
The most common mistake is compressing the folder instead of its contents, which leaves the manifest one level too deep. It’s common enough that Moodle keeps a deliberately broken package in its own test suite for it, and its error names the cause: “An imsmanifest.xml file was found but it was not in the root of your zip file, please re-package your SCORM.”
Make two broken copies of your first package:
- Wrong folder level: unzip it, then compress the folder rather than the files inside it.
- Missing file: unzip it, change the capital letters in one lesson file’s name, and zip the contents again.
Upload each one.
- Pass: each upload stops with a message that names the problem. For the second copy, Moodle warns that “the following resources were referenced in your manifest but couldn’t be found” and lists them.
- Fail: a generic “upload failed”, or an import that succeeds and opens a blank screen.
This test shouldn’t end an evaluation by itself. It tells you how much troubleshooting lands on your desk after the rollout.
Test 5: Does Silence Ever Show Up as a Result?
The failure that costs most is the one nobody sees. A standard package finds the LMS by searching the page around it, up to seven levels of nested frames and then the window that opened it. If it finds nothing, the course plays anyway. At most, the learner’s browser shows an alert, and nothing reaches your report.
Two setups cause that silence:
- The course sits too deep. If the platform nests it too far inside its own page layout, the search gives up.
- The content lives somewhere else. If it sits on a server at a different address from the LMS, Moodle’s documentation says browser security blocks the exchange and no grades or tracking come back.
The opposite failure is just as quiet: some platforms fill in a status the package never sent.
Moodle’s SCORM 1.2 runtime marks an attempt completed if the package left its status at “not attempted”. If an admin set a mastery score and switched on mastery override, it also recalculates pass or fail from that score. A package that looks finished there can stay incomplete on a stricter platform, and a learner who opened a package that never sets a status, then left, can show as done.
To run the test:
- Repeat Test 2 on a phone, and through any other way learners will open the course, such as the platform’s mobile app.
- If you plan to keep content on your own server and point the LMS at it, test exactly that setup.
- Open the 1.2 package as a new learner, look at the first screen, close it, and check the report.
- Pass: every route produces a status, a score and a date, and the abandoned attempt shows incomplete or not attempted.
- Fail: any route with an empty record, or an abandoned attempt marked completed.
If you see the second, ask the vendor whether the package or the platform wrote that status.
Which Failures Should End the Evaluation
Not every fail costs the same. Run the same packages on every platform, then weigh the results against what your training has to prove.
| Test | What you do | Pass | What a fail costs you |
|---|---|---|---|
| 1. Version and edition | Get versions and editions in writing, then finish a 2004 package as a learner | Completion and pass or fail show separately | Re-exporting 2004 content at 1.2, or a different platform |
| 2. The record | Finish the quiz with 7 of 10 and 3 of 10 correct, then read the admin report | Status, score and date match your answer key | Reports you can’t defend at an audit |
| 3. Resume | Leave past halfway twice, by exit button and by closing the tab | You return to the screen you noted | Learners restarting long modules |
| 4. Broken package | Upload a folder-level zip and a renamed-file zip | Each error names the problem | Support time after the rollout |
| 5. Silence | Repeat Test 2 on a phone and every launch route, then abandon an attempt | Every route records, and the abandoned attempt shows incomplete | Missing or unearned completions nobody notices |
The decision rule:
- Fail Test 2 or Test 5 on the route most learners will use: stop, if the training feeds a certificate, a due date or an audit.
- Fail Test 1: stop if you own SCORM 2004 content or need completion and pass as two facts. Otherwise, note it.
- Fail Test 3: stop for long or branching courses people finish over several sittings. For short modules, note it.
- Fail Test 4: keep going, and ask the vendor what message its own support team sees for the same upload.
Before blaming the platform, run the failing package on the system where it works today. If it fails only on the candidate, the platform is the cause. The exception is a forgiving system like the one in Test 5, which can make a broken package look healthy.
Then put the tests in writing. Each one becomes a line a vendor can fail in your LMS requirements checklist. If you’re replacing a system, the same five tests become the check on every package you move during an LMS migration.
Run the Tests Before You Sign, Not After the Rollout
Send your packages to each vendor before the demo, and get the SCORM versions and 2004 editions in writing. Run Tests 2 and 5 first, because they decide whether your completion records hold up. Then run 1, 3 and 4, and grade every platform against the same answer key. Ignore the compliance badge.
Mini Course Generator is our product, and these tests apply to it too. It exports courses as SCORM packages. The pricing page shows which plans include dynamic SCORM export. Its SCORM Upload Block places a package built in another LMS or authoring tool inside a course and tracks how learners interact with it.
It publishes no SCORM version for either direction, so ask, then test. And if a course doesn’t have to sit inside another LMS, sharing it by link or embed skips the package, and the version question, entirely.
Frequently Asked Questions
What does “SCORM compliant” mean for an LMS?
It means the vendor says the platform imports and plays SCORM packages, and nobody outside the company checks that. The label also hides which part works. Split it into three questions you can test: does your version run (Test 1), does the report match what the learner did (Tests 2 and 5), and does a learner come back to the right screen (Test 3)?
Are all LMSs SCORM compliant?
Many list it, and importing a package is the easy part. What separates platforms is what happens after the import: which versions run, whether the record matches what the learner did, and whether a learner can pick up where they stopped. Playing packages is only one piece of what an LMS does, so test it alongside the rest.
Is there an official list of SCORM certified LMSs?
No. Certification belonged to ADL, which tested products and published the ones that passed, and ADL has been shut down. A “SCORM certified” badge today is the vendor’s own assessment.
Do the same tests work for AICC or xAPI?
Test 2 carries over to an AICC package. Test 5 works differently, because AICC reports from the server hosting the content rather than through the learner’s browser, which is the main difference between AICC and SCORM. xAPI does a different job: it records learning outside a course and needs somewhere to store the records, which the xAPI vs SCORM comparison covers.
Can I test SCORM compliance without buying the LMS?
Yes, if the trial lets you upload. When a free trial only shows the vendor’s sample courses, ask for a screen-shared demo instead: the vendor uploads your packages, you give the quiz answers from your answer key, and they open the admin report while you watch. If a vendor won’t do either before you sign, you’ll be running these tests after the contract.
Sources
- ADL Initiative: the archived repositories, including the SCORM 2004 4th Edition conformance test suite
- Moodle documentation: the SCORM FAQ and the SCORM settings page
- Moodle 4.5 SCORM module source code:
scormlib.phpfor the recognized version strings and the SCORM 1.2 default,scorm_12.jsfor the SCORM 1.2 status values and the status fill-in, plus the module’s data-model limits and import error messages - The API discovery routine shipped inside standard SCORM sample packages: the seven-frame search and the opener-window fallback
- Cornerstone: developer documentation for the Course Asset Connector
- Mini Course Generator’s SCORM Upload Block



