Skip to content

cmi5.js

Rustici's JavaScript runtime for the assignable-unit side of a cmi5 course

Stale · 38 mo Last commit Checked · 24 Aug 2026

The facts

Licence
Apache-2.0 — OSI approved
Pricing
Open source
Deployment
Embedded in your own application
Platforms
Library · Web
Vendor
Rustici Software
Headquarters
United States

Standards support

Every line says where the claim came from. We do not test conformance ourselves and we issue no badge of our own.

Standards support for cmi5.js, with the source of each claim and the date it was last confirmed.
Standard Supported Provenance Checked Note
SCORM 1.2 Not stated
SCORM 2004 Not stated
xAPI Yes editor-checked · 24 Aug 2026— source, opens in a new tabSends X-Experience-API-Version 1.0.3 on every request. It talks to an LRS only through the cmi5 statement flow, so it is not a general xAPI client.
cmi5 Yes editor-checked · 24 Aug 2026— source, opens in a new tabImplements the AU side: parses the launch query string, fetches LMS LaunchData and the learner preferences state, and sends the Initialized, Completed, Passed, Failed and Terminated statements with the cmi5 moveOn context category and masteryScore extension. Read in source, August 2026.
AICC Not stated
LTI Not stated
Claimed
— the vendor states it. We have not confirmed it.
Checked
— an editor confirmed it on the date shown.
Verified
— an official registry lists it, and we link to the entry.

Editor's notes

cmi5.js is the small, specific piece of the cmi5 puzzle that content developers actually need. When an LMS launches an assignable unit it passes an endpoint, an auth token, an activity ID, a registration and a fetch URL on the query string; the AU then has to exchange the fetch URL for credentials, retrieve LMS LaunchData, respect the launch mode, and emit a precisely shaped sequence of statements ending in Terminated. This library does all of that behind an API of a dozen methods.

The details it handles are exactly the ones people get wrong by hand: refusing to send Completed, Passed or Failed statements outside Normal launch mode, attaching the moveon context category, carrying masteryScore as the documented extension, and merging the LMS-supplied context template into every statement.

It is published by Rustici, who wrote much of cmi5, and it is Apache-2.0. It has not been touched since July 2023, sitting at version 3.2.0 with six stars — a low count for a library published by the specification's own authors. Nothing has broken — the specification has not moved and the code has no runtime dependencies — but nothing will be fixed either, and it ships as a webpack bundle with no type definitions, which is friction in a TypeScript codebase.

Reasonable to use today. Read it before you do, and expect to maintain your own copy.

Alternatives to cmi5.js

Chosen by hand because they solve the same problem, not because they share a keyword.

CATAPULT
ADL's cmi5 player, content test suite and LMS test suite in one repository

Listed on scorm-tools.com

Maintainers and vendors are welcome to show the listing badge in a README or on a product page. It is free, it does not require a claim, and there is nothing to buy.

Get the embed code