openedx / openedx/openedx-platform
[DEPR]: Legacy (non-MFE) course search frontend
@feanil is already working on this.
Since Sep 10, 2026.
- Dominant language
- Python
- Stars
- 8.2k
- Forks
- 4.4k
- Avg merge
- 6d 18h
- Merged PRs (30d)
- 42
Description
RFC Start Date
N/A -- Already Accepted
Target Plan Accepted Date
N/A -- Already Accepted
Target Transition Unblocked Date
Immediately -- Transition Already Unblocked
Earliest Breaking Changes Unblocked Date
2026-09-10
Fast-track continuity: the one contestable piece - dropping cross-course "Search Your Courses"
with no MFE replacement - already ran a full standard RFC as
#38941, now unblocked. The rest is
unreachable dead code. This consolidates the whole frontend teardown and supersedes #38941.
Rationale
Part of the move to consolidate the frontend and remove non-MFE experiences. The legacy course
search UI is a Backbone/RequireJS bundle, openedx/features/course_search/, with two entry points,
both now clear to remove:
- In-course search
course_search_factory.jsis unreachable dead code - no template
instantiates it, only the RequireJS build manifest references it. The learning MFE replaced the
legacy courseware page that hosted it. - Cross-course dashboard search
dashboard_search_factory.js- the "Search Your Courses" widget
on the legacy dashboard - has no MFE replacement. Its removal was decided via
#38941, now unblocked.
Both entry points share the same core, so the cleanest path is to remove the whole bundle in one
pass. This supersedes and closes as a duplicate
#38941.
Description
Removed - the entire legacy course search frontend:
- The
openedx/features/course_search/bundle in full: both factories, the shared
views/collections/models, Underscore templates, JS specs, fixtures, andREADME.rst. Static
assets only - no Python. - The two
course_search/js/*_factoryentries inlms/static/lms/js/build.js. - The
ENABLE_DASHBOARD_SEARCHwidget blocks inlms/templates/dashboard.html. - The
ENABLE_DASHBOARD_SEARCHfeature flag: definition inlms/envs/common.py, env defaults in
test.py/devstack.py, and its clause in theSEARCH_ENGINEcondition inlms/envs/production.py. - The associated SCSS -
lms/static/sass/features/_course-search.scssand
lms/static/sass/search/_search.scssand their imports; verify they are not shared with another
search UI before deleting.
Replacement / transition
- In-course search is served by the learning MFE via the shared
/search/API - no operator action. - Cross-course dashboard search has no replacement; it goes away with the widget. Per #38941, if
there is real demand it would be rebuilt as a net-new feature in the new frontend. ENABLE_DASHBOARD_SEARCHdefaults toFalse, so most deployments are unaffected.
Out of scope, preserved:
- The
/search/endpoint,lms/urls.py→include('search.urls'). The learning MFE depends on it. - In-course search: the
ENABLE_COURSEWARE_SEARCHflag and thecourse_apisearch path the learning
MFE uses. - The content index,
SEARCH_ENGINE/ENABLE_COURSEWARE_INDEX. It is shared and still driven by
ENABLE_COURSEWARE_SEARCH, so removingENABLE_DASHBOARD_SEARCHfrees no search infrastructure.
Task List
- Remove the
openedx/features/course_search/bundle in full. - Remove the two
course_search/js/*_factoryentries fromlms/static/lms/js/build.js. - Remove the
ENABLE_DASHBOARD_SEARCHwidget blocks fromlms/templates/dashboard.html. - Remove the
ENABLE_DASHBOARD_SEARCHflag - definition, env defaults, and theSEARCH_ENGINE
clause - preservingENABLE_COURSEWARE_SEARCH. - Verify and remove the associated SCSS partials.
- Set the issue status to Transition Unblocked and post the link in
#risky-changes. - Close #38941 as a duplicate, with
a comment noting dashboard search is removed as part of this DEPR, and cross-link.
Related: openedx/openedx-platform#38936.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Assessment
This issue has not been assessed yet.