Skip to content

“imsmanifest.xml not found” or “not a valid SCORM package”: fix the zip

Updated 16 October 2026

Quick fix

The LMS looks for imsmanifest.xml at the very top of the zip and didn't find it there.

  • Most often, it is inside an extra folder. Zip the contents of the folder, not the folder, or upload the tool's own zip unchanged. Steps.
  • A Storyline zip with story.html and no manifest is a web publish: publish for an LMS. How.
  • Otherwise: a renamed or broken manifest, two courses in one zip, or a version or size your LMS refuses. Details.

Drop the refused zip into Alder (free, nothing is uploaded). It finds the manifest even inside a folder and names the folder.

The course is inside an extra folder

Most LMSs reject the upload; the rest import it but can't launch it. It happens when you zip the output folder yourself instead of the files in it. Any files that sit next to that folder in the zip are not part of the course either.

  1. Zip the contents, not the folder

    Unzip the package and open the course folder. Select everything inside it (imsmanifest.xml and all the other files and folders) and zip those items. The new zip has the manifest at the top.

  2. Or upload the tool’s own zip, unchanged

    In Storyline, publish with Publish → LMS / LRS and click “Zip” in the window that opens when publishing finishes. In Rise, Publish → LMS downloads a zip that is already laid out correctly: upload it without unzipping and re-zipping it. In Captivate, upload the zip Captivate makes when you publish for an LMS.

  3. Or let Alder rebuild the zip

    On the STRUCT-001 card, the fix “Move the course to the top of the zip” rebuilds the zip starting at the course folder, and leaves out anything outside it. Applying and previewing it is free; downloading the rebuilt zip needs Pro. The free route is the first two steps above.

It is a web publish, or there is no course file

A Storyline zip with story.html and no imsmanifest.xml came from Publish → Web, which is meant for a web server. There is no manifest to find. The same goes for a zip with no imsmanifest.xml (SCORM), tincan.xml (xAPI), cmi5.xml (cmi5) or AICC course file anywhere: it was not published for an LMS.

  1. Publish for an LMS

    Choose SCORM 1.2 or SCORM 2004 (or xAPI or cmi5 if your LMS uses them) when you publish. In Storyline that means Publish → LMS / LRS instead of Web.

Other causes

  • More than one course is in the zip. Two manifests in different folders, and none at the top: the LMS can't tell which one is the course.
  • The manifest was renamed or edited by hand. LMSs look for the exact lowercase name, and most run on servers where letter case matters, so IMSManifest.xml is not found. A hand edit that breaks the XML is just as bad: LMSs read the manifest strictly, and one broken tag is enough to fail the upload.
  • Your LMS doesn't accept what is inside. Some LMSs refuse a SCORM version or a size. TalentLMS says it supports SCORM 1.2 only, with one SCO (one tracked part) per package. Docebo's maximum is 1,024 MB. Many LMSs refuse packages over about 250 MB, and uploads that big can time out. A few strict LMSs also reject the hidden __MACOSX folder a Mac adds when you zip from Finder.

Check the zip before you upload it again (free)

Upload refused? Check your course for this. Alder puts the matching problems first.

  1. Drop the refused zip into Alder

    Open Alder and drop the exact zip the LMS refused. It is read in your browser; nothing is uploaded. If the manifest is inside a folder, Alder finds it there and keeps checking, so you also learn about any other problem in the same pass.

  2. Read the answer at the top

    An extra folder shows as “The course is inside an extra folder in the zip” (STRUCT-001), with the folder's name. A web publish or a missing manifest shows as STRUCT-002, which says what Alder found instead. A damaged manifest shows as MANIFEST-001, with the line that broke.

  3. No problem found? Open the checks that passed

    The list under “checks passed” confirms the zip layout: the course files are at the top of the zip, and the zip has the file LMSs use to recognize a course. When STRUCT-001 and STRUCT-002 are in the passed list, upload it to your LMS.

    Alder's list of 14 checks passed for its sample course, including 'The course files are at the top of the zip, where LMSs look' (STRUCT-001) and 'The zip has the file LMSs use to recognize a course' (STRUCT-002).
    A zip laid out the way LMSs expect: Alder's sample course.
  4. Choose your LMS under “Uploading to”

    Alder then checks that LMS's documented limits. Every problem that would stop the upload is shown free, including the TalentLMS and Docebo ones.

LMS notes

What the LMS is looking for

A SCORM package is a zip with one special file in it: imsmanifest.xml, the manifest. It tells the LMS that the zip is a course, what it is called and which page to open first. LMSs only look for it at the top of the zip, not in folders inside it. If it isn't there, the upload fails with a message such as “imsmanifest.xml not found”, “not a valid SCORM package” or “invalid SCORM file”. TalentLMS's help article on this error describes the most common case: the published folder was zipped, so the manifest ends up one level down.

A zip the LMS accepts, and one it rejectsIn the zip an LMS accepts, imsmanifest.xml sits at the top, next to index_lms.html and the course folders. In the zip it rejects, the same files are inside an extra folder called My course, so imsmanifest.xml is not at the top and the LMS says the package is not valid.THE LMS ACCEPTS ITcourse.zipimsmanifest.xmlindex_lms.htmlstory_content/ …Manifest at the topTHE LMS REJECTS ITcourse.zipMy course/imsmanifest.xmlindex_lms.htmlstory_content/ …“Not a valid package”Fix: zip what is inside the folder, not the folder.
The same files, zipped two ways. Only the first has the manifest where an LMS looks.

Still not working?