SCORM content
Import SCORM 1.2 e-learning packages, share them with learners, and track completion in CLIP Learn.
CLIP Learn can host third-party e-learning packages built to the SCORM 1.2 standard. You upload the package as a .zip, CLIP unpacks it, serves it inside a player, and records each learner's completion status, score and resume data. This page covers importing a package, what is and isn't supported, how learners launch it, and how to delete one.
The SCORM area lives at Teaching → SCORM in the trainer navigation (/faculty/scorm). Only Faculty and Admin roles can open it; everything on the page is scoped to your own client/tenant, so you only ever see your organisation's packages.
What SCORM support does and doesn't include
CLIP Learn implements a deliberately small slice of SCORM. Knowing the boundaries up front saves surprises.
SCORM 1.2 only
Only SCORM 1.2 packages are supported. SCORM 2004, xAPI (Tin Can), cmi5 and AICC packages are not recognised — a 2004 package may still import if it contains an imsmanifest.xml, but only the 1.2 runtime calls (window.API, the LMS* methods) are provided, so 2004 content that expects the API_1484_11 object will not track.
| Capability | Supported? | Detail |
|---|---|---|
| Package format | Yes | A single .zip containing imsmanifest.xml |
| Maximum upload size | Yes | 100 MB per package |
| Multiple SCOs / navigation tree | No | Only the first launchable resource is used as the entry point |
| Completion status | Yes | cmi.core.lesson_status is stored per learner |
| Score | Yes | cmi.core.score.raw, stored as a whole number 0–100 |
| Resume / bookmarking | Yes | cmi.suspend_data is stored (up to 60,000 characters) and replayed on return |
| Real learner name / id passed to content | No | The runtime always reports student_id = learner and student_name = Learner |
Other cmi.* values (interactions, objectives, time, etc.) | Partial | Content can read and write them during a session, but only status, score and suspend data are saved — everything else is lost when the tab closes |
The three tracked values
Every learner has at most one attempt record per package (it is updated in place, not appended), holding:
| Field | SCORM element | What it stores | Limits / defaults |
|---|---|---|---|
| Status | cmi.core.lesson_status | Completion state reported by the content, e.g. completed, passed, failed, incomplete | Free text, truncated to 40 characters. Defaults to not attempted |
| Score | cmi.core.score.raw | The raw score the content reports | Rounded to a whole number and clamped to the range 0–100; blank if the content never sets a score |
| Suspend data | cmi.suspend_data | The content's own bookmark/state blob, used to resume where the learner left off | Truncated to 60,000 characters |
Importing a SCORM package
/faculty/scorm)..zip files.Imported "…") with the detected title, and the new package appears in the list below. On failure a red-flag error message explains why (see the table below).What happens during import
When you upload, CLIP Learn:
- Rejects the file immediately if the declared size exceeds 100 MB.
- Opens the
.zipand looks for animsmanifest.xmlanywhere inside it. If none is found the file is rejected as "not a SCORM package". - Extracts every file to private storage under a new random package folder. If the manifest sits in a sub-folder of the zip, that sub-folder becomes the package root and files outside it are ignored. Entries with
..in their path, or absolute paths, are skipped as a safety measure. - Reads two things from the manifest:
- Title — the text of the first
<title>element. If the manifest has no usable title, the zip's filename (minus.zip) is used. Truncated to 200 characters. - Launch file — the
hrefof the first<resource>element. If none is present it falls back toindex.html. A leading./or/is stripped. Truncated to 500 characters.
- Title — the text of the first
The title is taken from the manifest, not chosen by you
There is no field to type a name during import. The package title comes straight from the SCORM manifest's <title> (or the zip filename as a fallback). If you want a specific name in the list, set it in the authoring tool before you export, or rename the .zip file itself before uploading.
Import errors and what they mean
| Message | HTTP status | Cause | Fix |
|---|---|---|---|
package too large (max 100 MB) | 413 | The upload exceeds the 100 MB ceiling | Reduce media size / split content, or compress before export |
no file | 400 | The request reached the server without a file attached | Re-select the file and try again |
not a valid .zip | 400 | The file could not be opened as a zip archive | Confirm it is a real SCORM .zip, not a renamed folder or a corrupt download |
not a SCORM package (no imsmanifest.xml) | 422 | The zip contains no imsmanifest.xml | Export as SCORM 1.2 from your authoring tool; the manifest must be inside the zip |
Forbidden | 403 | You are not signed in as Faculty or Admin | Sign in with a trainer/admin account |
no tenant | 400 | Your session isn't attached to a client/tenant | Re-open the app from the correct client context |
Import failed. | — | A network interruption or unexpected server error | Retry; if it persists, check the file size and connection |
The package list
Below the import button, packages are listed newest first. Each row shows:
| Element | What it shows |
|---|---|
| Title | The detected package title |
N learner attempt(s) | How many distinct learners have an attempt record for this package |
| Preview | Opens the package in the learner player (see below) so you can check it before sharing |
| Trash icon | Deletes the package (with confirmation) |
If you haven't imported anything yet, the list shows: "No packages imported yet — use the importer above to add your first SCORM package."
How learners launch a package
A SCORM package plays at /app/scorm/<packageId>. The Preview button on the trainer page opens exactly this URL, and it is the same player learners use.
There is no learner-facing SCORM catalogue
CLIP does not automatically list imported SCORM packages anywhere in the learner dashboard. To put a package in front of learners you share its link (the /app/scorm/… URL) — for example from a lesson, an announcement, or a message. Without a link, learners have no built-in way to discover it.
Who can open a package
| Situation | Who can launch |
|---|---|
| Package with no course link (the default) | Any signed-in user in the same client/tenant |
| Package linked to a course | Faculty/Admin always; a Candidate must be enrolled in that course, otherwise the page returns "not found" |
The course link is an optional association stored on the package. In the current importer there is no field to set it, so packages you import from this screen are not tied to a course, meaning any signed-in tenant user with the link can open them.
What the learner sees
The player page shows a Back to dashboard link, the package title, and a status line reading Status: <status> plus the score as a percentage if one has been recorded (for example Status: completed · 80%). Below that, the SCORM content runs inside a full-width embedded frame.
How progress is saved
The player provides the SCORM 1.2 runtime object (window.API) that the content calls. Progress is written back to CLIP:
- when the content calls
LMSCommit, - when it calls
LMSFinish(typically on completion/exit), and - when the learner navigates away or closes the tab (a final save is attempted).
On the learner's next visit, their saved status and score are shown, and the stored suspend data is handed back to the content so it can resume. Because the entry mode is set to resume whenever suspend data exists, well-behaved content will pick up where the learner left off. Note that only status, score and suspend data survive between sessions — any other in-content state that isn't captured in suspend data is not retained.
Deleting a package
Deletion is permanent and takes the learner data with it
Deleting a package cascades to all ScormAttempt records — every learner's status, score and resume data for that package is destroyed. There is no undo and no export beforehand. If you only want to replace the content, be aware a fresh import is a new package with a new link and zero attempts; the old attempts do not carry over.
Only Faculty and Admin can delete, and only within their own tenant — the delete action re-checks the role and confirms the package belongs to your client before removing anything.
Roles at a glance
| Action | Admin | Faculty | Candidate (learner) |
|---|---|---|---|
| Open the SCORM management page | Yes | Yes | No |
| Import a package | Yes | Yes | No |
| Preview / launch a package | Yes | Yes | Yes (if not course-locked, or enrolled if it is) |
| Have progress tracked | Yes | Yes | Yes |
| Delete a package | Yes | Yes | No |
Related
Assignments & gradebook
Set coursework, mark learner submissions with feedback and an AI-likelihood integrity check, and read or export the per-course gradebook.
Clients & the at-risk queue
The trainer dashboard for cohort health, the ranked "who needs attention" queue with WhatsApp nudges, corporate client management, and each learner's full journey.