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"

  1. 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.
  2. 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 carry 1.2, 2004 3rd Edition and 2004 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 is adlcp:scormtype in SCORM 1.2 and adlcp:scormType, capital T, in SCORM 2004.
  3. 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.
  4. 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.
  5. 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.

  1. 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.
  2. 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.
  3. 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.
  4. 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".
  5. 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.

Three LMS screens with the upload slot in a different spot on each, for how to upload a SCORM package to an LMS

LMSWhere the upload livesVersion it acceptsThe one quirkThe post to readSource
MoodleCourse with editing on, activity chooser, SCORM Package, Package sectionSCORM 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 gradeMoodle guideActivity page; FAQ
CanvasCourse Navigation, SCORM, Upload, Choose Import TypeSCORM 1.2; SCORM 2004 2nd, 3rd and 4th EditionThe import type is permanent, and an ungraded import is not added to the gradebookCanvas guideAssignment guide
TalentLMSCourse, Add, Learning Activities, SCORM | xAPI | cmi5SCORM 1.2 only; not SCORM 2004 or Multi-SCO packagesA SCORM score that reports correctly can still miss the course score until Score calculation is set to Units I chooseTalentLMS guideProtocols guide; completion article; scoring article
DoceboCourse, Training material tab, Add training material, SCORM, Upload fileSCORM 1.2; SCORM 2004 3rd Edition, where the page says sequencing is not supported but offers to convert simple sequencing into prerequisitesA replacement package must have the same SCORM version as the one it replacesVersion guideDocebo Help
BrightspaceA content module, by uploading new SCORM objectsSCORM 1.2 and SCORM 2004, "compliant", no edition named; the legacy Learning Repository does not support publishing SCORM 2004 directly from your computerThe new SCORM solution needs the Content Service enabled for your organizationVersion guideD2L, About SCORM
BlackboardCourse Content, plus, Create, SCORM package, Upload SCORM packageSCORM 1.2 and SCORM 2004, no edition listGrade schema and maximum score cannot change after import; you delete and reimportVersion guideAnthology Help
SCORM CloudImport a SCORM, AICC, xAPI or cmi5 package, Choose File, Import CourseSCORM 1.2 and SCORM 2004, plus AICC, xAPI and cmi5"Cloud does not check for strict technical conformance"Version guideRustici 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 by LMSCommit().
  • 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.

LMSWhat you seeSource
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
DoceboNo error text quoted; the page says to put imsmanifest.xml in the folder root before zippingDocebo Help
Canvas, Brightspace, BlackboardThe pages read for this guide quote no error text for this caseAssignment 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.

  1. Open the zip and check that imsmanifest.xml sits at the top, in lowercase.
  2. Read <schemaversion> and match it against your LMS in the table above.
  3. Check the size and the file names against your LMS's rules.
  4. 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."
  5. Upload it to your LMS, using the post for your LMS if there is one.
  6. Set completion and score to match what SCORM Cloud showed, before anyone completes the package.
  7. Launch it as your test learner and trigger every final action, the Exit button and the last quiz included.
  8. Leave halfway on a second visit and come back, to check the bookmark.
  9. 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.

TaskWho can do itRough time
Zip, version, size and names (steps 1 to 3)Whoever exported the course10 to 15 minutes
SCORM Cloud run (step 4)The same person15 to 20 minutes
Upload and settings (steps 5 and 6)An LMS admin or instructor10 to 15 minutes, plus upload time
Test learner, bookmark and record (steps 7 to 9)The same, with 1 test account20 to 40 minutes for a short course

Working estimates for one short package, not vendor figures.

Which SCORM upload mistakes cost the most?

  1. Zipping the folder instead of its contents. The upload fails in Moodle and TalentLMS.
  2. 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.
  3. Trusting a SCORM 2004 package that seems to work in Moodle.
  4. Changing the version on an update. Docebo refuses a replacement in a different SCORM version.
  5. 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".