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
- VaultS3 Dashboard: http://localhost:9000/dashboard/
Binary installation: Download from GitHub Releases and configure environment variables as shown in the docker-compose files.
Or use the install script:
curl -sSL https://raw.githubusercontent.com/paideia-lms/paideia/main/scripts/install.sh | bashSee apps/paideia/server/env.ts for environment variable documentation.
Start infrastructure services:
docker compose up -dOr use the dev script:
bun devThis starts PostgreSQL (localhost:5432), VaultS3 (localhost:9000), Drizzle Gateway (localhost:4983), and the app (localhost:3000).
The project uses two docker compose files:
docker-compose.yml- Infrastructure services (PostgreSQL, VaultS3, 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
apps/paideia/package.json - Commit and push:
git add apps/paideia/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 apps/paideiaRun 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
Contributions welcome! This is a community-driven project built with modern development practices.
Paideia LMS builds on the work of many open-source projects. We are grateful to:
- Bun — JavaScript runtime and bundler
- PostgreSQL — Database
- Payload CMS — Headless CMS
- React Router — React framework
- VaultS3 — Lightweight S3-compatible object storage used for media and file uploads
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.
