About LibreLingo

Build status This project is using for visual regression testing. BCH compliance David

About LibreLingo

LibreLingo's mission is to create a modern language-learning platform owned by the community of its users. All software is licensed under AGPLv3, which guarantees the freedom to run, study, share and modify the software. Course authors are encouraged to release their courses with free licenses.

If you want to know why I built LibreLingo, I recommend reading my article. If you agree with LibreLingo's mission, consider helping to build and maintain it, and please consider making a monetary contribution.


Web app

The LibreLingo web app is a lightweight, interactive web app for learning foreign languages using LibreLingo courses.


  • ğŸŽ¯ practice using interactive exercises
  • 🗓️ spaced repetition
  • 💾 save and monitor progress
  • 🔁 synchronise progress across multiple devices
  • 📱 works on various devices such as phones, tablets and desktop computers



librelingo-yaml-loader is a Python 🐍 package that lets you load LibreLingo courses to create software based on LibreLingo.

To see an extensive tutorial, check out this article.


librelingo-yaml-loader can be installed using pip:

pip install librelingo-yaml-loader

Loading courses in a Python program

You can use librelingo-yaml-loader to load YAML-based LibreLingo courses in your Python program.

from librelingo_yaml_loader import yaml_loader

course = yaml_loader.load_course("./path/to/my/course")

load_course returns a Course() object


librelingo-json-export is a Python 🐍 package that contains modules that let you export LibreLingo courses into JSON files that the web app will read. This might be useful if you want to deploy YAML-based LibreLingo courses as a web app.


librelingo-json-export can be installed using pip:

pip install librelingo-json-export

Exporting courses to JSON

librelingo-json-export has a command-line program that can export YAML-based LibreLingo courses into the JSON format used by the web app.


  Convert a YAML course into a JSON course.

  --dry-run / --no-dry-run
  --help                    Show this message and exit.



Past milestones

  • 🏁 Demo course content in Spanish for English speakers
  • 🏁 Some basic building blocks of course content implemented
  • 🏁 Developers can use course editor
  • 🏁 Basic theme/branding
  • 🏁 Course progress can be properly synchronised across devices
  • 🏁 Course editor can be accessed by all course contributors
  • 🏁 At least the basics of the Spanish course are ready
  • 🏁 Most of the course building blocks are implemented
  • 🏁 All of the basic building blocks of courses are implemented
  • 🏁 Spaced repetition implemented

Become a contributor

You can help LibreLingo by testing it and submitting feature requests or bug reports: If you want to get in touch, you can use my contact details on my GitHub profile.

Confused? Have a question?

There is a Matrix/FreeNode IRC channel #LibreLingo, instructions for joining:

  • Matrix: #LibreLingo on
  • IRC: connect to with your favourite client and join #LibreLingo



LibreLingo is licensed under the AGPL-3.0 license. In addition, course content and other creative content might be licensed under different licenses, such as CC.

This image shows a summary of the licensing of our dependencies:

FOSSA Status



Mascot images are released under Creative Commons Attribution-ShareAlike 4.0 International License.

The mascot is designed by @almostdesigner.

Contributors ✨

All Contributors

Thanks goes to these wonderful people (emoji key):

This project follows the all-contributors specification. Contributions of any kind welcome!

See also

  • omnilingo, listening-based language learning