“If you have the right attitude, interesting problems will find you”
— Eric S. Raymond, The Cathedral and the Bazaar

Open efforts and open source are a big part of how the spec and adoption have made it to where we are today. Without the involvement of everyone in the community, we all would be sad pandas — or at least less-interesting pandas. This post is a bit about open source in general, but mostly about the projects out there using the spec, from people across the community who deserve credit for their hard work.

What does it really mean when someone says xAPI is open source?

By nature, xAPI is intended to be used by everyone. It’s a specification that will become a standard. It’s not open source in the way most of us think of it: a piece of software being delivered with it’s source code. The main point is that the spec is open to everyone in the community who wants to be involved. The 1.0.0 specification has an Apache 2.0 license on it. That license makes the specification free to use, build on, redistribute, etc. It’s on GitHub where anyone who wants to contribute and grow the spec further is welcome to.

Open Source Licenses

There are a number of open source licenses out there. When you’re looking for open source software to use, you really do want to make sure there is a license on the project and make sure you know what that license means. It’s better to ask the owner than assume something is open source just because the code is publicly available. There are a few licenses used often in the projects I found. They’re mainly MIT, GNU and Apache 2.0. You can find out more about these licenses and others here.

Finally, here they are. These are open source projects, specs, experiments and prototypes from across the internet. I put a call out on twitter, on ADL’s mailing list and did some searches to gather these. If you have something to contribute, email me megan.bowe@tincanapi.com and I will add it.

Applications (Mobile)

Experience Camhttps://github.com/brianrogers/ExperienceCamera

Captures an image and includes that image as an attachment to a statement. These could be real work experiences in real time, showing what you’re actually doing… Could be your vacation photos. This is a prototype.

Quick Touch Mathhttps://github.com/brianrogers/QuickTouchMath-TinCan

An open source math learning game, modified to make xAPI statements about problems solved to an LRS. This is a web app that is styled for mobile delivery.

xAPI Readerhttps://github.com/brianrogers/TCReader

A prototype iOS application that allows viewing and annotating of a PDF file. It makes statements about those activities to an LRS. You can download any PDF from a URL to the device and use this.

xAPI Drawhttps://github.com/RusticiSoftware/TinCanDraw

This is an application that records a drawing interaction on a touch interface as a statement. The drawing is included in the statement that is sent to the LRS from this application.

Twilio SMS Learning Apphttp://github.com/fugu13/mlearnconsms

A connector to Twilio that creates and captures statements about text messages.

Applications (Web)

Experience API Client Exampleshttps://github.com/adlnet/experienceapi_client_examples

Collection of .95 and 1.0.0 clients, many of the original prototypes from the BAA to be used for testing.

I Read This (Tin Book)https://github.com/garemoko/tinBook

Allows a person to search for a book and make a statement to an LRS stating they read the book.


These are the original prototypes that resulted from the BAA effort. This includes a Tetris game, a location based tour activity, and a traditional e-learning course about golf.

xAPI Email Connectorhttps://github.com/brianrogers/TCEmailConnector

For use with Google Apps Engine, converts specially formatted emails to xAPI statements and sends them to an LRS.

Code Samples and Libraries

C Sharp Libraryhttps://github.com/RusticiSoftware/TinCanAPILibraryCSharp

Java Libraryhttps://github.com/RusticiSoftware/TinCanJava

JavaScript Libraryhttps://github.com/RusticiSoftware/TinCanJS

Node Experiment (under development)https://github.com/Ken-Richard/tincan_nodejs

Objective C Libraryhttps://github.com/RusticiSoftware/TinCanObjC

PHP Sampleshttps://github.com/garemoko/PHPCan

Sinatra Experiment (under development)https://github.com/Ken-Richard/tincan_sinatra

Data Normalization

Tin Repo (under development)https://github.com/garemoko/TinRepo

An extension repository to be accessed, added to and moderated for the community to use common identifiers across statements.

Verb Repositoryhttps://github.com/fugu13/tin-can-verbs

A repository of verbs to be accessed and used by the community in statements.

Learning Record Store

Learning Record Store (under development)https://github.com/adlnet/ADL_LRS

This is a learning record store that uses Python and Ubuntu. It is currently being built by ADL and is ready for personal use and testing.

Modifications of Existing Tools

Captivate Launcherhttps://github.com/garemoko/Tin-launcher

Launches Captivate 7 content and records the xAPI statements back to an LRS.

Captivate Wrapperhttps://github.com/garemoko/tinCaptivate

A Captivate wrapper for swfs from versions 5 and 6 that allows them to make statements to an LRS.

Drupal 7 modulehttps://github.com/phkemper/xapi

Configurable module for Drupal 7 that creates statements and sends them to an LRS.

Google Course Builderhttps://code.google.com/r/fugu13-tincan-course-builder/

Basic statement support for Course Builder. Lets Course Builder users collect data from a MOOC and send it to an LRS.

Moodle – Statement handlinghttps://github.com/jgsmitty/Experience-API-for-Moodle

This collects statements from Moodle and sends them to an LRS.

Moodle – Package handlinghttps://github.com/jgsmitty/TCAPI-Moodle-SCORM-mod

This launches xAPI packages and plays them, specifically built for Articulate Storyline.

Moodle – Launcher and Statement Handler — https://github.com/garemoko/MoodleLaunch

This a new project that is currently being worked on. It will launch eLearning courses and record statements from them to an LRS.


The basics of creating statements in Sakai and sending them to an LRS are in the trunk of Sakai CLE and ready for the next major release.

uPortal (under development)http://www.jasig.org/uportal

This project is in progress, they are working to add xAPI support to this open source project.

Personal Data Locker

Learning Locker (under development) — https://github.com/davetosh/learninglocker
Not much to see here at present, but there will be soon.


Interim Packaging & Launch Spechttps://github.com/RusticiSoftware/launch

This spec describes how traditional e-learning packages should be dealt with and tracked in xAPI environments, this is being used in the interim until CMI-5 is ready for adoption.

THE spechttps://github.com/adlnet/xAPI-Spec/blob/master/xAPI.md

You know what this is. Though you can only find the Apache license on this pdf, it’s not in GitHub.

The spec, in Persianhttps://github.com/NewLearningTrendsResearchGroup/xAPI-Spec_Fa

For reading, obviously.


Experience API Translatorhttps://github.com/fugu13/georgetown

Experience API Translator. Turns Experience API statements into plain English. Works on 0.95 statements.

Statement Validatorhttps://github.com/ZackPierce/xAPI-Validator-JS

Validates 1.0.0 statements from xAPI to ensure quality json.

Statement Creatorhttps://github.com/garemoko/tinStatement

A generator for statements that sends to an LRS

xAPI Statement Viewerhttps://github.com/RusticiSoftware/TinCanStatementViewer

Creates a non-technical readable list of statements from an LRS.