Update: The Output of Project Tin Can is Experience API.

next generation scorm evolution project tin can

Ready to really dive in?
View the full
Tin Can API spec.

View the Tin Can API
“quick start” guide.

Tracking Offline/Long-Running Content

scorm tin can disconnected long running contentMost previous e-learning specs require a constant connection to track content. Content can be suspended and resumed later, but the content can’t be experienced offline while it’s suspended. An LMS can provide an offline version of its API so a user can experience content offline, but it requires extra work for the LMS and not every LMS offers this feature.

LETSI RTWS gets around this limitation by making it possible to create a proxy for the content to communicate with, and the proxy can communicate with the LMS. It’s an elegant solution, but it does have one slight limitation — content has to be launched in a connected environment before it can be taken offline.

The work that we did with the Tin Can API in this area was based directly off of previous RTWS progress. The Tin Can API offers the same capabilities as RTWS, but takes it a couple of steps further. A piece of content/activity that uses the Tin Can API can be smart enough to detect whether or not it has a network connection. If there is no connection and the content/activity has its own storage, it can store data locally and transmit back to the LRS when a connection is present. Plus, activities can start offline, unlike RTWS.

The nature of the Tin Can API also makes it great for tracking long-running content, where it’s impractical to keep a SCORM session open for weeks at a time. Think of a simulation or serious game that a user might interact with over a period of days or weeks — it shouldn’t be re-launched from the LMS for each interaction. The Tin Can API provides for a good solution to this problem.

What are your thoughts on the Tin Can API solutions to tracking content offline, tracking intermittently connected content, and tracking long-running content? See the comments below to see how we got to where we are today, and add your thoughts/concerns to the list.

SCORM 2.0 next generation project tin can

Did we achieve what you wanted with this feature?

  • Jon Apgar

    Cheater’s delight

  • Bhim Kaul

    I had someone recently walk upto me during a trade show and inquire about offline learning and how they could set up an offline consumption for the user whilst having the results plugged back once a network connection was established (we explored runtimes like AIR) , but again we would need a preliminary connection to get things going . I wonder if its possible to keep a virtual Tin Can API which can run solo for long duration’s and then upload once online . Stay Blessed

  • Brian Miller

    Absolutely, this is one of the great features of it. The document APIs are basically rendered useless with it, at least when it comes to sharing across experiences and/or platforms, but the statement sending API is relatively easily handled via offline. It is highly dependent on the development environment of the Activity Provider on how to achieve it. Our iOS and Android libraries recently got their “offline” cousins open sourced and can be found on GitHub,


    And are good examples. A JavaScript version could be achieved using localstorage though I don’t know of an implementation specifically available (yet).

    Queueing on other platforms could be implemented fairly easily assuming you can detect online/offline status which is the tricky part.



  • Bhim Kaul

    Makes sense Brian , how far is a prototype for this specifically ? , I know most simulations and games have a save state (temp RAM or storage) which detect Ethernet availability but again as you rightly mentioned getting that piece of info is the tricky part .

    Stay Blessed

  • Brian Miller

    I’m not sure I know what you mean. It is largely platform dependent.

    For instance in JavaScript the TinCanJS library doesn’t do any of this for you as browser support for local storage is just too varied, but when sending requests while offline the requests have a status of 0 that we can catch and trigger the offline storage mechanism.

    The other option is to plan for offline up front and assume that everything is offline and queue everything. Then periodically try to flush that queue and only clear it on a successful flush. This implementation scenario leaves the storage mechanism up to the developer rather than the lib which is probably a better approach for non-strict environments, and the separation of data model from request cycle inherent in TinCanJS should make it achievable. IOW, you can build statements and serialize/deserialize the JSON as needed outside of requests, the architecture was specifically designed for that purpose.

  • Thota

    Is there a provision to send local file or some other means instead of URL as an endpoint to API if the package imported from 3rd party did not take care of offline tracking?

    We need to track offline but 3rd party downloaded package does not include any kind of offline tracking.

    Don’t want to modify each package but need a generic solution.

  • Brian Miller


    In general offline handling would need to be implemented by the developer of the package. The API doesn’t have anything related to passing an endpoint or packaging for that matter. There are the LMS integration guidelines that were published with the 0.9 specification and have been implemented by several vendors but they are just that, guidelines. Depending on how the 3rd party implemented the API you might be able to hook into its handling to catch requests when in offline, or queue all requests, etc. effectively simulating the API calls.