[Proposal] Optional Content Support

[Proposal] Optional Content Support

See Github ticket. Please provide feedback before Jul 17, 2026.

TL;DR summary

Add platform-level support for optional course content in the LMS, allowing authors to mark content as “optional”, ensuring it is clearly labeled and excluded from required completion.

Overview

Course teams sometimes want to include enrichment, background, or extra-practice materials that learners may find useful but are not required to complete the course. Examples include background primers, deep-dive readings, supplemental videos, and problem sets for “extra practice”.

Today, Open edX does not have a consistent platform-level concept of optional content. As a result, course teams often rely on naming conventions or custom content workarounds to communicate that something is optional.

This proposal introduces structured optional content support across authoring, the learner-facing UI, completion logic, and reporting. Course authors can mark sections, subsections, units, or XBlocks as optional. Optional content is clearly labeled for learners, excluded from required completion calculations, and platform administrators can track completion of optional items.

This would replace ad-hoc authoring conventions like adding “Optional” to titles or using custom banners, and would make optional learning experiences clearer, more consistent, and easier to manage across courses.

Problem

Course authors sometimes need to include learning materials that are useful but not required. Without a core optional-content model, this creates several issues:

  • Authors use inconsistent workarounds, such as adding “Optional” to titles, inserting custom HTML banners, or relying on course-specific instructions.

  • Learners may not easily understand which content is required and which content is additional. This can make it harder for them to prioritize their work.

  • LMS behavior is ambiguous because optional items may still appear in completion metrics or required progress calculations.

  • Instructors and platform administrators do not have a consistent way to report on optional content engagement.

Use Cases

As a Platform Administrator…

  • As a platform administrator, I need optional content to behave consistently across courses in order to reduce course-by-course workarounds and support predictable learner experiences.

  • As a platform administrator, I need optional content to be excluded from required completion calculations in order to ensure completion data accurately reflects required learner progress.

  • As a platform administrator, I need optional content to be represented consistently in course data in order to support reliable reporting.

As a Course Author or Instructor…

  • As a course author or instructor, I need to mark sections, subsections, units, or individual XBlocks as optional in order to include supplemental content without making it required.

  • As a course author or instructor, I need optional content to be clearly labelled in the learner experience in order to avoid needing to provide additional instructions around it manually.

  • As a course author or instructor, I need optional content to be excluded from required completion in order to ensure learners are not penalized for skipping non-required course material.

  • As a course author or instructor, I need to track learner engagement with optional content in order to understand whether supplemental materials are useful.

As a Learner…

  • As a learner, I need to clearly see which content is optional in order to prioritize required coursework.

  • As a learner, I need optional content to be visually distinguishable from required content in the course outline, course sidebar navigation, and unit view in order to avoid confusion.

  • As a learner, I need optional content not to affect my required completion status in order to confidently choose whether or not to complete it.

Proposed solution

Add a platform-level optional content attribute to the LMS and Studio authoring experience.

Authoring experience

Course authors should be able to mark the following as optional:

  • Sections

  • Subsections

  • Units

  • Individual XBlocks, such as videos, text for content authors etc.

Below are screenshots of how authors can set optional content for sections, subsections, units and XBlocks:

Setting a Section as optional: Actions (kebab menu icon) > Configure > Completion

Screenshot 2026-07-01 at 10.59.18.png

Setting a Subsection as Optional: Actions (kebab menu icon) > Configure > Completion

Screenshot 2026-07-01 at 11.00.19.png

Setting a Unit as Optional: Actions (kebab menu icon) > Configure > Completion

Screenshot 2026-07-01 at 11.02.13.png

Setting an XBlock as optional: Edit > Settings

Screenshot 2026-07-01 at 11.03.31.png

 

When a parent item is marked as optional, the learner-facing UI should make this clear for both the parent item and its children where appropriate.

The optional state should be stored in the course structure, for example as an optional: true/false attribute on the relevant course node.

Learner experience

Optional content should be clearly labelled in the learner experience.

In the course outline, optional items should display an outlined OPTIONAL pill alongside the item name:

Screenshot 2026-06-24 at 11.38.51.png

In the sidebar navigation, optional items should also display an outlined OPTIONAL pill alongside the item name. If an entire subsection is optional, the subsection header and its children should display the OPTIONAL pill for clarity:

Screenshot 2026-06-24 at 11.39.07.png

If an entire unit is optional, a banner should appear at the top of the unit page to indicate that the content in the unit is optional:

Screenshot 2026-06-24 at 11.39.24.png

If only a specific XBlock is optional within an otherwise required unit, an OPTIONAL pill should appear in the block header:

Screenshot 2026-06-24 at 11.39.48.png

Completion and reporting behavior

Optional items:

  • Should be excluded from required completion calculations.

  • Should be trackable in terms of engagement by platform administrators. Harvard Medical School uses the OpenCraft completion aggregator to track optional content engagement down to the individual XBlock level, separately from required completion metrics.

    The native Open edX completion mechanism can also display optional completion, but only at the unit level, individual optional XBlocks within an otherwise required unit won't be tracked separately.

  • Should be trackable in terms of engagement by instructors and learners:

    Screenshot 2026-07-01 at 11.09.43.png

Alternatives we considered

Using the Excluded completion mode for XBlocks to exclude content from being counted toward required completion at the XBlock level. However, this approach has the following limitations:

  1. Backward incompatibility: Whether an XBlock counts toward completion is currently a setting built into the XBlock type itself (e.g. the Video XBlock, the Problem XBlock), not something that can be configured for one specific instance of that XBlock in a course. Making this instance-specific would be a structural, platform-wide change that could affect other tools and third-party XBlocks built around the current behavior.

  2. No analytics visibility: XBlocks using Excluded mode do not publish completion data at all, preventing platform administrators and instructors from tracking learner engagement with optional content, which is a capability needed for understanding whether supplemental materials are effective.

Long-term ownership and maintenance plans

We anticipate that several teams will need this functionality, and core contributors from OpenCraft will be actively involved in its development. These contributors will continue to assist with maintenance. If needed, one or more point persons can be designated as the primary contact for this code after its release.

Open Questions for Discussion

  1. When all children of a unit are optional but the unit flag is not set, should a unit‑level banner be automatically shown, or require explicit author choice?

  2. Do we want a course‑level setting to hide sidebar labels for fully optional appendices to minimize noise?

Contacts

Product: @Cassie Zamparini

Technical: @Piotr Surowiec

Harvard Medical School: @YeaRim Oh

 

Comments