openedx / openedx/openedx-platform

[DEPR]: Legacy (non-MFE) course search frontend

Open
#39,089 0 comments 0 reactions 1 assignee View on GitHub

@feanil is already working on this.

Since Sep 10, 2026.

depr help wanted
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.js is 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, and README.rst. Static
    assets only - no Python.
  • The two course_search/js/*_factory entries in lms/static/lms/js/build.js.
  • The ENABLE_DASHBOARD_SEARCH widget blocks in lms/templates/dashboard.html.
  • The ENABLE_DASHBOARD_SEARCH feature flag: definition in lms/envs/common.py, env defaults in
    test.py / devstack.py, and its clause in the SEARCH_ENGINE condition in lms/envs/production.py.
  • The associated SCSS - lms/static/sass/features/_course-search.scss and
    lms/static/sass/search/_search.scss and 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_SEARCH defaults to False, so most deployments are unaffected.

Out of scope, preserved:

  • The /search/ endpoint, lms/urls.pyinclude('search.urls'). The learning MFE depends on it.
  • In-course search: the ENABLE_COURSEWARE_SEARCH flag and the course_api search path the learning
    MFE uses.
  • The content index, SEARCH_ENGINE / ENABLE_COURSEWARE_INDEX. It is shared and still driven by
    ENABLE_COURSEWARE_SEARCH, so removing ENABLE_DASHBOARD_SEARCH frees no search infrastructure.

Task List

  • Remove the openedx/features/course_search/ bundle in full.
  • Remove the two course_search/js/*_factory entries from lms/static/lms/js/build.js.
  • Remove the ENABLE_DASHBOARD_SEARCH widget blocks from lms/templates/dashboard.html.
  • Remove the ENABLE_DASHBOARD_SEARCH flag - definition, env defaults, and the SEARCH_ENGINE
    clause - preserving ENABLE_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

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.