Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Micro-frontend Plugins #27

Open
3 of 11 tasks
e0d opened this issue Oct 29, 2021 · 12 comments
Open
3 of 11 tasks

Micro-frontend Plugins #27

e0d opened this issue Oct 29, 2021 · 12 comments
Assignees
Labels
discovery Pre-work to determine if an idea is feasible epic Large unit of work, consisting of multiple tasks
Milestone

Comments

@e0d
Copy link

e0d commented Oct 29, 2021

Abstract

The ability to extend the user interface of the Open edX Platform is a prerequisite for scalable innovation, customization, and experimentation. It allows us to maintain a small, stable, and extensible platform core, and is a vital part of our micro-frontend customization capabilities.

Micro-frontend plugins (a.k.a., "Experience Plugins" or "XPs") give us a dramatic increase in flexibility in how we build and deploy our user experiences. They enable an increase in team autonomy for feature development, modularization of cross-cutting features, code reuse, and approachable experimentation and extensibility.

Approach and Status

MFE plugins may be implemented with variety of technologies, such as LTI, plain iframes or federated modules. The initial implementation has focused on iframe-based plugins, as they're simpler than LTI, but more secure than module federation, and feel like a "sweet spot" that's most applicable to the community's needs.

We intend to write an OEP on Micro-frontend Plugins describing the above approaches and their relative strengths and weaknesses in more detail. @davidjoy is writing an initial draft (openedx/open-edx-proposals#259, openedx/open-edx-proposals#287)

An initial implementation of iframe-based plugins is currently sitting in a pull request in frontend-platform: openedx/frontend-platform#235

Note that this capability depends on improved micro-frontend configuration capabilities. Our current environment variable-based approach is insufficient for build-time MFE configuration. See related tasks below.

Related issues:

Related Repositories

Related PRs

OEPs

Implementations

@e0d e0d added enhancement needs definition There are gaps in opportunity scope or definition to be addressed before the opportunity can proceed labels Oct 29, 2021
@e0d e0d moved this from Ideation to In Progress in Open edX Roadmap Oct 30, 2021
@davidjoy davidjoy changed the title Front-end Plugins Frontend Plugins Dec 2, 2021
@davidjoy davidjoy changed the title Frontend Plugins Micro-frontend Plugins Dec 2, 2021
@e0d e0d mentioned this issue Dec 6, 2021
@jmakowski1123 jmakowski1123 removed the needs definition There are gaps in opportunity scope or definition to be addressed before the opportunity can proceed label Dec 28, 2021
@jmakowski1123 jmakowski1123 added needs definition There are gaps in opportunity scope or definition to be addressed before the opportunity can proceed and removed needs definition There are gaps in opportunity scope or definition to be addressed before the opportunity can proceed labels Dec 28, 2021
@jmakowski1123 jmakowski1123 moved this from In Progress - Q1 (Jan - March 2022) to CY22Q2-Q4 (April - December 2022) in Open edX Roadmap Jan 25, 2022
@jmakowski1123 jmakowski1123 added the epic Large unit of work, consisting of multiple tasks label Feb 8, 2022
@jmakowski1123 jmakowski1123 moved this from Backlog to Prioritized in Axim Roadmap: Backlog and Epics Feb 11, 2022
@jmakowski1123 jmakowski1123 added the discovery Pre-work to determine if an idea is feasible label Feb 11, 2022
@jmakowski1123 jmakowski1123 moved this from Prioritized to In Progress in Axim Roadmap: Backlog and Epics Feb 11, 2022
@jmakowski1123 jmakowski1123 self-assigned this Feb 14, 2022
@arbrandes
Copy link

Just ran into another plugin case, to add to our salad:

openedx/modular-learning#6 (comment)

@davidjoy
Copy link

davidjoy commented Apr 5, 2023

Slots that enable various use cases:

  1. Course tabs
  2. Course sidebar content
  3. Replacing header/footer overrides with default header/footer plugins configured to use different components
  4. Cross-sell/upsell/marketing messaging in user dashboards/courses.
  5. Functionality in courses like notes, calculator, etc., which augments the course content.
  6. Non-display plugins, like alternate analytics/logging implementations
  7. Additional header bars
  8. Additional user menu items depending on user role

The idea is these are all enable extension points (slots?) that help operators/developers avoid forking and overrides. We don't know exactly what they'll use them for because we haven't thought of it yet, but they're all relatively obviously useful enough that we can imagine them being helpful. In practice, you don't add a slot until you have a concrete use case from someone.

Some of these I can see 2U using to disentangle some of edX's historical choices and simplify MFE code, removing things that were added "for one org" (edx.org). For example, we have enterprise code in the header user menu, we have 'experiments' littering the frontend-app-learning MFE for upsells, cross-sells, and marketing messages, we're likely to have the same on learner dashboard. Frontend plugins would be an obvious way to add custom course tabs in a modern way, rather than reloading the page back to the monolith.

This effort has come up for me recently because I see the 2U marketplace teams eyeing the LMS as a place where they can do cross-sells and upsells, and there's no good way to do this today without polluting the MFE code.

@davidjoy
Copy link

davidjoy commented Apr 5, 2023

MFE Plugins also enable extending the Open edX architecture, especially around ecommerce, catalog, marketing, etc., by allowing configuration of links/functionality that shuttles the user off to parts of the site that aren't in the 'core', so to speak.

@arbrandes
Copy link

All of this sounds great to me. Looking forward to helping develop this further!

@arbrandes
Copy link

I elect to use this issue to track developments stemming out of the upcoming Frontend Pluggability Summit.

This is the summit's current wiki page: https://openedx.atlassian.net/l/cp/sdRpN2Tw.

@crathbun428
Copy link

Is this proposal ready for product review?

@davidjoy
Copy link

Just to chime in here, this proposal has come a long way since 2021 when it was written, and 2023 when it was last considered above. Since then, we've kicked off a project around module federation (FC-0058, which I'm working on). I'm not aware of a "Micro-frontend plugins" document ready for product review, but expect there are some good conversations that could happen to bring product up to speed.

The landscape has changed considerably for the better, and we know a lot more about what we want here and what the options are from a technical perspective. There's a lot of work in flight. FC-0058 is about "modules", which is basically a superset of plugins. It's highly related and I'd love to talk through the details with the product group - it has a lot of potential to improve the extensibility of the frontend and how we work with it in general.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
discovery Pre-work to determine if an idea is feasible epic Large unit of work, consisting of multiple tasks
Projects
Status: In Progress
Status: In progress
Status: No status
Development

No branches or pull requests

6 participants