Skip to content

TinCanJS

Rustici's original JavaScript xAPI library — still the most-linked, unchanged since 2016

Stale · 35 mo Last commit Checked · 24 Aug 2026

The facts

Licence
Apache-2.0 — OSI approved
Deployment
Embedded in your own application
Platforms
Library · Web

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 TinCanJS, 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 tabTinCan.versions() returns 1.0.2, 1.0.1, 1.0.0, 0.95 and 0.9. There is no 1.0.3 and no IEEE 9274.1.1 (xAPI 2.0) support.
cmi5 No editor-checked · 24 Aug 2026It is an LRS client only — no cmi5 launch parameters, no AU lifecycle, no course structure handling.
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

TinCanJS is the library most xAPI tutorials still import. Rustici Software wrote it alongside the specification itself, and it does the LRS-client job properly: statement, actor, verb, activity and result objects with sensible constructors, synchronous and asynchronous calls, state and activity-profile documents, IE-era cross-origin fallbacks, and multipart attachment support that works end to end in Node and modern browsers.

It is also finished, in the unhappy sense. The last commit on the default branch is from September 2016, matching the final npm release, 0.50.0. The version list in the source stops at xAPI 1.0.2 — before 1.0.3, and well before the IEEE 9274.1.1 revision — so a statement the newer specification allows but 1.0.2 does not is beyond it. Twenty-eight issues are open, the oldest from 2012. The repository is not archived, which is arguably the least helpful state: nothing signals to a newcomer that no fix is coming.

What it remains good for: reading, because the object model is a clear map of the specification; and maintaining existing content that already depends on it, where the risk of swapping the library exceeds the risk of leaving it.

What it is not good for: new work. Choose a library that has seen a commit since the specification last moved, and keep TinCanJS as a reference.

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