2025-08-26 Meeting notes (Working Session ltistore)

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

  1. Have an open edx environment

    1. Install tutor (for example: v20)

    2. Launch a dev/local environment

    3. Base provisioning (create a superuser and import the demo course)

  2. Install the ltistore Django plugin

    1. You can do it by adding it to OPENEDX_EXTRA_PIP_REQUIREMENTS in the config.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 info tutor mounts add -h)

      1. 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)

  3. Configure the ltistore plugin.

    1. Add the waffle flag lti_consumer.enable_external_config_filter

      1. https://github.com/openedx/xblock-lti-consumer/pull/239 (reference)

      2. Another important PR: https://github.com/open-craft/openedx-ltistore/pull/2

      3. 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

  4. Test the plugin functionality

    1. Register a tool in the admin (<domain>/admin/lti_store/externallticonfiguration/)

    2. Use it in a course

  5. 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-consumer repo.

🤔 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

 Action items

 Decisions

🍉 Resources