xAPI Launch Link

Activities ::: mod_tincanlaunch
Maintained by David Pesce
Launch external xAPI (Tin Can) activities from Moodle and track on a Learning Record Store (LRS). Compatible with Storyline, Captivate, and others!
Latest release:
398 sites
49 fans
Current versions available: 1
This plugin allows the launching of xAPI activities from a Moodle course and tracks the resulting xAPI statements with an external Learning Record Store (LRS). This plugin is compatible with activities implementing the Rustici launch method. This includes content created with Articulate Storyline or Adobe Captivate (among others). 
Suggestions, bug reports, code reviews, and contributions are welcome! Please don't add comments or questions here. Use Github instead: https://github.com/davidpesce/moodle-mod_tincanlaunch/issues

Note: In an effort to focus our resources on this project, only supported Moodle and PHP versions will be developed and tested against. That is currently Moodle 3.5, 3.7, 3.8, and 3.9. For PHP that is 7.2-7.4. As support drops from the providers of these items, we will drop support as well.


This plugin is part of set Tin Can.


Screenshot #0
Screenshot #1
Screenshot #2


David Pesce (Lead maintainer)
Andrew Downes: ex-maintainer
Please login to view contributors details and/or to contact them

Comments RSS


  • Thu, Jul 30, 2015, 8:49 PM
    Hi John,
    I don't have any plans to make the current version work with older versions of Moodle, but there is an unsupported branch here that should work (missing newer improvements): https://github.com/garemoko/moodle-mod_tincanlaunch/tree/MOODLE_25_STABLE

    If you do want to get the current version working in older versions of Moodle, I suggest your best bet is to try and undo most of this PR: https://github.com/garemoko/moodle-mod_tincanlaunch/pull/38/files

    Hope that helps.

  • Praveen C
    Thu, Aug 27, 2015, 6:23 PM
    hope your doing good!
    when you will release moodle 2.9 comparability version ....
  • Thu, Aug 27, 2015, 6:36 PM
    Hi John,
    Have you tried version 1.1 of the plugin? Are there any compatibility problems with Moodle 2.9? Please raise an issue on Github if there are any problems. I would like this plugin to work with the latest versions of Moodle.

    I don't have any immediate plans to work on this plugin, but am happy to facilitate the pull request process if you want to submit an update.

  • Fri, Nov 27, 2015, 4:02 AM
    New version for Moodle 3.0 including Tin Can zip package upload coming soon!
  • Sat, Apr 2, 2016, 8:18 PM
    Hi all,

    I am in problem related to Tincan plugin.
    I want to know that how to get launch URL and activity ID for the moodle course.
    I need this solution quick.
    Please help me out.

  • Tue, Apr 5, 2016, 4:54 PM
    Hi kk sagar,
    The launch url and activity id relate to the activity you want to launch and not to the Moodle course the plugin sits in.

    If you are trying to launch a Moodle course then this is probably the wrong plugin. Can you let us know what your end goal is here?

    If you are trying to launch an e-learning course created in an authoring tool like captivate or storyline, then the easiest thing to do is upload the published zip package. The launch url and activity id will then be automatically populated from the zip.

  • Tue, Aug 16, 2016, 6:19 AM
    This plugin is great, I've got it connected to my LRS (GrassBlade) and everything is working perfectly.

    I wish just wondering about the anatomy of the launch link that gets produced - specifically, what is the "Registration" value and how is it determined? From reading the documentation that Rustici has provided, it seems like this is supposed to provide the xAPI statements with information about the activity's context, is that correct? If so, can it be altered? Is there a formula for determining what the Registration should be?

  • Tue, Aug 16, 2016, 9:05 PM
    Hi Craig,
    That's not how registration works; it's just a unique id representing a particular attempt/save.

  • Tue, Nov 29, 2016, 10:41 PM
    Hi Andrew, thanks for your work on this plugin and making it available to us. I have a small question here. How do I go about adding new fields to the tin Can statements. For example I want to add a field under account for the actor. I found that the actor part of the statement is created by the function tincanlaunch_getactor($tincanlaunch->id). I added a new field but it is not recorded in the statement sent to the LRS. Do I need to add the field in any other areas?
  • Wed, Nov 30, 2016, 2:37 AM
    Hi Dwain,
    For purposes of interoperbility xAPI statements have a specific defined structure and if you (successfully) add in extra fields that are not supported, then the statements will be rejected by the LRS (if you use a good LRS).

    There's probably a better way to do whatever it is you're trying to do. Can you give the full background of what you're trying to achieve?

  • Sat, Dec 17, 2016, 2:04 PM
    For those interested in setting up Moodle with TinCan API, and/or facing problems with the setup, I have written a step-by-step tutorial at https://gist.github.com/abhi9bakshi/5760243fcadc4bb8bec7d156c2f302fc.
  • Tue, Dec 20, 2016, 4:57 PM
    Thanks for sharing these detailed instructions! One clarification for anybody reading those is that Learning Locker is not required for this plugin; you can use any LRS. I'm a contractor with Watershed LRS and normally use that for testing.
  • Fri, Jan 6, 2017, 9:24 PM
    Hi Andrew, I've a similar question to Dwain. I'm using this plugin to send statements to my LRS. Which is working. But I want to add a context field so the statement contains additional information about the user. I'm reading some fields of the user profile which I want to put in the context field. But I've no idea where to add the context to the statement, where the statement is actually send. I'm hoping you can point me in the right direction.
  • Mon, Jan 9, 2017, 6:58 PM
    Hi Thom,
    Really metadata data about the user doesn't belong in xAPI statements and is out of scope of xAPI. In a lot of cases, metadata about people is held in things like HR systems and it doesn't make sense for that data to go into the LRS via the application providing the learning experience.

    At Watershed LRS we have our own People and Groups API specifically for this kind of data. We use this people and groups information to associate personas into people (e.g. mrdownes@hotmail.com is the same person as andrew.downes@watershedlrs.com), to filter and organize reports, and to manage permissions.

    The Moodle-Watershed plugin (https://moodle.org/plugins/report_watershed) facilitates this by enabling you to select standard and custom learner profile fields to turn them into groups in Watershed and assign people to those groups as a regular cron task. The plugin also features SSO from Moodle to Watershed and automatic creation of detailed reports for the most popular Moodle courses. These automatically generated reports are tailored to the modules used within those courses. I'd be very happy to give you a demo on a call if you like, just email andrew.downes@watershedlrs.com. Watershed pricing is here: https://www.watershedlrs.com/product/pricing

    For other LRSs, all I can suggest is to develop a similar plugin to integrate with whatever groups functionality that LRS has.
  • Wed, Jan 11, 2017, 5:27 PM
    We're using Learning Locker to store the statements. We provide courses to different institutions and report back on department level. So I figured we could send that data as context so we can filter the statements on that. But that is not a good solution?
Please login to post comments