Important
This project is in active development and is not yet ready for production use.
Note
We're looking for contributors and sponsors. If you're interested in helping build a modern alternative to traditional LMS platforms, we'd love to hear from you.
A lightweight Learning Management System built with Bun and React Router v7. Deploys as a single executable.
Paideia LMS is a modern alternative to platforms like Moodle. It's built with modern web tech, focuses on simplicity and performance, and packages everything into a single binary.
Features:
- Course management (assignments, quizzes, content, grading)
- User management with role-based access control
- Payment integration
- Version control and change tracking
- RESTful API
- Import from Moodle, Canvas, and other LMS platforms
Architecture:
- Single executable deployment
- Lightweight and fast
- No dynamic plugins (everything built-in)
- Designed for server deployments, not serverless
- Built with Bun, React Router v7, and TypeScript
Paideia LMS is free and non-profit forever. We welcome sponsors and donations to support development.
Full docs at docs.paideialms.com
See docker-compose.yml and docker-compose.paideia.yml for configuration details.
Quick start:
docker compose -f docker-compose.yml -f docker-compose.paideia.yml up -dAccess:
- Frontend: http://localhost:3000
- Backend: http://localhost:3001
- MinIO Console: http://localhost:9001
Binary installation: Download from GitHub Releases and configure environment variables as shown in the docker-compose files.
See server/env.ts for environment variable documentation.
Start infrastructure services:
docker compose up -dOr use the dev script:
bun devThis starts PostgreSQL (localhost:5432), MinIO (localhost:9000/9001), Drizzle Gateway (localhost:4983), and the app (localhost:3000).
The project uses two docker compose files:
docker-compose.yml- Infrastructure services (PostgreSQL, MinIO, Drizzle Gateway)docker-compose.paideia.yml- Paideia application
This keeps the app container separate during development so you can run it locally with bun dev for hot-reloading.
Build:
bun run buildRun:
bun start- Update version in
package.json - Commit and push:
git add package.json git commit -m "chore: bump version to X.X.X" git push origin main - Create and push a git tag:
git tag vX.X.X git push origin vX.X.X
The GitHub Actions workflow will build binaries and Docker images automatically. Check progress in the Actions tab.
The Linux binary must be built in a Linux environment. Use the Docker build environment:
bun run docker:build-binary
bun run docker:builder-shell
# Inside container:
bun scripts/build-linux.ts
# Exit container, then:
bun run docker:copy-binaryOr if you have a Linux machine:
bun run build:linuxBuild the Docker image:
docker build -t paideia:latest .Run with environment variables:
docker run -d --name paideia -p 3000:3000 -p 3001:3001 --env-file .env paideia:latest- Bun - Runtime and bundler
- React Router v7 - React framework
- Elysia - Web framework
- TypeScript - Type safety
- Payload CMS - Headless CMS
- Mantine - UI components
Development tools: Biome, Lefthook, Playwright
Contributions welcome! This is a community-driven project built with modern development practices.
Paideia LMS is licensed under the GNU Affero General Public License v3.0 (AGPL-3.0).
- Free and open source
- Schools can use without restrictions
- Modifications must be shared
- All forks must use AGPL-3.0
- We discourage commercial hosting of this software for schools as a paid service
If you're interested in commercial partnerships that align with our mission, reach out to discuss.
