2025-08-26 Meeting notes (Working Session ltistore)
All public Working Group meetings follow the Recording Policy for Open edX Meetings
Date
Aug 26, 2025
Participants
@Maria Fernanda Magallanes Z
Usman Younas
@Feanil Patel
Goals
Regarding improving the LTI platform (consumer) functionality, the LTI WG will have an exploratory session on ltistore to understand this community solution from a usability and technical perspective.
💡Setting up
Have an open edx environment
Install tutor (for example: v20)
Launch a dev/local environment
Base provisioning (create a superuser and import the demo course)
Install the ltistore Django plugin
You can do it by adding it to
OPENEDX_EXTRA_PIP_REQUIREMENTSin theconfig.yml, and building again, or cloning the ltistore and mounting it (example:tutor mounts add lms,cms:<openedx-ltistore plugin host path>:/openedx/openedx-ltistore, for more infotutor mounts add -h)If you are going to mount it, remember to install the plugin (enter in the lms container and
pip install -e <openedx-ltistore path>, and run migrations/manage.py lms migrate)
Configure the ltistore plugin.
Add the waffle flag
lti_consumer.enable_external_config_filterhttps://github.com/openedx/xblock-lti-consumer/pull/239 (reference)
Another important PR: https://github.com/open-craft/openedx-ltistore/pull/2
We also need to add the filter configuration so edx-platform knows to call our filter: https://github.com/open-craft/openedx-ltistore/blob/376068cfabda61e05487a7cd718cdb8ecfd647f7/lti_store/pipelines.py#L19-L26
Test the plugin functionality
Register a tool in the admin (<domain>/admin/lti_store/externallticonfiguration/)
Use it in a course
z
🔍 Findings and discussion
Improve the documentation on how to perform a launch
Dynamic Registration, or a simpler way to copy credentials
Confirm the waffle flag connects the filter - @Feanil Patel
Update: The waffle flag does not connect the filter, it allows you to set an external store in the block configuration UI but it won’t connect the lti_store tool as a place to look up those external configs. To use the LTI store you have to add config to your platform to connect it to the filter defined in the
xblock-lti-consumerrepo.See https://github.com/open-craft/openedx-ltistore/blob/main/lti_store/pipelines.py for more details on how to setup that filter.
🤔 Open questions
Where do the OAuth2, OIDC, and keyset platform links come from, if external configuration is used?
You can select to store the LTI config in the xblock, DB, or external. Is there a difference regarding adding the configuration and reusability when doing it by DB and external?
If we are re-using a tool, how do we choose different problems from the same tool, is that via the custom parameters?
course level, platform level, org level - to turn a tool on/off. (ltistore is managed with Django admin) - tenancy
roles and permissions
content mobility - the reference could be lost
using the content library - import/export logic
store the credentials as course settings
content library (for tool and platform) long term
ui for sharing the content
References for next steps (WIP)
https://docs.google.com/document/d/1W2n1ha0WGS-cRaC4LKBFFm904-PFzlhm52QxA7WWKKE/edit?usp=sharing