openedx / openedx/openedx-platform
Combine LMS and CMS into a single headless service
Nobody has claimed this yet.
- Dominant language
- Python
- Stars
- 8.2k
- Forks
- 4.4k
- Avg merge
- 6d 18h
- Merged PRs (30d)
- 42
Description
Goal: to simplify our codebase, operations, and deployment by combining the CMS and LMS into a single headless REST API server.
Background: Proposal: Combined Headless LMS+CMS
Tentative steps (these should be converted to sub-issues):
- Create and merge an ADR for this.
- Either migrate our course content to
openedx-core(talk, slides, code) or convert the modulestore APIs to be more explicit about draft vs. published (so that calls likemodulestore().get_item()becomepublished_modulestore().get_item()ormodulestore().get_published_item(), etc.).
Hopefully we can just go with the first option, and the modulestore APIs can become a legacy read-only/published-only API without many changes. - URL by URL in the CMS URLconf, add the URL to the LMS URLconf; test the behavior and address issues until they are returning identical responses whether accessed via LMS or CMS domain. Then remove it from the CMS URLconf and replace it with a redirect or a proxy.
- Same thing for management commands.
- Eventually the CMS is just a redirect/proxy service and doesn’t even need to be a django app anymore, and can be replaced with some nginx forwarding rules or something like that.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with the linked combined LMS+CMS proposal and the CMS URLconf at cms/urls.py, then review the referenced openedx-core discussion and implementation. The work needs to be split into an ADR, a modulestore/content decision, URL and management-command parity, and eventual CMS redirect or proxy behavior. Done means the agreed migration path is documented and LMS and CMS access have matching behavior before the CMS service is reduced.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- django, python
- Domain
- api, backend, infrastructure
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Quiet
- Clarity
- Needs clarification
- Newbie friendliness
- 25/100