Introducing 𝝁 / Mu 🌊 course authoring for humans

Hi all :wave:

It is with great pleasure that I present Mu: a tool to write Open edX-compatible courses in HTML5 or Markdown. In nerd-speak, you could call it a “courseware cross-compiler” :nerd_face:

In a nutshell, Mu allows you to write your courses in Markdown or HTML5, and then convert them to OLX, and vice-versa.

This project was kickstarted and managed by @matthew-brett who hired me to implement it, with financial support from the Chan Zuckerberg Initiative?

Here is the source code: GitHub - overhangio/mu: Lecture is the course authoring tool for teachers with a deadline.


Let’s have a look at an example of a file (source):

# My course title {olx-org=overhangio olx-course=mu olx-url_name=session1}

## Chapter 1

### Sequential 1.1

#### Syllabus

::: {mu-type=video}

##### Video



##### Some html content

Each one of these paragraphs should result in a different `<p>` tag.

We can even include images here:


Raw code:

    import base64

#### Problems

::: {mu-type=mcq}

#### Multiple choice question

What is the answer to Life, the Universe, and Everything?

* ✅ 6 x 7
* ❌ 666
* ❌ 0
* ✅ 42


::: {mu-type=ftq}

#### Free text question

How many legs does a healthy snake have?

<!-- All accepted answers are listed below -->

* None
* Zero
* 0


Convert this course to OLX:

mkdir olx
mu ./ ./olx/

Convert to tar.gz:

tar -czf mycourse.tar.gz ./olx

And you get a course that is ready to be imported in Open edX. Voilà!

Why did we create this?

The first reason was that we wanted to resolve one of the biggest pain points of course authors, which is that they must use the Open edX studio to create their courses. There are different problems with the native OLX format used for courses in Open edX:

  • It cannot be version-controlled.
  • It cannot be edited from a code editor.
  • It makes it difficult to share and re-use content.
  • Translating courses is a complex process.

But there are other important side benefits to this tool. In the future, I hope that we can create and share courses just like open source software. Courses are commodities that people should be able to re-use, fork, branch and transform. Maybe then we’ll be able to create a public catalog of free online courses that anyone running Open edX could import and run on their own instance.

Which input and output formats are supported?

At the moment, Mu supports reading from and writing to Markdown, HTML5 and OLX. In the future we hope to support other LMS courseware formats. Our goal is to “write once, teach everywhere”.

Which xblocks are supported?

Just a couple xblocks are supported at the moment: video, raw HTML, free text question, multiple choice question. With your help we hope to support more!

What’s the status of this project? Can it be used in production?

Yes! With a caveat: the API is likely to change until we reach v1.0.0.

The supported input format is not very well documented yet, and we’re bound to discover some cases where the output is not exactly what’s expected. But we feel like the project is ready to be tried and tested by others.

We are eager to hear about your requirements and how this new tool can be useful to the community. If you are facing a problem or would like to require a new feature, please open an issue on GitHub: Issues · overhangio/mu · GitHub

Feel free to ask your questions in the comments :point_down:


Really Cool Regis! totally looking forward to our meeting tomorrow :slight_smile: I hope to see how we can collaborate more.
I really like the concept :slight_smile: it is interesting to learn how the content authors react to it - from here it seems like that it is going to be too hard for them to write the course as a code (at least for most of them). I hope I am wrong.

1 Like

If this is used, does it make it so that people don’t need to install the markdown xblock, and can write “text” section in markdown?

Yes, the markdown text will automatically be converted to an HTML xblock.

This is definitely what we were looking for to improve interoperability and course portability for and

This is really cool @regis! I wonder if Common Cartridge could be a good future compilation target.

You’ll almost certainly discover edge cases and course units for which you’ll want better integration @pietrushnic. Please feel free to open issues!

I… guess? Is common cartridge a popular format? My experience with IMS Global “standards” has not been good so far. They do not provide example implementations for their standards and they do a poor job at describing how they work in practice, beyond the actual reference spec (which is very hard to read). This has been the case with SCORM and LTI.

This is very cool! I am particularly excited by the idea version-controlled, open-source courses with readable source code. Anyone who uses Mu for this, pIease let me know; I would love to follow along with your course’s development.

A team at 2U maintains a CC->OLX converter, so they might have insights into how popular it is/isn’t. I believe @mroytmanedx is on that team.

We finally found time to try it, but it looks we fail very quickly facing issues reported here.

When trying pip install . from main branch it works fine, so we can continue testing, but it would be great if package would be fixed.

@regis I’m trying to make it work with 3mdeb instance of OEX. Unfortunately after importing I get “There was an error loading this course.” no matter if I use olx.tar.gz from repository or generate tar.gz package myself.

Thanks for your feedback @pietrushnic! Can we talk about your issues on the GitHub repo? The first installation issue should be resolved by now. Can you please open another one and share the content of your course there?

1 Like

@regis I submitted new issue.

1 Like

hello @regis when we import the olx file in our course we will face this issue list index out of range on Free text question here is one small picture.

but now we have fixed this issue and made a pull request on mu repo.