Unity WebGL and SCORM: how to package interactive 3D content for your LMS
Unity does not export SCORM natively — but a Unity WebGL build can be wrapped into a fully SCORM-compliant package that launches, tracks and scores in any standard LMS. Here is how the pieces fit together.
What is SCORM (and why it still matters)
SCORM (Sharable Content Object Reference Model) is the technical standard that lets eLearning content and Learning Management Systems work together: a SCORM package is a ZIP file containing the course files plus a manifest (imsmanifest.xml) that tells any compliant LMS how to launch the content and how to receive tracking data such as completion, score and progress. Because the standard is universal, a SCORM package built once runs on Moodle, SAP SuccessFactors, Docebo, Cornerstone and virtually every other LMS without modification.
SCORM dates back to the early 2000s and has a more modern successor in xAPI — yet it remains the default currency of corporate training, because it is the one format every LMS accepts. If you deliver training to companies, "is it SCORM compliant?" is usually the first technical question you will be asked. The practical answer for interactive 3D content is yes — with a wrapping step Unity does not provide out of the box.
SCORM 1.2 vs SCORM 2004 vs xAPI
| SCORM 1.2 | SCORM 2004 | xAPI (Tin Can) | |
|---|---|---|---|
| LMS support | Universal — the safe default | Very broad | Broad, but requires an LRS |
| Tracks | Completion, score, basic progress | + sequencing, detailed status | Any event, as "actor–verb–object" statements |
| Runs | In the LMS browser session | In the LMS browser session | Anywhere — browser, mobile app, VR headset |
| Fit for 3D simulations | Compliance layer | Compliance layer | Rich analytics: every interaction can be logged |
For interactive 3D training the pragmatic pattern is a combination: SCORM for compatibility (so the course runs in the client's LMS with zero friction) and, where deeper analytics are wanted, xAPI statements for granular tracking — which procedure steps a trainee completed, which errors they made, how long each task took.
How Unity WebGL fits inside a SCORM package
A Unity WebGL export produces a self-contained web application: an index.html, a JavaScript loader, and compressed WebAssembly and data files. None of that knows anything about SCORM. Compliance is added around the build with two components:
1. The manifest. An imsmanifest.xml at the root of the ZIP declares the package (title, SCORM version, launch file, resources). This is what the LMS reads at upload time.
2. The JavaScript bridge. A wrapper page (or the Unity template itself) locates the SCORM API that the LMS injects into the page hierarchy, initialises the session, and exposes simple functions the Unity build can call. Unity's WebGL builds communicate with page JavaScript through its interop layer (.jslib plugins), so calls made inside C# — "set score to 87", "mark complete", "save this suspend data" — travel from the simulation to the bridge to the LMS.
cmi.core.lesson_status · cmi.core.score.raw · cmi.suspend_data
Done correctly, the LMS sees a normal SCORM course; the learner sees a real-time 3D application. The heavy lifting is invisible to both.
How to create a SCORM package from a Unity build
- Design the tracking model firstDecide what the LMS must know: completion rule, pass score, resumable progress. This drives everything else — retrofitting tracking after development is the expensive way round.
- Export the Unity WebGL buildOptimised for the web: Brotli compression, texture atlases, asset streaming where the project is heavy. Load time is a training-completion factor, not just a technical nicety.
- Add the SCORM JavaScript bridgeWire the API discovery, initialise/terminate calls, and the C# ↔ JavaScript functions for status, score and suspend data.
- Write the imsmanifest.xmlDeclare the SCORM version, launch file and resource list. Small file, strict syntax — most "package won't upload" errors live here.
- Zip and validateManifest at the root of the ZIP (not inside a folder). Test in a SCORM test harness before touching the client's LMS.
- Test on the target LMSReal upload, real launch, real completion run. LMSs differ in the details — popup vs embedded launch, size caps, timeout behaviour — and this is where those differences surface.
Which LMS platforms support SCORM and xAPI?
SCORM 1.2 and 2004 are supported by essentially every mainstream LMS: Moodle, SAP SuccessFactors, Cornerstone OnDemand, Docebo, TalentLMS, Absorb LMS, LearnUpon, 360Learning and the long tail of corporate platforms. xAPI support is also common, but statements need a Learning Record Store (LRS) to land in — some LMSs include one, others connect to an external LRS. If you are distributing one package to many clients with unknown platforms, SCORM 1.2 is the lowest common denominator that simply works everywhere.
Frequently asked questions
Can Unity export SCORM packages directly?
Which LMS platforms support SCORM and xAPI?
Should I choose SCORM 1.2, SCORM 2004 or xAPI?
How big is a Unity WebGL SCORM package, and does size matter?
Does a SCORM-packaged Unity course track scores and completion?
Want this built for your training content?
We develop custom 3D eLearning in Unity and WebGL and deliver it as SCORM or xAPI packages, tested on your LMS.
Custom eLearning development →