Inventory the current state of the MFEs and Legacy Pages
Author: feanilCreated Jul 29, 2026Updated Sep 14, 2026
# MFE Rewrite — what's left to do
This issue tracks the **remaining** work to finish migrating Open edX off server-rendered
legacy pages and onto MFEs. It is organized by **what needs to happen next**, not by page
area, so the open work is scannable. Completed work is collapsed at the bottom.
Detailed history and per-row notes live on the (now **unmaintained**) Confluence page —
[**MFE Rewrite Tracker**](https://openedx.atlassian.net/wiki/spaces/COMM/pages/4262363137/MFE+Rewrite+Tracker).
That page is being archived and banner-linked here for reference; this issue is the live home.
**Goal:** no default legacy pages by release **"X"**
## How to read the tables
Each row shows what a user is actually served today, split into two columns because
**vanilla Open edX and Tutor defaults diverge** — and vanilla is the column that matters for
planning (anything that's MFE only because Tutor turns it on still needs to be made default-on
in the platform, and ideally the legacy view dropped). **Next action** is the concrete next step;
**Notes** holds the supporting context/caveats.
| Value | Meaning |
| --- | --- |
| `MFE` | MFE served by default |
| `LEGACY` | Legacy view served by default |
| `REMOVED` | Legacy gone; MFE is the only option, no toggle |
| `REDIRECT` | Legacy URL survives only as a redirect |
| `N/A` | The MFE-vs-legacy split doesn't apply |
| `UNKNOWN` | Not established |
**Bold** (`**LEGACY**`) = verified against a merged PR or checked live in the 2026-07-29 review.
**Trailing `?`** (`MFE?`) = inherited from the old doc's "default in Open edX" tag and **not**
verified — every `MFE?` is itself a work item (the default-sweep, task **A2**). Do not cite one
as fact.
**DEPR context:** umbrella [#36108](https://github.com/openedx/openedx-platform/issues/36108)
("Various legacy Studio pages") is **Closed** with 52 tasks — strong signal most Studio rows
below are already done and just need confirming. The old doc is known to **lag the code**, so
where this issue and the Confluence page disagree, this issue is the more current.
---
## Remove legacy — removal unblocked; just needs doing
Removal is decided and unblocked for every row here — the MFE is the valid version (or the feature is dead), and the legacy pages just need deleting.
| Page | Vanilla | Tutor | Next action | Notes | Ref |
| --- | --- | --- | --- | --- | --- |
| Courseware: Search | `UNKNOWN` | `UNKNOWN` | Remove the entire legacy `openedx/features/course_search/` frontend bundle — the dead in-course Backbone UI and the dashboard search widget/factory — per DEPR [#39089](https://github.com/openedx/openedx-platform/issues/39089). Unblocked. | Nothing loads the in-course UI; the learning MFE is the confirmed replacement. The `/search/` endpoint and content index stay (shared with MFE in-course search), so no infra is freed. | [#39089](https://github.com/openedx/openedx-platform/issues/39089) (fast-track DEPR) |
| Discussions (legacy forum tab) | **LEGACY** | **MFE** | **Unblocked** — Breaking Changes Unblocked as of 2026-08-14. Clear to remove per the DEPR scope ([#38940](https://github.com/openedx/openedx-platform/issues/38940)): the non-MFE forum tab, its waffle flags, and legacy config. | Verified 2026-07-31: legacy is the vanilla default; Tutor forces the MFE on. Divided/cohorted-discussions config is separate and stays out of this DEPR: its legacy UI + config endpoints go with the instructor-dashboard DEPR [#38432](https://github.com/openedx/openedx-platform/issues/38432), the enrollment-track + per-topic backend removal is [#38945](https://github.com/openedx/openedx-platform/issues/38945), and cohort division stays. | [#38940](https://github.com/openedx/openedx-platform/issues/38940) (fast-track DEPR) |
| Course Dashboard (Learner Home) | **LEGACY** | **MFE** | Remove the legacy dashboard (`dashboard.html` + the `student_dashboard` render path) and the `learner_home_mfe.enabled` flag, per [#35326](https://github.com/openedx/openedx-platform/issues/35326). Removal deletes the flag, so vanilla switches to the MFE. Coordinate with [#39089](https://github.com/openedx/openedx-platform/issues/39089) on `dashboard.html` (that PR removes the search widget; #35326 removes the whole template). | Cleared: the cross-course search decision is resolved (→ #39089), and the programs dashboard is confirmed **independent** (verified 2026-09-10 — renders its own `learner_dashboard/programs.html` inheriting `main.html`, no dependency on `dashboard.html` or the course-dash JS). | [#35326](https://github.com/openedx/openedx-platform/issues/35326) |
| Discover New Courses (Catalog) + LMS Home | **LEGACY** | **MFE** | Remove the legacy templates (`index.html` / `courses.html` / `course.html`) + redirect logic + the `ENABLE_CATALOG_MICROFRONTEND` flag, per DEPR [#36785](https://github.com/openedx/openedx-platform/issues/36785). Removal deletes the flag, so vanilla switches to the MFE. Transition unblocked (Verawood cut). | Verified 2026-09-10 (master `fef9dd5e6a`): `ENABLE_CATALOG_MICROFRONTEND` defaults `False`, so the MFE is on only because Tutor sets it. MFE is `frontend-app-catalog` — the only new MFE needed for the remaining conversions (per sarina). Handled with Course About. | [#36785](https://github.com/openedx/openedx-platform/issues/36785) |
| Course About | **LEGACY** | **MFE** | Remove `course_about.html` / `course_about_sidebar_header.html` + redirect logic per DEPR [#36785](https://github.com/openedx/openedx-platform/issues/36785) (the `ENABLE_CATALOG_MICROFRONTEND` flag removal is shared with Discover New Courses). Transition unblocked (Verawood cut). | ⚠️ 2U uses Course About in its Edge environment (robrap 2026-09-04) — coordinate before breaking changes land. Same DEPR/flag as Discover New Courses. | [#36785](https://github.com/openedx/openedx-platform/issues/36785) |
---
## Flip the vanilla default, then remove — MFE exists but is off by default in vanilla
⭐ **Confirmed divergence.** The MFE exists but the platform toggle defaults `False` (Tutor turns it
on). Near-term step is to make it default-on in the platform — but unlike the removals above, this
one still has an open dependency before the legacy views can be dropped (see the row).
| Page | Vanilla | Tutor | Next action | Notes | Ref |
| --- | --- | --- | --- | --- | --- |
| Login / Registration | **LEGACY** | **MFE** | Build enterprise-branded logistration in the MFE, then flip `ENABLE_AUTHN_MICROFRONTEND` on (default-flip PR [#39092](https://github.com/openedx/openedx-platform/pull/39092)) and remove the legacy views + flag. **Blocked by:** [frontend-app-authn#1691](https://github.com/openedx/frontend-app-authn/issues/1691). | MFE at parity except the enterprise/SSO experience (audit 2026-09-10); details in the linked tickets. |
- [frontend-app-authn#1691](https://github.com/openedx/frontend-app-authn/issues/1691)
- [public-engineering#81](https://github.com/openedx/public-engineering/issues/81)
- [#39092](https://github.com/openedx/openedx-platform/pull/39092) (default-flip PR)
- **CCX Coach**: Student Grades + layout ([#96](https://github.com/openedx/frontend-app-instructor-dashboard/issues/96), [#97](https://github.com/openedx/frontend-app-instructor-dashboard/issues/97); epic [#19](https://github.com/openedx/frontend-app-instructor-dashboard/issues/19))
- **Grading**: entrance-exam controls ([#243](https://github.com/openedx/frontend-app-instructor-dashboard/issues/243))
- **Data Download**: proctored + survey reports ([#244](https://github.com/openedx/frontend-app-instructor-dashboard/issues/244))
- [#38432](https://github.com/openedx/openedx-platform/issues/38432) (removal DEPR)
- [instructor-dashboard#19](https://github.com/openedx/frontend-app-instructor-dashboard/issues/19) (CCX epic)
Source: openedx/openedx-platform