Hi everyone,
I’ve been trying to customize the footer in Open edX (Sumac release) using Tutor, and after several attempts, I still can’t make it work.
Here’s a summary of what I’ve tried:
What I’ve already done (and works with other MFEs):
For MFEs like frontend-app-learner-dashboard, I did the following:
- Forked the MFE repo from Open edX GitHub.
- Cloned the fork into my local dev environment.
- Created a custom Tutor plugin to point to my fork instead of the default repo.
- Used
tutor mounts addto bind-mount my local changes. - Ran
tutor config save,tutor images build mfe, andtutor local launch.
With that, my changes showed up perfectly in the MFE.
What’s not working (with the footer):
I want to override or customize the footer. I tried several approaches:
1. frontend-component-footer
I cloned the repo, added a custom component, and used a custom env.config.jsx. But it didn’t work.
2. frontend-slot-footer (plugin-slot method)
I cloned the repo, explored the slot org.openedx.frontend.layout.footer.v1, and created a custom Tutor plugin using PLUGIN_SLOTS.add_items([...]), with both Hide and Insert operations.
Plugin structure:
tutor-indigo/
└── plugins/
└── footer-slot-fork/
├── footer_slot_fork/
│ └── plugin.py
├── patches/
│ └── mfe/
│ └── env.config.jsx
├── setup.py
└── pyproject.toml
I installed the plugin with pip install -e ., enabled it with tutor plugins enable, built images, and relaunched. Still, nothing changes in the footer.
What I need help with:
- How should I properly install or configure the frontend-plugin-framework or slot-based plugins?
- Where exactly should the
env.config.jsxbe placed? - What’s the proper structure when using
frontend-slot-footeras a plugin in Tutor? - Is Indigo (the theme) interfering with this somehow?
I’ve read the documentation, but it only explains how to use the plugin slot config, not how to install or structureeverything in a Tutor-based setup.
If anyone has managed to successfully override the footer, or has a working example, I’d really appreciate the help.
Thanks in advance!