Technical guide — eLearning · SCORM · xAPI

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.2SCORM 2004xAPI (Tin Can)
LMS supportUniversal — the safe defaultVery broadBroad, but requires an LRS
TracksCompletion, score, basic progress+ sequencing, detailed statusAny event, as "actor–verb–object" statements
RunsIn the LMS browser sessionIn the LMS browser sessionAnywhere — browser, mobile app, VR headset
Fit for 3D simulationsCompliance layerCompliance layerRich 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.

Unity (C#) → .jslib interop → SCORM JS bridge → LMS SCORM API
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

  1. 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.
  2. 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.
  3. Add the SCORM JavaScript bridgeWire the API discovery, initialise/terminate calls, and the C# ↔ JavaScript functions for status, score and suspend data.
  4. Write the imsmanifest.xmlDeclare the SCORM version, launch file and resource list. Small file, strict syntax — most "package won't upload" errors live here.
  5. 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.
  6. 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?
No — Unity has no native SCORM export. Unity exports a WebGL build (HTML, JavaScript and WebAssembly files), and SCORM compliance is added around it: an imsmanifest.xml describing the package, and a JavaScript bridge that connects the Unity build to the LMS through the SCORM API. This wrapping step is standard practice and, done correctly, makes the Unity content indistinguishable from any other SCORM course from the LMS's point of view.
Which LMS platforms support SCORM and xAPI?
Virtually all mainstream LMS platforms support SCORM 1.2 and SCORM 2004, including Moodle, SAP SuccessFactors, Cornerstone OnDemand, Docebo, TalentLMS, Absorb, LearnUpon and 360Learning. xAPI (Tin Can) support is also widespread but usually requires a Learning Record Store (LRS), either built into the LMS or external. When in doubt, SCORM 1.2 remains the safest common denominator.
Should I choose SCORM 1.2, SCORM 2004 or xAPI?
SCORM 1.2 has the broadest compatibility and covers completion, score and basic progress — enough for most corporate training. SCORM 2004 adds sequencing rules and more detailed status reporting. xAPI tracks granular events (every interaction inside a 3D simulation, for example) and works outside the browser, but needs an LRS. A common pattern for interactive 3D content is SCORM for LMS compliance plus xAPI statements for rich analytics.
How big is a Unity WebGL SCORM package, and does size matter?
A well-optimised Unity WebGL build for training content typically compresses to tens of megabytes — heavier than a slide course but well within what LMS platforms handle. What matters more is loading strategy: compression (Brotli/gzip), texture optimisation and asset streaming keep the first load acceptable. Some LMSs cap upload size, in which case the package can load heavy assets from an external CDN while remaining SCORM-compliant.
Does a SCORM-packaged Unity course track scores and completion?
Yes. The JavaScript bridge exposes the SCORM API to the Unity build, so the simulation can set completion status, report a score, save progress (suspend data) and resume where the learner left off. Anything measurable inside the simulation — errors made, time on task, procedure steps completed — can be mapped to SCORM fields or emitted as xAPI statements.

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 →

Related