Minima LMS
An open-source LMS built around learning objects rather than courses. An alternative to Canvas, and Open edX.
What makes it different
Most LMS platforms put the course at the center: content belongs to a course, and enrollment, tracking, and grading all hang off that structure. Minima treats each learning object (an exam, an assignment, a discussion, a quiz, a survey, or a piece of media such as a video or PDF) as a first-class entity. An object can be assigned directly, grouped into a course, or distributed through a catalog. A learner can be enrolled in a single exam without belonging to any course.
This means you get micro-learning and full courseware from the same model. There is no course overhead when you don't need it, and no second system to build when you do, because the same enrollment, tracking, and grading pipeline serves both. The mechanism that keeps a standalone attempt and an in-course attempt apart is described in ARCHITECTURE.md.
Architecture in brief
The backend is async Django with Django Ninja. Views are kept to a few lines; business logic lives in model classmethods. Some of the design decisions:
- Progress is tracked as a Postgres bit string. This is one abstraction over every media format: video, HTML, PDF, ebook, iSpring. The content is split into segments, each bit is one segment, and consuming a segment sets its bit, so the same progress model covers all of them. Progress is merged with a single SQL upsert, and credited time is capped at the real time elapsed since the last update, so a learner cannot skip ahead to mark something complete. The same approach gives time-based tracking to formats like PDF that have no playhead of their own.
- Course grading is incremental. When a learner finishes a video or an exam is confirmed, only that part of the gradebook is recomputed, not the whole course. Completion is calculated per lesson in a single query.
- Video is transcoded in the browser. Studio segments uploads to HLS with FFmpeg compiled to WebAssembly, remuxing without re-encoding and uploading straight to S3 with presigned URLs. There is no server-side transcoding to run or scale.
- Subtitles are searchable down to the line. Searching returns the matching subtitle line and its timestamp, so the player can jump to the exact moment.
- One backend serves five audiences. Access is separated by subdomain and realm role (student, studio, tutor, desk, preview) carried in the auth token.
For the details, see ARCHITECTURE.md.
Quick start
git clone https://github.com/cobel1024/minima && cd minima
sh dev.sh up
dev.sh up starts the backend, seeds bootstrap and demo data, and starts the web frontend. Then log in with [email protected] / 1111.
- Student: http://student.localhost:5173
- Studio: http://studio.localhost:5173
- Tutor: http://tutor.localhost:5173
- Desk: http://desk.localhost:5173
- Django admin: http://localhost:8000/admin/
To run the backend and frontend separately, or to seed data by hand, see core/README.md and web/README.md.
Tech stack
- Python 3.14, Django 6 (async), Django Ninja
- SolidJS, TypeScript, Vite, TanStack Router, daisyUI, Tailwind CSS, Tiptap
- PostgreSQL, Valkey, Celery, Meilisearch, S3-compatible storage
Deployment
This repository ships the application and a local development setup, not production deployment scripts. To run Minima for real you provide the services in the tech stack above: PostgreSQL, Valkey, Celery workers, Meilisearch, and S3-compatible object storage, with the backend served over ASGI and the frontend built as static assets. The docker-compose.yml files under core/ and web/ show how the services wire together in development and are a reasonable starting point.
Documentation
- ARCHITECTURE.md for how the system is built
- Backend development
- Frontend development
- User guide: https://cobel1024.github.io/minima-docs/
Contributing
Issues and pull requests are welcome. The coding conventions are written down in core/CLAUDE.md and web/CLAUDE.md; reading them first will make a pull request go more smoothly.
License
MIT, covering the whole repository. Free for commercial use, modification, and distribution. See LICENSE.
Demo content includes videos and 3D models from the Blender Foundation, licensed under CC BY 4.0.