To upload a SCORM package to any LMS, open the zip before you upload it. imsmanifest.xml has to sit at the top of the zip, not inside a folder, and its <schemaversion>, the field that declares the version, should name one your LMS accepts. Then follow 5 steps this guide assembles from the Moodle, Canvas, TalentLMS, Docebo and Blackboard help pages: find the SCORM item, upload the zip, set the completion and score rules, launch it once as a test learner, and read the record.
When something goes wrong, the Moodle, TalentLMS and Docebo help pages read for this guide each touch on 3 causes: the manifest in a subfolder, a version the LMS does not take, and a completion rule the package never meets. If your LMS is Moodle, Canvas or TalentLMS, its own guide has the exact clicks.
What is a SCORM package, and what does the LMS do with it?
A SCORM package is a zip of HTML, media and JavaScript, plus the imsmanifest.xml manifest that describes it and the API calls the course uses to talk to the LMS. SCORM.com calls the zip a "package interchange file", or PIF; every file the course needs should be inside it and listed in the manifest.
ADL, which created SCORM, defines the data model and API the course uses to talk to a run-time environment "commonly provided by a Learning Management System". Moodle's FAQ says "Moodle does not generate scorm content." If your LMS shows no completion, first ask whether the package ever sent one.
What should you check in the zip before you upload it?
Check 5 things, in this order.
Once the content has been represented in XML, it is saved into a file called “imsmanifest.xml”. The manifest file must always exist at the root of the content.
SCORM.com (Rustici Software), "SCORM Content Packaging"
- The manifest at the root. Open the zip without extracting it: it should show imsmanifest.xml and the course files, not a single folder. On Linux servers the name must also be all lowercase.
- The version it declares. Open imsmanifest.xml in a text editor and find
<schemaversion>, which "Defines the specific SCORM version of this manifest". SCORM.com's sample manifests carry1.2,2004 3rd Editionand2004 4th Edition. The 1.2 sample's own comment says SCORM 1.2 has no controlled vocabulary for that value, so it can be any value. So check a second clue: the resource attribute isadlcp:scormtypein SCORM 1.2 andadlcp:scormType, capital T, in SCORM 2004. - The size. Docebo caps a SCORM package at 1024 MB. TalentLMS lists SCORM at 600MB, and also 100MB per file on the Free plan and 600MB per file on paid plans; its list has zip at 200MB too, and the page does not say which line governs a SCORM zip. Moodle has no single number: the server, PHP, the site, the course and the activity each cap it. The Canvas, Brightspace and Blackboard pages read here give no number.
- The file names. TalentLMS lists
! @ # $ %,and the hyphen as characters that can cause upload issues, and Docebo bans special characters in the package name and every file name inside it. Docebo does not define "special characters", so use only letters and numbers in both. - Anything loaded from outside. Docebo plays only packages that use HTTPS, and an HTTP reference fails with no error message in its interface.
If the version turns out to be SCORM 2004 and your LMS is Moodle or TalentLMS, stop here: SCORM 1.2 vs SCORM 2004 covers exporting again in 1.2.
How do you upload a SCORM package to an LMS?
The first 3 steps run in the same order in the Moodle, Canvas, TalentLMS, Docebo and Blackboard help pages, under different menu names. Those pages cover testing and reading the record unevenly, so steps 4 and 5 are this guide's own routine. Brightspace's page gives no click path, only that you add SCORM objects to a content module by uploading new ones.
- Find the SCORM item. SCORM Package in Moodle's activity chooser with editing turned on, the SCORM link in Canvas's Course Navigation, SCORM | xAPI | cmi5 under Learning Activities in TalentLMS, SCORM under Add training material in Docebo, SCORM package in Blackboard's Create Item panel. In Canvas, someone has to switch on the SCORM LTI at account level first. In Blackboard, your institution controls whether the SCORM Engine is enabled, and Anthology's page does not say what happens when the engine is off.
- Upload the zip as exported. Blackboard opens its settings panel only "After the file has been uploaded and checked"; Anthology's page does not say what the check covers.
- Set the completion and score rules. Several LMSs lock the grading choices: Canvas's import type "is permanent and cannot be changed in Canvas", and Blackboard's grade schema and maximum score cannot be changed after import. Docebo's warning sits after its Score calculation options: "These settings can no longer be edited after the SCORM content is completed for the first time". Docebo's page does not list which settings that covers.
- Launch it once as a test learner. In Canvas, launch it in production, because SCORM "is not available in beta or test environments". In Moodle, turn on API debugging first: "Red lines in the debugging log means there was an error in the communication through the API".
- Read the record. Moodle teachers get a Reports tab. In TalentLMS an empty Analysis tab on the SCORM report "usually indicates that the SCORM package is not sending interaction or scoring data correctly".
Which LMS takes what, and where is the upload?
Every LMS here accepts SCORM 1.2; they split on SCORM 2004 and on the setting that catches people out. Each row comes from the vendor's own help page, read on 9 October 2026.

| LMS | Where the upload lives | Version it accepts | The one quirk | The post to read | Source |
|---|---|---|---|---|---|
| Moodle | Course with editing on, activity chooser, SCORM Package, Package section | SCORM 1.2; SCORM 2004 is not supported, though some packages "may appear to work" | A package that sends only a status gives "no numerical score" under Highest grade, Average grade or Sum grade | Moodle guide | Activity page; FAQ |
| Canvas | Course Navigation, SCORM, Upload, Choose Import Type | SCORM 1.2; SCORM 2004 2nd, 3rd and 4th Edition | The import type is permanent, and an ungraded import is not added to the gradebook | Canvas guide | Assignment guide |
| TalentLMS | Course, Add, Learning Activities, SCORM | xAPI | cmi5 | SCORM 1.2 only; not SCORM 2004 or Multi-SCO packages | A SCORM score that reports correctly can still miss the course score until Score calculation is set to Units I choose | TalentLMS guide | Protocols guide; completion article; scoring article |
| Docebo | Course, Training material tab, Add training material, SCORM, Upload file | SCORM 1.2; SCORM 2004 3rd Edition, where the page says sequencing is not supported but offers to convert simple sequencing into prerequisites | A replacement package must have the same SCORM version as the one it replaces | Version guide | Docebo Help |
| Brightspace | A content module, by uploading new SCORM objects | SCORM 1.2 and SCORM 2004, "compliant", no edition named; the legacy Learning Repository does not support publishing SCORM 2004 directly from your computer | The new SCORM solution needs the Content Service enabled for your organization | Version guide | D2L, About SCORM |
| Blackboard | Course Content, plus, Create, SCORM package, Upload SCORM package | SCORM 1.2 and SCORM 2004, no edition list | Grade schema and maximum score cannot change after import; you delete and reimport | Version guide | Anthology Help |
| SCORM Cloud | Import a SCORM, AICC, xAPI or cmi5 package, Choose File, Import Course | SCORM 1.2 and SCORM 2004, plus AICC, xAPI and cmi5 | "Cloud does not check for strict technical conformance" | Version guide | Rustici support; test page |
If your LMS is not here, search its help center for "SCORM" and copy the sentence that names versions, with its date.
What should you check after the upload?
Check 4 things in a test learner's attempt.
- Completion. TalentLMS says many courses mark completion only on a final action (an Exit button, the final quiz or the last slide), and if that action never fires, the unit stays incomplete. In the browser console, watch for
LMSSetValue("cmi.core.lesson_status","completed")or"passed", followed byLMSCommit(). - Score. Look where your managers will read it. TalentLMS says a SCORM score can report correctly and still not appear as the course score, typically because of the course completion rules, not the SCORM file.
- The bookmark. Leave halfway, then come back to see where you land. SCORM 1.2 keeps the learner's place in cmi.core.lesson_location and SCORM 2004 in cmi.location. Docebo's page says that under the SCORM 2004 3rd Edition specification, a cmi.exit of normal, logout, time-out or an empty string ends the attempt and the learner starts again from scratch, though Docebo keeps a completed status either way.
- The record. Moodle's FAQ says to compare the debugging log with Moodle's report of the attempt. If they match and the result is still wrong, the cause is likely the SCO or the activity settings.
Then check the people side. When we uploaded a US home care course to the client's LMS, we also made sure their trainers could enroll the staff who had to take it.
If your package fails for one learner in one browser, see how to fix a SCORM package blocked in Safari or Chrome.
Why does a SCORM upload fail?
The Moodle, TalentLMS and Docebo pages read for this guide describe 3 failures, and your zip can pass the upload with the second or the third.
The manifest is inside a subfolder
Someone compresses the exported folder instead of the files inside it, and the manifest ends up "2 directories deep". TalentLMS says a package that is not zipped correctly is the most common cause of its 2 upload errors.
| LMS | What you see | Source |
|---|---|---|
| Moodle | "Incorrect file package - missing imsmanifest.xml or AICC structure", or "An imsmanifest.xml file was found but it was not in the root of your zip file, please re-package your SCORM" | Moodle 5.3 strings |
| TalentLMS | "Uploaded file has unsupported format." or "Access denied" | Error guide |
| Docebo | No error text quoted; the page says to put imsmanifest.xml in the folder root before zipping | Docebo Help |
| Canvas, Brightspace, Blackboard | The pages read for this guide quote no error text for this case | Assignment guide; About SCORM; Anthology Help |
The fix is the same in Moodle's and TalentLMS's pages: open the folder that holds imsmanifest.xml, select every file inside it, and compress the selection.
The version is one the LMS does not take
In Moodle this failure can be quiet: its FAQ says some SCORM 2004 packages "may appear to work", while bugs reported against SCORM 2004 are closed as won't fix. TalentLMS supports SCORM 1.2 files only. Docebo's page names 3rd Edition as its only SCORM 2004 edition, so a 4th Edition export sits outside what Docebo documents.
Publish your course again in a version the LMS lists. If the course needs SCORM 2004 and the LMS takes only 1.2, Rustici documents a SCORM Cloud Dispatch package that keeps the 2004 sequencing rules and tracking. TalentLMS warns that a dispatch file points to content on another server, so loading and performance depend on that server, and a broken connection can mean loading errors or incomplete tracking.
The LMS waits for something the package never sends
The upload works and the learner finishes, but the record stays empty. Moodle's Require status completes a learner who achieves "at least one of the checked statuses", so if your package reports completed and you tick only Passed, nobody completes. If Grading method is Highest grade, Average grade or Sum grade and the package reports only a status, Moodle's FAQ says "there will be no numerical score to pass to the gradebook".
On the package side, TalentLMS says some packages post results only when their pop-up window closes. Docebo asks that a package not update the platform with the completion status more than once.
How do you test your first upload end to end?
You need a zip tool, a text editor, a free SCORM Cloud trial, a test learner account and your browser's console. Plan on 1 to 2 hours, a working estimate rather than a vendor figure.
- Open the zip and check that imsmanifest.xml sits at the top, in lowercase.
- Read
<schemaversion>and match it against your LMS in the table above. - Check the size and the file names against your LMS's rules.
- Run it in SCORM Cloud. Import it, launch it in the sandbox, and note completion, pass/fail, score and time. Rustici's rule of thumb: "If your content doesn’t work in SCORM Cloud, it is probably not going to work in your LMS either."
- Upload it to your LMS, using the post for your LMS if there is one.
- Set completion and score to match what SCORM Cloud showed, before anyone completes the package.
- Launch it as your test learner and trigger every final action, the Exit button and the last quiz included.
- Leave halfway on a second visit and come back, to check the bookmark.
- Read the record in the LMS report and gradebook, and compare it with SCORM Cloud.
TalentLMS counts one stall among the most common reasons a unit stays incomplete. Your learner reaches the last slide and closes the tab, and the record says incomplete. The package was waiting for an Exit click or for its pop-up to close.
To tell a package fault from an LMS fault, run a known package: SCORM.com's Golf Examples, or those in sample SCORM packages to test an LMS.
| Task | Who can do it | Rough time |
|---|---|---|
| Zip, version, size and names (steps 1 to 3) | Whoever exported the course | 10 to 15 minutes |
| SCORM Cloud run (step 4) | The same person | 15 to 20 minutes |
| Upload and settings (steps 5 and 6) | An LMS admin or instructor | 10 to 15 minutes, plus upload time |
| Test learner, bookmark and record (steps 7 to 9) | The same, with 1 test account | 20 to 40 minutes for a short course |
Working estimates for one short package, not vendor figures.
Which SCORM upload mistakes cost the most?
- Zipping the folder instead of its contents. The upload fails in Moodle and TalentLMS.
- Locking settings before the test. The Canvas import type and Blackboard's grade schema and maximum score cannot be changed after import. Docebo warns that the settings it just described, Score calculation among them, can no longer be edited once the content is completed for the first time.
- Trusting a SCORM 2004 package that seems to work in Moodle.
- Changing the version on an update. Docebo refuses a replacement in a different SCORM version.
- Treating SCORM Cloud as your LMS. Docebo warns that checkers like SCORM Cloud implement parts of SCORM that Docebo may handle differently or not at all.
A SCORM course that won't complete? Send it to us. We fix one course free for companies, or tell you why it fails, within 48 hours. See the free SCORM fix.
Other questions about SCORM uploads
What is SCORM in an LMS?
A set of standards for packaging e-learning as a zip and for the data the course sends the LMS while it runs. The LMS plays the package and saves what it reports.
What is a SCORM compatible LMS?
In practice, one whose help pages name the SCORM versions it plays; no page read for this guide defines the term. All 6 LMSs in the table accept SCORM 1.2; which SCORM version does each LMS support covers SCORM 2004.
Can you upload the unzipped folder?
Not according to the pages read here. Moodle's package setting asks for "a ZIP file containing SCORM or AICC course definition files", Docebo says SCORM packages must be compressed zip files, and the Canvas, TalentLMS and Blackboard pages describe a zip upload. Brightspace's page does not say.
Does passing in SCORM Cloud mean the package is SCORM conformant?
No. Rustici says SCORM Cloud does not check strict technical conformance, and that the official SCORM Conformance Test Suite "is the only definitive way to prove that your content is SCORM conformant".
