Open edX Platform Atlasv1.0
Learner ExperiencesEst. 2012

Course Experience

Partial

Overview

The Course Experience is the primary in-course interface for enrolled learners. It includes courseware navigation (sections, subsections, units), content rendering (video, text, problems), assessment interaction, and progress tracking. This is the most time-intensive surface area in Open edX — where learners spend the majority of their platform time.

The course experience is delivered primarily by `frontend-app-learning`, which replaced the Django-rendered courseware view as the primary LMS frontend.

Current State (2026)

• Primary MFE: `frontend-app-learning` is the canonical in-course experience for most Open edX deployments

• Content rendering: XBlocks are rendered server-side (via `edx-platform`) and embedded in the MFE via iframes or direct API responses

• Navigation: Sequences (sections > subsections > units) with breadcrumb, previous/next navigation

• Video: Delivered via `edx-val` abstraction; supports YouTube, HLS, and self-hosted video with transcripts

• Completion tracking: Block-level completion tracked by the `completion` library; drives progress display

• Accessibility: Significant ongoing investment in WCAG 2.1 AA compliance across courseware

Architecture

• Frontend: React SPA (`frontend-app-learning`) communicates with LMS REST APIs for enrollment, progress, and content data

• Backend rendering: XBlock runtime in `edx-platform` renders XBlock HTML, JS, and CSS; served to the MFE

• Grading: Subsection grades computed on submission, cached in `courseware_student_module`; recalculated by background Celery tasks on policy changes

• State management: Per-learner, per-block state stored in `StudentModule` (legacy) and `XBlockUserState` tables in the LMS database

• Date handling: Due dates and access windows managed by `edx-when` integration with the LMS

History

Origin

• Year introduced: 2012 (original MITx launch, powering the first edx.org site)

• Initial implementation: Django-rendered courseware with CoffeeScript (later removed before or around the June/July 2013 open-source release); `courseware/views.py` in `edx-platform`. Built by Dave Ormsbee, Piotr Mitros, and others working out of the CSAIL lab at MIT.

• Context: Originally built by the CSAIL lab group for MITx. When Harvard joined the edX initiative in mid-2012, this same codebase powered the first edx.org site. 6.002x was among the first courses hosted on the platform. The work was inspired by OpenCourseWare but shared no code with it. The git history for the original implementation was wiped when the platform was open-sourced in June or July 2013; the open-sourced code was the same code running on edx.org at the time.

Key Milestones

2012

Original courseware Django view launched with MITx; adopted for edX.org when Harvard joined the initiative mid-year; 6.002x among first courses hosted

Dave Ormsbee, Piotr Mitros, and others at CSAIL / early edX team

2013

Platform open-sourced (June/July 2013); open-sourced code was identical to production edx.org code; git history wiped prior to release

Early edX engineering team (~10–15 engineers)

~2021

`frontend-app-learning` MFE begins replacing Django courseware; was the third or fourth major MFE built as part of a broader frontend modernization effort that also included account, learner, and ecommerce MFEs

Ed Zarecor, Mark Haseltine, David Joy, Dave Ormsbee, Adam Butterworth, Nimisha Asthagiri, Kyle McCormick, Marco Morales, and others — Architecture / Teaching and Learning (TNL/T&L) team at edX

~2022–2024

Progressive migration of features into MFE

Open Questions

  • ?What were the biggest technical challenges in the MFE migration?
  • ?Which teams at edX owned the course experience surface historically?
  • ?How was the XBlock rendering architecture originally designed, and has it changed significantly?
  • ?What were the most controversial design decisions in the course experience?