Using LTI to integrate Cloud9 with Learning LMS systems


I’m interested in expanding the use of Cloud9 with our courses – the new ‘teacher’ tier is fantastic for this purpose. There’s a way to make this much simpler for instructors that I’d like to request.

LTI (“learning tools interoperability”) is a standard that lets external “tool providers” receive information from “tool consumer” (e.g. a learning system such as Canvas, Edx, etc). There’s a tutorial of LTI at with many example LTI applications (like Piazza).

The “setup” for LTI is to do a key-exchange (uses 2-leg oauth2). Instructors use the key to create an “LTI resource” within a course. When students click on that “LTI resource” they are taken to the tool provider, either in an IFRAME or separate window. The LTI tool is provided student information (name, email, role, etc) and information about the “context” that cause the tool to be invoked.

The value to instructors in this case would be that they could have a single setup phase to direct many students to a tool such as Cloud9. The Cloud9 service would receive information that would allow them to automatically register students enrolled in that class. For large classes (we have 200-400 person classes), this greatly reduces the effort of using Cloud9 – and only students enrolled in that course can access it.

Moreover, you could image that some resources (e.g. specific project type) could be associated with a course context so that students would immediately have precisely the tools needed for their learning.

LTI is implemented in Edx, Canvas, Moodle, D2L, WebCT, Sakari and pretty much every other learning management system that’s out there.

If you use Python for your front-ends, there’s a simple PyLTI framework that lets you decorate a Flask application to require LTI authentication. For example, the following code is from and shows how a Flask request can require that a user have initiated a session and be an Instructor (rather than student):

@app.route('/index_staff', methods=['GET', 'POST'])**
@lti(request='session', error=error, role='staff', app=app)**
def index_staff(lti=lti):**
   """ render the contents of the staff.html template**
      :param lti: the `lti` object from `pylti`**
      :return: the staff.html template rendered**
return render_template('staff.html', lti=lti)**

There are sample LTI “consumers” (e.g. something pretending to Canvas, etc) and producers at

There are also LTI libraries for Ruby etc. There’s a pretty code brain dump at the site

As an aside, I’m at a meeting organized by the National Science Foundation on how small schools can use cloud computing in their education and there was tremendous interest in Cloud9 and all of them said something like LTI integration would be useful to simplify use of c9 (which they didn’t know about before).


This is an excellent idea! I feel like this could really benefit educational users, as an addition to the existing system (because of course not every institution would use a system that supports LTI). I also think this would be fairly easy to set up, given you already have OAuth options and this seems to be very similar. Thank you for taking the time to write this, I really hope this feature will be implemented for the sake of educators wanting to use Cloud9. :cake:


I was just looking for options to integrate a cloud development environment into our Learning Suite (which happens to be built on SF), love this idea. This would be a fantastic opportunity to get students & teachers a robust, accessible, and low cost starting point for their coding programs/badges.

A number of the schools or non-profits we talk to struggle with traditional VM management to try to deliver bootcamps, I’d love to see them use Cloud9 but it’s often a case of “the devil you know.” Having a hook to multiple LMSes should provide enough incentive to get them to try it.

The other route is deeper integration using a custom Package (with plugins), I assume. We love APIs but having an LTI connector would provide a great bridge until such time as we could dev a package.



This would be a huge benefit to us. On the logistics side, we will have 300 students using Cloud9 for our course. On the student’s side, we are trying to reduce the number of websites they need to visit and Canvas is becoming the single point that most everything is connecting through.