Skip to content

@xapi/cmi5

A typed JavaScript client that handles the cmi5 handshake for you inside a course

Maintained Last commit Checked · 24 Aug 2026

The facts

Licence
MIT — OSI approved
Pricing
Open source
Deployment
Embedded in your own application
Platforms
Library · Web
Vendor
xAPI.js

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 @xapi/cmi5, with the source of each claim and the date it was last confirmed.
Standard Supported Provenance Checked Note
SCORM 1.2 No editor-checked · 24 Aug 2026
SCORM 2004 No editor-checked · 24 Aug 2026
xAPI Yes editor-checked · 24 Aug 2026— source, opens in a new tabStatements are sent through @xapi/xapi, the same project's xAPI client. Statement shaping is cmi5-specific; arbitrary xAPI is possible via the allowed extension points.
cmi5 Yes editor-checked · 24 Aug 2026— source, opens in a new tabImplements the AU side of the cmi5 handshake: it reads the launch parameters from the URL, POSTs the fetch URL for an auth token, and emits the defined statements — Initialized, Terminated, Passed, Failed, Completed, Waived — with the required context activities and extensions. The readme states compliance with the cmi5 Quartz 1st Edition specification; the statement and verb constants match it.
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's difficulty is not the statements, it is the launch. An assignable unit is handed a set of URL parameters, has to exchange a fetch URL for an auth token, and must then send a specific sequence of statements with specific context activities and extensions or the LMS will not record the session correctly. @xapi/cmi5 does that for you: construct the class, call initialize(), and issue pass(), complete() or waive() at the right moments.

It is aimed at developers building custom or bespoke content — a JavaScript simulation, a React app, a game — that needs to run as a cmi5 AU. Strongly typed throughout, with interfaces for launch parameters, move-on conditions and performance criteria, so the compiler catches the shape errors that would otherwise appear as an LMS silently not registering completion. Four runtime dependencies, and a companion demo repository.

It will not help you author a package, validate cmi5.xml, or test without an LMS, and it does nothing for SCORM. If your content also has to run on a SCORM-only platform you will be maintaining two integration paths regardless.

Maintenance is the caveat worth sizing correctly. Twenty-three stars, five open issues, last release October 2024, last substantive commit before that. For a specification that has been stable since 2016 this is closer to "finished" than "abandoned", and the code is small enough to read in an afternoon and fork if needed. But if you need a fix, plan on making it yourself.

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