---
title: "Tincanjs"
description: "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."
canonical_url: "https://scorm-tools.com/tools/tincanjs"
last_updated: "2026-10-31T10:22:02.068Z"
---

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.
