LTI Provider in Nutmeg and future releases?

I asked the question in the past, but I am curious as to what is the current state of Open edX serving as an LTI Provider in Nutmeg and future releases?

I’ve seen some references in the past to “LTI 1.3 tool support for blockstore-based content (aka. “Content Libraries V2”)” here:

And finally about Blockstore not being totally integrated in Tutor:

So, what is the current state of LTI Provider / Blockstore in Nutmeg and future releases? Will it be integrated as part of Olive?

Thanks for any information.


No answer after one week here or on Slack.

Is there anyone who knows who I should get in touch with in order to get a definite answer or at least the beginning of an answer?

Any information would be greatly appreciated. Thank you.

1 Like

My understanding is that being an LTI provider for courseware in general is important functionality that needs to be preserved for Olive and future releases. It’s in our thinking for both new modular learning work, and I know that 2U is thinking about further investments in LTI (though I don’t think the exact shape of it has been settled). @jmakowski, @schenedx, or @zhancock_edx might be able to give more info there.

On the Blockstore LTI functionality specifically, I’m not sure about what’s enabled in Nutmeg by default, or the intention for Olive.


@dave thank you for you answer, it’s greatly appreciated. This has to be the clearest answer on the topic I received in the last few years.

While testing our migration from Koa Native to Nutmeg Tutor, we discovered that the contents we provide to Moodle for example from some of our courses on Open edX was still functional but we have thus far been unable to create new courses on Open edX that would provide new LTI contents to Moodle. Is it a problem with the LTI Provider contents on Open edX? Is it an access problem through the Learning MFE? I don’t know…

I am under the impressions, I could be wrong, that the LTI Provider functionality has been removed from the “standard” Open edX offering when the lti xblock was replaced with the xblock-lti-consumer a few releases back in-between Koa and Nutmeg. I’ve asked multiple times, but nobody gave me an official answer on this.


I looked through the Release test list from Nutmeg and it does seem that lti-consumer xblock was included while the provider functionality wasn’t (at least in the testing list…). I’m trying to dig into the context/history for that.

Going forward, I think it’s safe to say there is pretty strong interest in having an LTI1.3 Provider tool, and in fact I just had a conversation last week with @sdunn about the level of community interest for an updated, stable tool.

Likewise, as @dave mentioned, the need has been captured at a high level in the Modular Learning user stories. There’s a WIP view on the community roadmap regarding LTI investments and current work for Open edX writ large (both as provider and consumer). It’s not as fleshed (yet) as some of the other platform area tabs, but it will be very shortly (in the next 2-4 weeks), so that’s one area where you can keep real-time tabs on LTI investments and expectations for Palm release and beyond.

1 Like

There’s no LTI provider support in the new courseware MFE. The place it would be invoked is the LMS service itself. What happens when you try to launch content in new courses? What URLs are you using?

1 Like

Thanks @jmakowski

To be fair, my questions about the LTI Provider functionality predate Nutmeg.

When I started reading about the development of the newest LTI Consumer xblock a few releases back, it was never clear to me what was happening to the LTI Provider component that was available in Open edX in releases prior to the availability of the new LTI Consumer xblock. Maybe because the intent was to deliver LTI 1.3 consumer functionality first? I would also be interested in the context/history behind the decision to remove or temporarily remove the LTI Provider part.

The new courses end up with URLs that go through the Learning MFE while the old courses where the LTI Provider functionality is available are still accessible through their previous LMS URLs (meaning for example instead of

This still works for courses developed under Koa, but I can’t seem to be able to find the proper URL for new courses created in Nutmeg.

It’s really as if the new courses are unable to load the previous “lti” or “lti_provider” advanced modules in Studio.

And yes, I tried using for the new courses without success…

Hi @sambapete, I am also looking into this. I have a Provider configured on a Nutmeg platfrom and I am able to display content from it in another Open edX platfrom (Maple) via the Consumer XBlock and in saLTIre: LTI Platform emulator but only with the anonymous authentication.

I created the Consumer credentials on the Provider platform at: /admin/lti_provider/lticonsumer; the URL I am using is https://{host}/lti_provider/courses/{course_id}/{usage_id}, and I am not doing anything special with the content on the Provider platform, I added some HTML blocks to a course and got the usage_id’s as I explained here: 12.6.3. Determining Content Addresses — Building and Running an Open edX Course documentation

I have no experience with the “old lti module” you mentioned in Slack, how did authentication work there? I am trying to figure out the TPA authentication as I commented on this post.

Hi @mrtmm

Quick questions. I am curious. It’s just to check if we have the same configuration.

Was that a brand new course you created on Nutmeg or a course that was created in a previous release? And I mean, not exporting / importing a previous course that was already working for LTI. A new course started from scratch. The LTI courses we created in Koa are still working for us exactly like you explained. No differences at all.

What did you use in Studio in the Advanced Modules for this course?

Are you using the Learning MFE?

I am also using saLTIre / ceLTIc for testing.

The LTI consumer and provider functionality were implemented by different groups–the initial provider support was implemented by Phil McGachey at Harvard in mid/late 2015. It was not a high priority feature for edX development internally at the time, so we didn’t really push it to partners, but I’m not aware of any work or plans to remove it–I strongly suspect that any regression is unintentional.

So is it the case that you launch it the same way ({LMS_URL}/lti_provider/courses/{course_key}/{usage_key}), but that new courses automatically redirect to an MFE URL instead? What kind of XBlock were you exposing as an LTI provider? Do you mind posting exactly what your course key and usage key were when you were doing the launch for a newer course? I’m wondering if there’s some VerticalBlock rendering code that might be messing things up at the Unit level (but in that case, ProblemBlock and other non-container module types should still work okay).

1 Like

Yes, a brand new course.

I added nothing, I am using the native HTML module for test content.

Yes, on the Nutmeg Provider platform I have the Learning MFE enabled.

1 Like

Basically, it’s the same course but recreated manually (no export and no import from the previous course)

Previously from Koa and still working in Nutmeg:


Parent Module

It was my mistake.

While looking for the information you asked for @dave I found out what could have been the error.


Parent Module

It started working when I used

I am wondering why it worked at all in the previous case…

Thanks a lot @dave and @mrtmm

1 Like

I will need to do more tests later today or tomorrow before declaring victory :+1:

At least, I did see the unit I created in my brand new course.

Thanks again @dave and @mrtmm


It might have to do with the fact that the endpoint in question is meant to render XBlocks directly, and Sequences are being moved from rendering entirely as an XBlock to eventually be something that lives above the XBlock layer (so XBlocks would only be rendering at the Unit layer and below), per this ADR. We’re in a sort of hybrid state at the moment–the normal UI is driven by the Learning MFE and various API calls, but the SequentialBlock still exists and has rendering code.

1 Like

This topic was automatically closed 90 days after the last reply. New replies are no longer allowed.