Admin GuidesSCORM Content

SCORM Content

Who this guide is for: Administrators and instructors who upload and manage eLearning content packages in EmbayLMS.


Overview

SCORM is the most widely used format for eLearning content. It packages an interactive course — videos, slides, quizzes, and more — into a single .zip file that any SCORM-compatible LMS can run. EmbayLMS plays SCORM 1.2 and SCORM 2004 (2nd, 3rd and 4th edition) packages. SCORM 1.1 is not supported: a package is recognized by its CSF.xml so it can be identified, but it is not guaranteed to play. Re-export it as SCORM 1.2 or 2004. cmi5 and AICC packages use the same .zip upload and have their own guides (see §6). You do not need to understand the technical details to upload and manage content — this guide walks you through every step.


Prerequisites

  • The Owner, Admin, or Instructor role. An instructor can upload packages only to the courses they are assigned to, and cannot publish.
  • A SCORM package in .zip format (exported from an authoring tool such as Articulate Storyline, Rise, Adobe Captivate, or iSpring)

1 — What Is SCORM? (Plain Language)

When a subject matter expert creates an eLearning course using an authoring tool, they export it as a SCORM package — a .zip file containing all the course files and a manifest that tells the LMS how to launch the course and record what the learner does (completion, score, time spent).

EmbayLMS acts as the SCORM runtime. When a learner opens a SCORM module:

  1. EmbayLMS plays the package inside the course player, in a sandboxed frame on the same page — not in a pop-up or a new tab.
  2. The package reports completion, score, and progress back to EmbayLMS as the learner works through it.
  3. EmbayLMS stores this data and marks the module complete when the package reports the right status (see §4).

SCORM 1.2 and SCORM 2004 are the two common versions. Both are supported. Your authoring tool will specify which version it exported; EmbayLMS reads it from the package’s manifest, so there is nothing to select.


2 — Uploading a SCORM Package

A SCORM package lives in a module of type SCORM Package. You can only upload while the course is editable: a course that has never been published, or a published course with a new version open (see §7).

  1. Go to Courses, open the course, and select the Modules tab.
  2. If the course is published, click Start new version first. The module editor stays read-only until a draft is open.
  3. Click Add Module, enter a title, choose SCORM Package as the type, and click Add Module.
  4. On the new module’s row, click Upload and select your .zip file (maximum size: 500 MB).
  5. The upload progress shows on the row. When it finishes, the file name appears on the module with its malware-scan status. If the package could never play, the upload is refused instead and the reason shows above the module list (see §3).
  6. Optionally, click the module’s edit button to set its completion options (see §4), then click Save.
  7. Use Preview to play the package exactly as a learner will (nothing is recorded — see Preview a course as a learner).
  8. Click Publish (a course that has never been published) or Publish new version (a published course). Learners see the package only after that.

The package is stored in EmbayLMS’s encrypted storage and unpacked on upload, whatever its number of files — large exports from Storyline, Rise or Captivate with thousands of files unpack like any other. A very large package can take a minute or two to finish. Learners play it in the browser — they never download the .zip.

Many packages at once: to load a whole folder of packages exported from a previous LMS, use the bulk re-upload under Settings → Data Management → SCORM Packages — see SCORM package bulk re-upload.


3 — Upload Validation

EmbayLMS checks a package when you upload it, in the same request — there is no separate validation step and nothing to re-run. A package that could never play is refused: nothing is added to the module, the uploaded file is discarded, and the reason is shown in your language so you can fix the package and upload it again.

What is checked

CheckWhat happens
File type and sizeOnly a .zip is offered for a SCORM Package module. A file over 500 MB is refused.
Plan storageAn upload that would take your organization over its plan’s storage limit is refused.
Package formatEmbayLMS looks for, in order, a cmi5 cmi5.xml, AICC descriptors (.crs + .au), a SCORM imsmanifest.xml, then a SCORM 1.1 CSF.xml, which is only identified: SCORM 1.1 is not supported. A cmi5 or AICC zip uploaded to a SCORM Package module is accepted and played as cmi5 or AICC. A zip with none of them is refused.
Launch fileThe launch page is read from the manifest and must be inside the zip at the path the manifest gives. If it is not, the upload is refused.
Unsafe structureA zip whose paths escape its own folder, with more than 10,000 files, or larger than 500 MB once uncompressed is refused.
File types inside the zipOnly web content (HTML, scripts, styles, images, audio, video, fonts, PDF, XML and text files) is unpacked. Anything else, such as .exe, .bat or .sh files, is skipped; the rest of the package is still unpacked.
Number of filesNo limit below the 10,000-file safety bound.
MalwareEvery upload gets a scan status, shown on the module (for example Not scanned or Clean).

When an upload is refused

EmbayLMS refuses a package it could never play, and says why. Nothing is added to the module, so learners never meet a module that does not play. The reasons:

What the message saysCauseFix
No launch file was foundThe zip has no imsmanifest.xml, cmi5.xml or AICC descriptors at its root — most often because the export folder itself was zipped, or the zip holds other zipsRe-export from your authoring tool as SCORM 1.2 or SCORM 2004, and zip the contents of the export folder, not the folder itself
The manifest names a launch file that is not in the zipThe launch page listed in the manifest is missing, or the manifest sits in a subfolder while its pages are referenced from the rootRe-export; confirm the export settings in your authoring tool point to the correct launch file, and that imsmanifest.xml is at the root of the zip
The file could not be opened as a zip archiveThe file is corrupted or is not a zipRe-download or re-export the package and upload it again
The package was refused for safetyA path escapes the package’s folder, or it has more than 10,000 files, or more than 500 MB once unpackedRe-export the package; reduce embedded video quality, or split the content into several modules
The package could not be storedA temporary storage problem on our side; the package itself is fineUpload it again. Nothing was saved, so there is nothing to clean up

A cmi5 or AICC module also refuses a zip that is not cmi5 or AICC — see §6.

Always use Preview after uploading: it is how you confirm the package behaves as you expect before learners meet it.


4 — SCORM Completion Settings

A SCORM module completes on the status the package itself reports. There is one setting to choose, on the module’s edit form: Require a passing result to complete this module. It is off by default. The module’s Required to complete the course box decides, as for every module type, whether the course needs it.

4.1 SCORM 1.2 completion

SCORM 1.2 uses the cmi.core.lesson_status data element.

Require a passing result to complete this moduleThe module completes when lesson_status is
Off (default)completed or passed
Onpassed only

4.2 SCORM 2004 completion

SCORM 2004 uses two separate elements:

  • cmi.completion_status — tracks whether the learner has finished the content (completed / incomplete).
  • cmi.success_status — tracks whether the learner passed (passed / failed / unknown).
Require a passing result to complete this moduleThe module completes when
Off (default)completion_status = completed or success_status = passed — so a package that reports completed and failed still completes the module
Onsuccess_status = passed only

Turn the setting on for a module whose result matters, such as a certification test or a compliance course. A module with the setting on shows a Pass required badge in the module list.

4.3 Score threshold

EmbayLMS has no separate passing-score setting for SCORM modules. A package that assesses the learner decides passed or failed itself (from the mastery score set in your authoring tool) and reports it; EmbayLMS stores the score it reports and applies the rules above. To require a passing result, turn on Require a passing result to complete this module.

4.4 Packages that report no status at all

The SCORM standard only requires a course to open and close the connection (LMSInitialize and LMSFinish). Some packages — including the reference samples that ship with authoring tools, and simple single-page content — do exactly that and never report a lesson_status at all.

EmbayLMS treats those as completed when the learner closes the content, which is how a package with no mastery score is normally handled. Nothing to configure.

This applies only when the course reported neither a status nor a score, and only while Require a passing result to complete this module is off. It never overrides what a course did report:

What the course reported when the learner exitsResult
Nothing at allModule marked complete (left incomplete when a passing result is required)
not attempted / unknown only (the pre-start values)Module marked complete (left incomplete when a passing result is required)
incompleteLeft incomplete — the learner can resume
failed (SCORM 1.2 lesson_status)Left incomplete
A score, but no statusLeft incomplete — the course is assessing the learner

4.5 Multi-SCO packages (table of contents)

Some SCORM packages contain more than one learning object (SCO) — for example a course split into chapters, each with its own pages and quiz. EmbayLMS reads the package’s structure from its manifest automatically:

  • One SCO — the course opens directly in the player, as usual.
  • More than one SCO — the player shows a Course contents panel beside the content. Learners click a chapter to open it; each chapter tracks its own progress, score, and resume position independently.

Completion rules for multi-SCO packages:

RuleBehaviour
Module completionThe module is complete when every SCO in the package is complete (each by its own §4.1–§4.4 rules)
Chapter statusThe panel shows each SCO as Not started, In progress, or Completed
ResumeEach SCO resumes at its own saved position
Non-tracked pagesManifest entries typed as plain content (asset) are viewable but not required for completion
Hidden entriesA manifest item marked isvisible="false" is hidden from the table of contents, but its children still appear — authoring tools often use an invisible wrapper item around the real chapters (LMS-754)

No configuration is required — the structure comes from the package’s imsmanifest.xml. Packages uploaded before this feature gain the table of contents automatically the first time a learner opens them.


5 — Suspend Data and Resumption

Nothing to configure. EmbayLMS saves what a SCORM package sends on every commit — it never waits for the package to close.

  • When a learner closes the course and returns later, EmbayLMS restores the saved state (cmi.suspend_data, the bookmark and any other values the package committed), so a package that stores its position resumes where the learner left off.
  • This applies to SCORM 1.2 and SCORM 2004.
  • The saved state lives on EmbayLMS, not in the browser, so resume works across devices — a learner can start on their desktop and continue on another device.
  • The saved state follows the package, not the course version. When you publish a new version and the package is unchanged, a learner who was partway through it resumes where they left off. When the new version carries a new upload of the package, they start that new package from the beginning — saved positions never carry over to different content (see §7).

Note for admins: If a learner reports losing their progress, look at what the package actually saved in the SCORM attempts inspector (§7b) before changing anything.


6 — xAPI and cmi5 Content

cmi5 and AICC have their own module types — cmi5 Package (xAPI) and AICC Package in the type picker. They are uploaded the same way as SCORM (step 4 of §2), but they check the zip on upload and refuse one that is not what the module expects, naming the missing or unreadable descriptor. How each one launches and completes is in the cmi5 guide and the AICC guide. A cmi5 or AICC zip dropped on a SCORM Package module is still accepted and played as cmi5 or AICC, but without those checks.

A plain xAPI (Tin Can) package — one with a tincan.xml and no cmi5.xml — is not recognised as its own format. Export the content as cmi5 or as SCORM instead.

To send learning records to an external LRS as well, see the xAPI LRS integration.


7 — Content Versioning

When a course needs to be updated (regulatory content refreshed, branding changed, bugs fixed), you replace the package inside a new version of the course. There is no separate package-version setting: SCORM packages follow the course’s own versioning, described in full in Course Versioning & Forced Re-enrollment.

7.1 Replace a package

  1. Open the course and click Start new version. This opens a draft that copies the current modules and their packages.
  2. On the Modules tab, click Upload on the SCORM module and select the new .zip. The most recent upload is the one the module plays; the file name on the row changes to the new package.
  3. Check it with Preview.
  4. Click Publish new version. Until you do, learners keep playing the current package. To abandon the change instead, click Discard draft.

7.2 What happens to learners when you publish

Learner stateResult
In progressMoved onto the new version. A SCORM module they had already completed stays completed. A SCORM module they were partway through resumes where they left off when its package is unchanged in the new version; if you uploaded a new package to that module, they start the new package from the beginning, because a saved position only applies to the package that saved it
Completed the courseNothing changes — their completion and certificate stand, unless the course requires everyone to retake it when a new version is published (forced re-enrollment)
Not startedGets the new version

7.3 View version history

The course’s Versions tab lists every version of the course: when it was published and by whom, and how many modules it has. Earlier attempts and their CMI data stay on record. See The Versions tab.


7b — Inspecting a learner’s attempts (support)

When a learner reports a stuck or “not completing” SCORM module, look at what the package actually recorded before changing anything:

  1. Open the course, go to the Enrollments tab, and click SCORM attempts on the learner’s row (it shows only on courses with a SCORM module, to holders of Manage SCORM — Owner, Admin, Instructor on their courses; Embay support sees it through a support-access session).
  2. The inspector lists every attempt per module and, for multi-SCO packages, per unit: attempt number and SCORM version, status, score, suspend-data size, last commit.
  3. Show CMI expands the attempt’s stored key/value set (cmi.core.lesson_status, cmi.suspend_data, …), read-only — what the SCO last sent us, exactly as stored.
  4. Reset attempt (on an unfinished attempt) creates a fresh attempt with the next number after you type a reason. Nothing is deleted: the old attempt and its CMI values stay on record; the learner’s next launch starts on the clean attempt.
SituationWhat the inspector showsWhat to do
Learner sees “Resume” but the package restartsSuspend data is 0 bytesThe SCO never committed cmi.suspend_data — a package/authoring-tool issue, not the LMS
Progress bar stuck below 100 %lesson_status / completion_status never reached completed / passedCheck the completion settings (§4) and the package’s own status logic
Corrupt or oversized suspend data locks the SCOSuspend data in the KB range, SCO errors on launchReset attempt with a reason; the learner starts over on that unit

Resets are audit-logged with actor, attempt numbers, statuses and the reason. CMI values are never written to logs.


8 — Troubleshooting

Content does not launch (blank frame or loading spinner)

  1. Open the module with Preview. If it is blank for you too, check the browser console for a missing file, then upload a corrected package in a new version (§7.1). A package with no launch file, or whose launch file is not in the zip, is refused at upload — see When an upload is refused.
  2. Check the module’s scan status. Once your organization has malware scanning switched on, a package is withheld from learners until its scan comes back clean.
  3. If the package uses Flash (very old SCORM 1.2 content) — Flash is no longer supported in modern browsers. The content must be re-exported from the authoring tool in HTML5.
  4. If the player shows its own loading error, the learner can click Try again; a learner whose sign-in has expired must sign in again, because the package loads under their EmbayLMS session.

Content launches but completion is not recording

  1. Check whether Require a passing result to complete this module is on (the module shows Pass required). With it on, a package that reports completed but not passed never completes the module (§4).
  2. Confirm the learner is completing the full course — some authoring tools only set lesson_status = completed on the final slide.
  3. Open SCORM attempts for the learner (§7b) and use Show CMI to see every value the package sent, including lesson_status, completion_status and success_status, and the time of the last commit.
  4. If Require a passing result to complete this module is on and the package reports failed, the learner must pass the assessment inside the content before the module completes. With it off, a SCORM 2004 package that reports completed still completes the module even when the result is failed (§4). A SCORM 1.2 package that reports failed never completes the module, whichever way the setting is.

Learner lost their progress after returning to the course

  1. Open SCORM attempts for the learner (§7b). If the suspend data is 0 bytes, the package did not save its state (some older packages only commit on LMSFinish).
  2. Check whether you published a new version of the course with a new upload of the package since the learner started: a learner who was partway through starts the new package from the beginning (§7.2). Publishing a new version with the package unchanged keeps their position.
  3. If the course author did not implement cmi.suspend_data, position cannot be restored — this is a limitation of the source content, not EmbayLMS.

The upload was refused: no launch file, or a launch file not in the zip

The .zip most likely has an extra top-level folder wrapping all content. When you unzip the file, imsmanifest.xml should be immediately visible — not inside a subfolder. Re-export from your authoring tool or manually re-zip selecting the contents of the folder (not the folder itself), then upload it again (§2, or §7.1 on a published course). The number of files is never the reason: packages with thousands of files unpack normally.


Configuration Reference

SettingLocationDescriptionDefault
Require a passing result to complete this moduleModule edit form (SCORM and AICC modules)Only a passed result completes the moduleOff
Required to complete the courseModule edit formWhether the course needs this module to completeOn
Max file sizePlatform-wideMaximum .zip upload size, and maximum uncompressed size500 MB
Max files in a packagePlatform-wideA package with more files is refused for safety10,000
Supported formatsPlatform-wideSCORM 1.2, SCORM 2004 (2nd–4th edition), cmi5, AICC. SCORM 1.1 is not supportedAll supported formats