I am part of a volunteer org that runs dozens of week-long online workshops every year, with total thousands of students. Currently, we use Canvas. While Canvas the software is great, though overkill for our needs, self-hosting is very difficult.
To convert to a lighter, fresh alternative, we need the following features
- Easy onboarding of new users. On Canvas, instructors add students by email to the course, and the students get an invite in the email.
- Easy to add a variety of question types of quizzes. Native latex support is mandatory (should be able to write $E=mc^2$ in any text box, and it should render).
- Controls on user progress through the course. "If you score at least 50% on Assignment 1, then assignment 2 is unlocked for you."
- Easy to export data.
- Most importantly, an API for accessing student assignment submissions and setting their grades (We have coding assignments that are graded automatically with our own custom codebase). You will need this anyway, if you want any sort of extension support for your platform.
- Fast. I don't care about fancy transitions. Canvas is quite slow, often painfully slow and we want to move away from that.
Agreed. We run a self-hosted Canvas LMS as well as Moodle LMS in our University.
On Canvas Open Source, We don't have access to the new quizzes, new analytics, RCE text area, and a host of other 'new features'.
We are always on the lookout for new LMS.
Canvas is okay (speed is a concern) but some things are very counter-intuitive.
Like matching quiz questions to competencies/outcomes/standards. Also assignments.
Moodle has a hundred different settings for anything - so people get confused and standardisation is hard.
The Canvas process is documented here [1]. You can copy paste the name+email columns from an excel/googledoc/csv file into the textbox and it will work. It is not tedious at all.
Obviously, direct upload of excel/csv would work just as well or better, if they were clever enough to pick out the name and email columns from the others.
Congratulations, I'm very excited to take a look. A few questions:
1) Instructure Canvas is another open-core (AGPL) LMS with a billion dollar market cap company backing it. It has tons of features and users. Why build another AGPL LMS? Is it solely because their Rails tech stack is terrible?
2) Do you want other institutions and orgs to develop alongside you? The use of AGPL says no, you want to focus on cloud hosting. Why not build an MIT-licensed LMS to differentiate yourself?
3) Every LMS seems to suffer from feature bloat. Instructors come up with insane feature requests and pretty soon your gradebook supports 3 different types of grading, with points or percentages, dropping the lowest 3 of 7 grades in a weighted category. Do you go down this road of developing features for your power users like every other LMS? If not, how do you avoid it? I see you're already interested in SCORM (an abandoned standard from 30 years ago). How do you avoid chasing every standard, every package, every power user feature request?
1. Canvas is not really open source. It was open source a long time ago, but now it is open-code really.
Instructure was taken over by a Hedge Fund and since then, all the new developments are not part of the Open Source. The open source is a bit crippled now.
None of the new features such as the New Quizzes (yes, its called that), New RCE Text Area, New Analytics, etc etc are not available on the Open Source Version.
So yes, the Billion dollar market is desperate for a new true AGPL LMS.
And it is time for one to disrupt the market.
2. Good Question.
3. Flexibility in grading and marks is really, really, really important. Because the systems, curriculum, standards are not flexible. Even with a University or College, different programs have different grading standards. It is not an option not to support the different types of grading unless the education system itself changes. If you can't support the diversity out there, you quickly risk becoming obsolete even before you start.
Yep, it is LTI time now. Not SCORM or even xAPI, TinCan, etc.
SCORM 1.2 then SCORM 2004 then TinCan and IMS Common Cartridge and IMS Content Packaging
As an LMS developer, how do you avoid the insanity of building to all of these standards and listening to what your next power user asks for? E.g., there is an instructor out there that has been using the same SCORM 1.2 package from 20 years ago and wants your new LMS to support it.
Took a quick look at the code, and it looks great!
- Nice to see that you've split the frontend and API/Backend.
- Backend is written in Python using fastapi.
- Frontend is Typescript.
- State is stored in MongoDB
- Good documentation to bring up local env, with docker instructions (would be nice if the frontend code was easy to put in a docker image as well).
We love Python for multiple reasons but one of the reasons we chose to stick with the language is fastapi & its ecosystem, it's really a joy to work with.
When I started the project I chose MongoDB for simplicity but a PostgreSQL rewrite is on the roadmap ;)
Are you planning on moving to Postgres from Mongo because you and the team have experienced pain with Mongo? Or is it because of Postgres’s popularity?
I’m not judging or anything; I’m just curious the decision making process for the switchover.
I work on a certain other open source LMS that stores some of its data in Mongo but has been gradually moving it all into a relational db.
It is true that the (home-baked) ORM we use on top of Mongo provides an abstraction layer which makes parts of the migration easier, but truly finishing the migration has and will feel like a long, gradual rewrite.
That's because Mongo and its "no-SQL" patterns permeated our original architecture. JSON everywhere, layers of caches to handle the inefficiency of complex Mongo queries, stringly-typed fail-quietly semantics, all that sort of fast-and-loose stuff. Truly moving to relational data (Django models, in our case) means replacing all those old patterns with, you know, thoughtfully designed data models and efficient SQL queries. Otherwise, the LMS would just be a Mongo app awkwardly grafted onto a SQL database.
Yes we'll use an ORM in the future so users can use their preferred database (sqlite for example), SQL Model by tiangolo & SQL Alchemy are great candidates!
I code my front-ends in TypeScript and I like JS/TS but I’d rather code my backends in just about anything else than the wild west that is JS/TS in the server. It’s 2023 and there is no equivalent of Rails, Django or .Net in the JS world. Even setting up a thin Express server to run with TypeScript can take a lot of fiddling with tooling. Bun is trying to solve this but it’s just come out… I've never used FastAPI but I’m pretty sure I could make it work in an hour. I’d rather take the context switching to about any language in the server than having to deal with JS tooling there… Besides, “your scripts/ML models/high-performance code” runs in a non-TypeScript language, why not run that everywhere?
What does “modern” mean? The landing talks about latest technologies, but I don’t see how that’s a selling point. Moodle doesn’t really bother me, what’s wrong with it?
I used to work for a Moodle host that also did custom plugin development.
The Moodle code base dates back to somewhere around 2000 ish, and comes with the baggage of the early days of PHP. The Moodle code is full of "no guard rails" style functions, where you do things like write strings directly out as HTML and write direct SQL queries. Couple this with the 'plugin hub' not really have any acceptance criteria, and you get hundreds (thousands?) of security vulnerabilities.
I think there's been a push to modernize things in the few years since I left, but it's hard to update a codebase that old.
The project is still in early stages but we think we can contribute in areas like user experience, dev experience, accessibility, features & AI.
For example Collaboration can be great for teachers who want to collaborate live on documents (just like Google Docs), a Blocks-based editor (like Notion) would mean unlimited content possibilities, AI search can help students grasp notions easily..
Providing a better developer experience for people that want to develop on top of learnhouse or self-host it in something like Kubernetes & Cloud is a top priority too.
We're just laying the foundations of the LMS and we'll work on new features and guides soon, we would love to hear about some of your recommendations ^^
Is this targeted at large orgs? It seems like many universities use MS products that include user management. So, I’m not creating a separate account, but signing in with MS. Is that implemented?
Here is a killer LMS feature: instructor uploads PDF of this week's reading, and the LLM generates a 20 question assessment with randomized multiple-choice questions.
Or how about thinking deeply about assessment questions that are semi-resistant to LLMs? Justin Wolfers just did a webinar where he talked about visual questions (line moving) as being the most resistant economics questions to LLMs. What about designing from the ground-up to use elements that are LLM-resistant?
Do a really good job of implementing LTI (semi-complex standard) so you can instantly integrate third-party apps. Takes pressure off you to build every tool/feature.
Damn shame, I just migrated a 10,000+ student LMS to Moodle for a contract job. Unfortunately due to the contract terms theres not really any room to play around with something new.
Moodle is a total beast to scale, it uses a ton of memory and EVERYTHING assumes its running on one server, not a high-availability setup.
> Moodle is a total beast to scale, it uses a ton of memory and EVERYTHING assumes its running on one server, not a high-availability setup.
It's PHP and MySQL/PostgreSQL. Not really sure where there should be a problem. With CephFS or NFS scaling shouldn't be an issue for the most part and the database can run on another host?
If there are no provisions at all for multi-server, sessions can be stored in local files, which would lead to probably pretty poor performance if they're thrown on an NFS share.
I've been running multi-server Moodle for many years. My sessions are in Redis, but you have the option to have them on the database.
High traffic Moodle (mine is about 40k users) is a bit involved. You need to set up caching and also connection pooling in the database and there are a few hidden pitfalls, but it can be made to perform very decently
This is really exciting, one of those projects I've been tempted to build myself over the last decade+. There's a massive unmet market need for an LMS that plays well with other open source web software (integration with the existing OSS LMSes is a startup MVP's worth of effort itself).
Are there samples of dynamic web activities one could look at / a template format? It would be amazing if there were a way to provide interactive web activities hosted as open source (e.g. a repo that provides a ThreeJS activity with block-based coding, or e.g. a writing activity that measures language grade level while the student is writing).
Also curious if there are plans for localization support? (This can be tough to add on later with heavily dynamic/interactive blocks and activities)
We're experimenting with headless usage, as you said it would be possible to embed or add a "Dynamic Page Player" or "Canva" to your custom website, the format would be a JSON file that can be passed to that element
Localization support is definitely on the roadmap !
Yes please! Something where I can just plug in a Github repo of lesson 01.md, lesson 02.md, with links to skip to the next lesson, or a way to embed a quiz into a lesson! Now that would be so useful. I mean all I need from an LMS is for it to work with our stuff, let me update stuff through text files and Markdown (or Org-mode), track student activity, and manage quizzes. Email notifications when a student does a quiz would also be nice, but I've been doing okay without them so far. Accessibility in how students read material and how I manage it is needed for me, since I'm one of the few blind people out there that use this stuff.
> Holy cow imagine if the interface to handle documents would be the interface people already know. I’m not even joking, this is a brilliant idea.
Yes. It also should be a pretty obvious one, but the industry and wider software development culture developed a blind spot for it.
I mean, how many startups would offer better value to customer if they ditched their custom, bloated, dog-slow SaaS, and instead offered an Excel spreadsheet? Happens way too often. I know of a failed startup which sunk a ton of money into pretty basic React fronted, whose main competitor actually licensed an Excel plugin for the same job. And much more functional at that.
The whole software dev world avoids interoperability like a plague. For-profit software at least has the Sinclair excuse (salary depends on one's not understanding it), but somehow open source is even worse. Back in the 1990s companies at least tried to make their software pluggable with/into other software via COM/DCOM. As brittle as it was, at least they tried.
Exactly, most alternatives on the market right now are not FOSS so I wanted to make sure it's clear that it's an open source alternative to Moodle (which is the most known FOSS lms)
Gonna keep a keen eye on this, the LMS space seems horribly served to me at the moment with almost nothing sitting between the risible Moodle and the vasty over-complicated edX. We occasionally have clients with LMS needs who always end up going with Moodle, SCORM support here would mean we have a much nicer alternative to offer.
Great idea and love the initiative. Seems the "db" is in MongoDB. I'd recommend not going the no-sql route and just Postgres. Not an ORM, just postgres. I'd also move off fastAPI and to to something like Tornado for easy scaling and load handling.
Think I read something here about wrapping it in Django's Model paradigm. Personally i think Tornado gives you greater flexibility while not confining you to a particular lock in.
That said, again, great initiative. I forked the project and may even contribute to it.
Case in point: My university uses moodle as a learning platform and encourages lecturers to set weekly quizzes, feedback surveys, embedded videos, links to external resources, etc. My course page just has a link to the lecture notes pdf, weekly exercises, and a help forum. I got called out by colleagues for maybe not giving students a rich enough "learning experience". But talking to students they are very grateful that I keep it simple and don't overload them with tons of stuff every week like their other courses.
It's not clear what is really different about your approach. You have courses, courses have chapters, chapters have content. Content can be text, videos, quizzes, etc.
Moodle has courses. Courses have topics. Topics have content. Content can be text, videos, quizzes, etc.
As an educator, I'm not seeing the differentiation that would motivate me to investigate further. Am I missing it?
The project is still in early stages (pre-alpha) but there is areas where we think we can contribute : user experience, dev experience, new features & AI.
For example Collaboration can be great for teachers who want to collaborate live on documents (just like Google Docs), a Blocks-based editor (like Notion) would mean unlimited content possibilities not just multimedia content, AI search can help students grasp notions easily..
We would love to know if you have any ideas that you would want to see added to the roadmap ^^
Today's learning management systems are largely content management systems with grading.
Make the case that your system will help learning, not just manage content better. That could include a better way to assess learning outcomes, engagement, adaptable learning paths, etc.
Moodle is pretty flexible. I'm currently enrolled in a university, in two departments, and both between departments and between courses within a department there are huge differences in presentation, structure and kinds of learning items.
People simply dislike their course web site and conclude "it's Moodle". Most of the time it's not, but just how their lecturers are using Moodle. Every alternative will be the same, just with much fewer possibilities (at least in the beginning).
The company I work at has extended moodle to introduce gamification and pacing features (i.e. guideline timetable to do XYZ courses on a given day) - there is a lot of experimentation to do with learning, so it should be quite open to extension (in a way that allows me to update the core LMS without breaking my extensions - i.e. forking the repo is not going to cut it).
You need to partner with Universities, Colleges, small specialised schools and preferable a couple, in every major area.
E.g. 1. American system: the US, Canada
2. The Commonwealth system: the UK, Singapore, New Zealand, Australia, and don't forget the largest student population in India and Indonesia.
3. EU: France, Germany
Generally good to see some activity in the LMS world.
It would be really interesting if you could share what sort of segment from the online learning market/needs you've been thinking about while building the product
To convert to a lighter, fresh alternative, we need the following features
- Easy onboarding of new users. On Canvas, instructors add students by email to the course, and the students get an invite in the email.
- Easy to add a variety of question types of quizzes. Native latex support is mandatory (should be able to write $E=mc^2$ in any text box, and it should render).
- Controls on user progress through the course. "If you score at least 50% on Assignment 1, then assignment 2 is unlocked for you."
- Easy to export data.
- Most importantly, an API for accessing student assignment submissions and setting their grades (We have coding assignments that are graded automatically with our own custom codebase). You will need this anyway, if you want any sort of extension support for your platform.
- Fast. I don't care about fancy transitions. Canvas is quite slow, often painfully slow and we want to move away from that.