The Open edX Platform is made up of multiple web services that work together to provide all the tools you might need to build and run courses online.
While there are a few exceptions, for the most part the technology stack for the Open edX Platform uses Django for backend services and React for the frontend. The frontend consists of multiple frontend apps which are usually referred to as MFEs (Micro-FrontEnds) within the ecosystem and community.
The core code base lives on GitHub in the openedx organization.
If you want more details about the tech stack, check out this video:
While the platform contains many services such as MFEs and libraries, the core of the platform lives in the edx-platform and frontend-platform repositories.
edx-platform - This was the first service created in the Open edX ecosystem and contains the legacy monolith application. That application currently can run in two modes: LMS and Studio.
As the LMS (Learning Management System), it acts as the backend for learners’ data as they go through courses and programs, and it serves some legacy UI elements.
As Studio, it is the CMS(Content Management System) where instructors and course authors can build the course content that learners will consume.
frontend-platform - This is a newer core system meant to ease the creation of multiple MFEs by bundling together many common utilities that all frontends need. This includes things like authentication workflows, logging, monitoring and translations related tooling.
In addition to the backends and frontends mentioned above, the platform is made of numerous libraries that live in the openedx organization. These libraries accomplish a variety of different tasks. More details about what they do can be found in their READMEs.
While the above summary covers most of the system, there are a few exceptions.
The cs_comments_service which provides discussion forum capability within the platform is a legacy application that is written in Ruby, using the Sinatra framework.
The Open edX Platform is currently still in the process of moving to React based MFEs. Previously frontend content used to be served by the Django services. This means that there are still many parts of the system that use Django Template based rendering pipelines to serve frontend content to users.
An exception to the exception. In edx-platform rather than using the default Django templates, django is setup to use Mako based templates.
Adding new Features to the Open edX Platform#
If you’re looking to add new features to the Open edX Platform, we recommend extending the platform rather than trying to make changes to the core. Both XBlocks and Plugins are a great way to extend the platform.
XBlocks build on top of a well-defined interface in the Open edX platform and do not require review from the Open edX team. If you want to add a new problem type or content presentation that would be shown to a learner as a part of a course, you probably want to build a new XBlock.
Before you do that, check out XBlocks that others have built in case they fulfill your needs.
If you’re ready to build one, check out our Intro to XBlocks
Plugins can be built independently of the core platform and do not require review from the Open edX team to build or use. If you want to add a new feature outside of courseware (learner/educator/operator experience) a new platform plugin might be a great option for you.
Check out the plugins README to get started.
For an example of an existing plugin, check out event-routing-backends.
New update to the core platform#
If we don’t have extension points for the kind of change you want to make, you might need to make a change to the core source. This can be complex and we encourage you to reach out to us to talk about the kind of changes you want to make.