[Proposed] Catalog Plugin

[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

  1. The author will be able to define new program types (eg: nano degrees, specialisations, career pathways)

  2. The author will be able to create programs and add metadata: name, image, description, estimated duration, difficulty, etc.

  3. Add and sequence courses within the program.

  4. Configure conditions

    1. Prerequisites of the programs (eg: students must know basics of python)

    2. Mark courses as required or optional

    3. 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.

image-20250529-130346.png

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)

image-20250529-130416.png

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

Technical specifications

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:

  1. New navigation tab for Programs/Pathways

  2. Program creation and editing interfaces

  3. Course assignment to programs

  4. 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