🐢 🌎 📚 a community-owned language-learning platform
Go to file
renovate[bot] 1fbae2c314 chore(deps): update babel monorepo to v7.24.5 2024-04-29 20:21:44 +00:00
.github docs: recommend node 16 instead of node 14 (#3274) 2024-02-03 13:42:43 +01:00
.semaphore ci: use a newer os image in semaphore (#3358) 2024-04-28 23:12:06 +02:00
apps chore(deps): update babel monorepo to v7.24.5 2024-04-29 20:21:44 +00:00
config feat: enable kabyle-from-french course 2023-11-03 10:06:11 +01:00
courses Make course page translatable (#2811) 2023-04-10 10:43:34 +02:00
docs docs: recommend node 16 instead of node 14 (#3274) 2024-02-03 13:42:43 +01:00
scripts chore: rename test course to test-1 (#2802) 2023-04-06 08:52:29 +02:00
.all-contributorsrc docs: update .all-contributorsrc [skip ci] 2023-07-12 17:52:42 +02:00
.eslintrc.js chore: run prettier through eslint (#2070) 2022-03-15 08:09:37 +01:00
.gitattributes chore: show Svelte files as TypesScript on the GitHub page 2021-07-23 19:42:04 +02:00
.gitignore refactor: re-organize gitignore 2022-02-21 08:23:50 +01:00
.ignore refactor: introduce yarn workspaces 2020-05-21 19:31:04 +02:00
.prettierignore chore: run prettier through eslint (#2070) 2022-03-15 08:09:37 +01:00
.prettierignore_for_svelte chore: run prettier for svelte files (#2071) 2022-03-15 08:38:42 +01:00
LICENSE Update LICENSE 2020-02-09 17:57:15 +01:00
Makefile docs: explain what `type-check` does 2023-07-03 11:32:01 +02:00
README.md omnilingo broken link fixed 2023-10-10 13:45:59 +02:00
babel.config.js chore: run prettier through eslint (#2070) 2022-03-15 08:09:37 +01:00
commitlint.config.js Set up commitizen (#221) 2020-03-18 23:14:25 +01:00
jest.config.js feat: allow loading course data from github gists (#2073) 2022-03-24 09:22:05 +01:00
mkdocs.yml docs(docs): add clickable flow chart 2021-03-02 11:53:13 +01:00
package.json chore(deps): update dependency svelte-check to v3.7.0 2024-04-29 15:54:58 +00:00
poetry.lock chore(deps): update dependency mkdocs-material to v9.5.20 2024-04-29 11:07:02 +00:00
prettier.config.js chore: run prettier for svelte files (#2071) 2022-03-15 08:38:42 +01:00
pylintrc fix: enforce images are present in all skills 2023-11-03 08:52:58 +01:00
pyproject.toml fix(deps): update dependency mkdocs-mermaid2-plugin to v1 2023-07-12 17:43:43 +02:00
pytest.ini style: fix 2 instances of lines that are too long (#2512) 2022-10-29 09:36:47 +02:00
yarn.lock chore(deps): update babel monorepo to v7.24.5 2024-04-29 20:21:44 +00:00

README.md



LibreLingo
a community-owned language-learning platform


This project is using Percy.io for visual regression testing. GitHub release (latest by date) Build status Matrix call Mastodon

About

LibreLingo's mission is to create a modern language-learning platform that is 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 on dev.to.

Table of Contents
  1. About
  2. Using LibreLingo
  3. Developing LibreLingo
  4. Milestones
  5. Roadmap
  6. Contribution
  7. License
  8. See also
  9. Donate

Using LibreLingo

Web app

LibreLingo offers an official web app, which is very lightweight and written in Javascript using Svelte framework and pouchDB by the way, to try out LibreLingo courses interactively right in your browser, no installation required!

Features

  • 🏹 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
  • 🧑‍🤝‍🧑 owned by you, the community
  • 🕊️ most courses are free, as in freedom and also as in beer

Screenshots

librelingo-yaml-loader

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.

Setup

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

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

Setup

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.

Usage:
  cli.py [OPTIONS] INPUT_PATH OUTPUT_PATH
    Convert a YAML course into a JSON course.
Options:
  --dry-run / --no-dry-run --help
    Show this message and exit.

Developing LibreLingo

Want to contribute to LibreLingo? Or create your own fork? Perhaps you want to use it in your creative project?

To get started with running the development environment on your computer and understanding the software architecture, head to our development documentation.

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

Roadmap

  • Officially releasing Basque course
  • Make it possible to contribute to courses through GitHub
  • Improving course creation UX over Github

Projects

Contribution

Become a contributor

are you a developer?

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

Still got questions? Our Matrix/FreeNode IRC channel is #LibreLingo, join the dev community there and feel free to ask anything.

  • Matrix: #LibreLingo on matrix.org
  • IRC: connect to irc.freenode.net with your favourite client and join #LibreLingo

are you a linguaphile?

Learning new language is an awesome experience right? If you wanna let others experience that too, make a course on LibreLingo! Get started here.

We are working on the process of creating courses, to make it more streamlined, if you have an idea to make it better, do share with us, create an issue. Note: You are always encouraged to release the courses under a free license.

are you a wordsmith?

Translate the LibreLingo UI(LLUI) to make it more accessible, you can start here.

Attributions

Mascot

The mascot is designed by @almostdesigner.

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

Contributors

All Contributors

Thanks goes to these wonderful people (emoji key):

Daniel Kantor
Daniel Kantor

💻
Klemen Skerbiš
Klemen Skerbiš

🤔
Mirek Mazel
Mirek Mazel

🤔
Chris Babcock
Chris Babcock

🤔
Liaizon Wakest
Liaizon Wakest

🤔
Trolli Schmittlauch
Trolli Schmittlauch

🤔
Jérôme Deuchnord
Jérôme Deuchnord

🤔
Felix Ableitner
Felix Ableitner

🐛
Navan Chauhan
Navan Chauhan

🚇 💻 🎨 📖
Roshan Jossy
Roshan Jossy

🤔 💻 📖
ledgelight
ledgelight

🤔
Francis Tyers
Francis Tyers

🤔 📖
titanix
titanix

🤔
Michael Moroni
Michael Moroni

🌍
pssandhu
pssandhu

🎨
Stefan Lobbenmeier
Stefan Lobbenmeier

🐛
kylepollina
kylepollina

💻
slesingerm
slesingerm

🤔 🐛 👀
iasonasma
iasonasma

💻 ⚠️
Caroline Delesalle
Caroline Delesalle

🎨
borbota
borbota

🐛
decentral1se
decentral1se

📖 🤔
James Adams
James Adams

🐛
Arnold Schrijver
Arnold Schrijver

🤔
Dale Visser
Dale Visser

🐛
oscarfrancois
oscarfrancois

📖
dhelmr
dhelmr

💻
Matt
Matt

👀 🐛 🚧 💻 📖
Jean-André Santoni
Jean-André Santoni

🤔 📖 🎨
Lucas Campos Teixeira e Nascimento
Lucas Campos Teixeira e Nascimento

📖 🤔 🐛
Pooja Desur
Pooja Desur

📖
Wesley Mutwiri
Wesley Mutwiri

💻
Simon B.
Simon B.

🤔
Karthik Shetty
Karthik Shetty

🚧
Joshua Ide
Joshua Ide

💻
Jobe Dylbas
Jobe Dylbas

💻
Dávid Kristián Luterančík
Dávid Kristián Luterančík

🤔 💻
Sai Sandeep Mutyala
Sai Sandeep Mutyala

💻
Artur Bauer
Artur Bauer

💻
Etza
Etza

💻
Kyle Mumma
Kyle Mumma

💻 🤔
zinovik
zinovik

💻
Himank Pathak
Himank Pathak

💻 🐛
x4th
x4th

💻
Christian Dimas
Christian Dimas

💻
Marco Ciampa
Marco Ciampa

🐛
Joshua | DC7IA
Joshua | DC7IA

🐛
Reyzadren
Reyzadren

🤔
Andreas
Andreas

📖
Marco H
Marco H

🖋
Dan OReilly
Dan OReilly

🤔
Douglas Ferlini
Douglas Ferlini

💻
Michael Nock
Michael Nock

💻 🤔
davidak
davidak

🤔
adnan360
adnan360

🖋 🤔 📖
Lamdarer
Lamdarer

📖
Luther
Luther

🤔
Nart Tlisha
Nart Tlisha

🐛
Binyamin Aron Green
Binyamin Aron Green

📖
Stéphane Guillou
Stéphane Guillou

🤔
Mohammad-Ali A'RÂBI
Mohammad-Ali A'RÂBI

🖋
RGBradley
RGBradley

🖋 🤔
Cameron Radmore
Cameron Radmore

🖋 💻
Zeb Burke-Conte
Zeb Burke-Conte

📖 💻 🐛
Florian CUNY
Florian CUNY

🤔
uberstar100
uberstar100

🤔
Gabe D
Gabe D

🐛 💻
Ekaterina Mozheiko
Ekaterina Mozheiko

💻
Gerardo Alcantara
Gerardo Alcantara

💻
JP Damas
JP Damas

💻
frostedkitsune
frostedkitsune

🤔 📖
sinhalaquiz
sinhalaquiz

🐛 💻
Peter Cruckshank
Peter Cruckshank

💻
Gabor Szabo
Gabor Szabo

🐛 💻 🤔 📖
dimkard
dimkard

💻
Dushyant Bhardwaj
Dushyant Bhardwaj

💻
Piotr Idzik
Piotr Idzik

💻
Amine Louzar
Amine Louzar

💻
Najmieh Sadat Safarabadi
Najmieh Sadat Safarabadi

💻
Ben
Ben

🖋
CutThroat
CutThroat

💻
Rodrigo Pova
Rodrigo Pova

💻
Yulia
Yulia

💻
Sandra
Sandra

🎨 💻
Daniel Gallagher
Daniel Gallagher

💻
Frey0-0
Frey0-0

💻
rsk2
rsk2

💻
Joel Niemelä
Joel Niemelä

📖
Jeremy Kenny
Jeremy Kenny

💻
Abbi-Hackbardt
Abbi-Hackbardt

💻
Daniel Moreno
Daniel Moreno

💻

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

Contributors who don't have a GitHub account.

Since All Contributors relies on GitHub accounts to show user info, it's not possible to use it to credit people who don't have a GitHub account. This place is intended as a list of people who contributed without registering for a GitHub account.

License

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

See also

  • omnilingo, listening-based language learning

Donate

Help us to keep going