[Proposed] Catalog Plugin
Overview
The Open edX community is preparing for deprecation of the Discovery service. As we move towards a modular vision for the LMS, there is a growing need for an in-LMS cataloging system that supports more than just flat course listings. This proposal outlines a path towards a new plugin that can:
Serve as a replacement for Discovery.
Reside within the LMS
Support a range of enrollables like courses, programs, and personalized sequences.
Supports extensibility
This proposal outlines the discovery and initial design of a modular, plugin-based discovery catalog system for Open edX.
Brief Problem Statement
Many organizations—including higher ed, professional training providers, and MOOC platforms want to offer structured learning journeys: specializations, nano degrees, career tracks.
Today, Discovery supports only flat listings, with poor support for sequencing, grouping, or personalized curation. Users can't easily define prerequisite structures, offer tiered certifications, or support elective logic (“pick 2 of 4”).
Use Cases & Personas
This proposal is grounded in real needs from diverse Open edX users, facing limitations with the current Discovery and program authoring tools.
Persona 1: Academic Program Director (Higher Ed)
"I want to build a Data Science Pathway with 3 core courses, 2 electives, and a capstone — and offer a certificate when students finish 3 mandatory and 1 elective."
Key Needs:
Structured pathway creation (core + elective logic)
Configurable program-level certificates
Easy authoring interface within Studio
Persona 2: Corporate L&D Manager
"Our onboarding program includes mandatory modules and optional specializations like regional compliance. I want to track progress and issue badges automatically."
Key Needs:
Support for mixed program structures (required + optional)
Badge and certificate automation
Seamless learner tracking across programs
Persona 3: MOOC Learner
"As a learner, I want to see a path not just a list of courses.”
“I want to build my own learning journey by mixing courses across programs and understand how they connect to real-world careers."
Key Needs:
Ability to explore connected learning pathways
Transparent view of course-to-career progression
(Future) Personalized recommendations
Current Pain Points Across the Board
No support for grouping logic or cross-course prerequisites
No UI in Studio to create or edit programs easily.
Program discovery lives outside the LMS
No path-based personalization or AI recommendations
Features
Authoring Experience (Studio)
We’ll add a new tab named “Programs” within Studio that will allow authors to create programs, add courses in programs, define completion logics, and set up certificates.
Program Creation Flow
The author will be able to define new program types (eg: nano degrees, specialisations, career pathways)
The author will be able to create programs and add metadata: name, image, description, estimated duration, difficulty, etc.
Add and sequence courses within the program.
Configure conditions
Prerequisites of the programs (eg: students must know basics of python)
Mark courses as required or optional
Make course groupings within programs (e.g., “choose 3 of 5” logic, at least 1 course)
Mockups speak louder than text. Check out Authoring Flow for Programs here.
Certificate Configuration
The author will also be able to configure certificates within a tab in Programs, named as Certificates. They will be able to:
Enable program-level certificates.
Define completion logic to issue certificates For eg:
Complete all courses to issue program certificate
Complete a subset/group of courses to issue certificate
Add tiered certification (Eg: Complete 2 out of 10 to get a basic certification)
View certification logic (Eg: Complete all 2 courses in Core Courses AND Complete at least 1 of 2 courses in Specialization Courses)
Check out Certification Configuration for Programs here.
Learner Experience
Integrated Discovery Interface
Learners will be able to:
browse courses and programs in a unified display.
search, add filters for programs and courses.
View overall structure, requirements and outcomes of a program in the program's detail page.
View sequence of required and elective courses and navigate to individual courses.
Check out mockup for Learner Experience here.
(Disclaimer: Ignore the studio button on top right. It is only for us to keep both mockups in the same URL)
Program Certificates
Learners will be issued certificates based on the defined rules in Studio. Learners earn certificates for each completed course. If a program path involves 5 courses, the learner receives 5 course certificates + 1 program certificate (if enabled)
Personalized Curriculum Certificates
Learners will also have an option to create their own paths within programs or by selecting multiple courses.
Note: We would like to keep this feature optional for MVP for the sake of simplicity but open to discussion.
AI Based Recommendation & Adaptive Curriculum (Future Roadmap)
In future iterations:
AI can be leveraged to suggest and validate unique learning paths based on learner’s past performance, completed courses, overall interests and goals.
Users will be able to either accept a recommended sequence tailored by system or manually build their own learning path from offered options.
Certificates could adapt to the type and combination of completed content of courses. However, Human-in-the-loop validation will be required for quality assurance of the AI-generated training and certification.
TL;DR Check out a quick demo to get a glimpse of proposed solution: Open edX Programs Demo.mov
The plugin will be designed as a modular package that integrates directly within the edx-platform, supporting the Open edX ecosystem's transition to a modular monolith architecture. Aside from the features listed so far this plugin should have some from the technical point of view:
A program can have a status field (unpublished, review, published, archived) to manage the programs
Save vs Save & Publish capabilities. On Studio, when the changes are made, they are not published by default. They need to be published manually. The same should be applied to programs as well, for consistency's sake.
Adding appropriate permission checks so that only allowed/organization courses can be selected under a program
Integration Points
LMS: Catalog browsing, program enrollment, progress tracking, personal pathways management
Studio: Program authoring, programs certificate interface, Tags/Taxonomy
Credentials Service: program certificate management
Woo commerce: programs and course bulk purchases.
Architecture
This will have a Django plugin that will handle most of the heavy lifting. It will have references to courses, but it will not store them directly to ensure data integrity and never be out of date, like discovery. But we will not include a search index as part of this core and utilize edx_search to pull data from the core metadata API and store it in Meilisearch.
As for the frontend, we will be making React components to extend Authoring MFE and Catalog MFE, which is under development by the Racoon gang.
Django Application Package
Installable via pip: openedx-programs
Pluggable into the LMS and Studio via entry points
Self-contained models, views, APIs, and tests.
Will have signal and eventbus setup to sync data with the related services.
Data Models
Program: Core model defining a learning path or sequence
ProgramCourse: Association model linking courses to programs with sequencing metadata
ProgramCertificate: Configuration for program-level certificates
LearnerPathway: Represents a full learning pathway (like a course of study or curriculum).
LearnerPathwayStep: Each pathway has multiple steps (ordered or logical stages).
LearnerPathwayNode: This is an abstract class for anything that can be part of a pathway step.
And other supporting models. This is a very initial scheme.
API
We’ll make sure to follow the discovery URL scheme for compatibility with edx-platform, credentials, WooCommerce, and any other service that might be moving from discovery to this plugin. This is what the URLs will look like:
{lms_base_url}/{app_name}/{resource_name}
Technical Stack
Django 4.x/5.x compatible
Python 3.11+
Database: MySQL/PostgreSQL (using Django ORM)
Frontend: React components embedded using plugin slots
Search: Meilisearch integration
Plugin Slots
Studio Integration
The plugin will extend Studio with:
New navigation tab for Programs/Pathways
Program creation and editing interfaces
Course assignment to programs
Certificate configuration
This will leverage MFE plugin slots in course authoring MFE.
LMS integration
We’ll be making UI enhancements to the under-construction catalog MFE through the plugin slots for programs. And we might end up doing some core changes for filtration and search improvements. Most of it will depend on the new MFE.
We might need to make the MFE extensible too, to configure different searching backends.
The pages that will be making use of the plugin slots if the program's plugin is enabled:
Home/index page
Catalog page
Course/program/pathway page
Tutor plugin
To bring everything together, we will be creating a tutor plugin that will:
Install openedx-programs and any other dependencies in edx-platform
Configure plugin slots
Configure tutor/edx-platform related settings to use openedx-programs in LMS and Studio.
Credentials Integrations & Certificate Generation
Most of the credentials service is generic and can be configured to use a different discovery backend. We’ll make sure we expose the data endpoints that CatalogDataSynchronizer class expects in credentials to which are currently used to copy data from discovery to it.
Certificate Created signals to be sent from LMS and need to be received by credentials for certificate generation.
We’ll update tutor-credentials to point to the programs plugins endpoint when initializing the credentials service.
WooCommerce Integrations
When a user buys a program through WooCommerce, a webhook will call a custom Django endpoint. This endpoint will receive the order details like order ID and price and save them in the programs table. It will help keep track of which user bought which program. The data transfer will be secure and properly checked before saving.
WooCommerce doesn't currently support programs. But we have a proposal underway for that as well. https://github.com/openedx/openedx-wordpress-ecommerce/issues/112
Migration Strategy from Discovery
We'll provide migration scripts to:
Exporting existing programs from Discovery
Transforming the exported programs into an acceptable format for new plugin
Recreate catalog definitions in the new system
Update LMS references to point to new endpoints
Validate data integrity post-migration
Testing Strategy
Unit Tests: Coverage for models, views, and business logic
Integration Tests: API endpoints and plugin integration points
Acceptance Tests: End-to-end user flows for program creation and enrollment
Performance Tests: Search and catalog browsing under load
Future Goals
We can introduce personalized sequences to students. It would have an interface in the LMS where students can curate and follow their sequences.
We can introduce AI recommendations in the catalog.
A better way to create and enable course certificates. Currently, it is extremely hectic to go to the admin panel, create a course mode.
Important Links
Pending Decisions
Program Run Management Architecture
Determine whether programs should incorporate the concept of "runs" similar to individual courses. Currently, Studio treats every course as a course run, while Discovery distinguishes between courses and course runs. Key considerations include:
How to handle program flow when individual course runs within a program end
Whether users should be able to select alternative runs to continue program progress
Impact on overall program completion and user experience
Evaluate separating program data into distinct models:
Next Steps
Share the proposal with Open edX community.
Review and iterate on feedback. We expect changes after feedback from the community and Axim.
Tech Estimations
Build the MVP