A modern, open-source Learning Management System built with AdonisJS, React, and PostgreSQL.
Edonis LMS combines modern architecture, mobile-first design, and native AI integration to deliver a superior learning experience for educational institutions. Built with TypeScript and featuring comprehensive educational standards compliance (SCORM, xAPI, LTI 1.3, QTI 2.1).
- 🎓 Complete LMS Functionality: Course management, assignments, gradebook, and assessments
- 🤖 AI-Powered Learning: Content generation, personalized paths, automated grading
- 📱 Mobile-First PWA: Offline support, touch-optimized, cross-platform
- 🔌 Extensible Plugin System: WordPress-inspired but type-safe
- 📊 Learning Analytics: xAPI/SCORM compliance for detailed insights
- 🔒 Enterprise-Ready: Multi-tenancy, SSO, role-based access control
- 🌐 Standards Compliant: SCORM 2004, xAPI, LTI 1.3, QTI 2.1
- Backend: AdonisJS 6 (TypeScript, MVC Framework)
- Frontend: React 19 + Inertia.js + shadcn/ui
- Database: PostgreSQL (with Supabase optional)
- Styling: Tailwind CSS v4
- Package Manager: Bun (preferred) / pnpm / npm
- Real-time: WebSocket + SSE for live collaboration
- Clone the repository
- Install dependencies:
bun install- Set up your environment:
cp .env.example .env- Choose your database option (see below)
You have two options for running PostgreSQL in development:
Advantages:
- Full Supabase features (Auth, Storage, Realtime, Row Level Security)
- Visual database UI (Supabase Studio)
- Easy sync to production Supabase
- Includes all Supabase services locally
Setup:
- Install Supabase CLI:
brew install supabase/tap/supabase- Start Supabase local:
supabase start- Get your credentials:
supabase status- Update your
.envwith the values fromsupabase status:
DB_HOST=127.0.0.1
DB_PORT=54322
DB_USER=postgres
DB_PASSWORD=postgres
DB_DATABASE=postgres
SUPABASE_URL=http://127.0.0.1:54321
SUPABASE_ANON_KEY=<from supabase status>
SUPABASE_SERVICE_KEY=<from supabase status>- Access Supabase Studio:
http://127.0.0.1:54323
Useful Commands:
supabase status # Check running services
supabase stop # Stop all services
supabase db reset # Reset database to fresh stateAdvantages:
- Simpler, fewer dependencies
- Standard PostgreSQL setup
- Lightweight
Setup:
- Start PostgreSQL with Docker Compose:
docker-compose up -d- Update your
.env:
DB_HOST=localhost
DB_PORT=5432
DB_USER=edonis
DB_PASSWORD=edonis_dev_password
DB_DATABASE=edonis_lmsUseful Commands:
docker-compose up -d # Start PostgreSQL
docker-compose down # Stop PostgreSQL
docker-compose down -v # Stop and remove data
docker logs edonis_postgres # View logs- Run database migrations:
node ace migration:run- Seed the database with demo data:
node ace db:seed- Start the development server:
bun run dev- Open your browser:
http://localhost:3333
After running seeders, these accounts are available:
| Role | Password | |
|---|---|---|
| Admin | admin@edonis.test | password |
| Manager | manager@edonis.test | password |
| Teacher | teacher@edonis.test | password |
| Student | student@edonis.test | password |
# Development
bun run dev # Start dev server with HMR
bun run build # Build for production
bun start # Start production server
# Database
node ace migration:run # Run pending migrations
node ace migration:rollback # Rollback last batch
node ace migration:fresh # Drop all tables and re-run
node ace db:seed # Run database seeders
# Code Generation
node ace make:migration <name> # Create a migration
node ace make:model <name> # Create a model
node ace make:controller <name> # Create a controller
node ace make:validator <name> # Create a validator
# Code Quality
bun run typecheck # Type check TypeScript
bun run lint # Lint code
bun run format # Format with Prettier
# Testing
bun test # Run all tests
node ace test # Alternative test command
node ace test browser # Run E2E browser tests├── app/
│ ├── controllers/ # HTTP controllers
│ ├── models/ # Database models
│ └── middleware/ # Middleware
├── config/ # Configuration files
├── database/
│ └── migrations/ # Database migrations
├── inertia/
│ ├── pages/ # React pages
│ └── components/ # React components
├── resources/
│ └── views/ # Edge templates
└── start/
├── routes.ts # Application routes
└── kernel.ts # Middleware registration
When deploying to production with Supabase:
- Create a project at supabase.com
- Update
.envwith production credentials:
DB_HOST=db.xxxxx.supabase.co
DB_PORT=5432
DB_USER=postgres
DB_PASSWORD=<your-production-password>
DB_DATABASE=postgres
SUPABASE_URL=https://xxxxx.supabase.co
SUPABASE_ANON_KEY=<your-production-anon-key>- Run migrations:
node ace migration:run --forceEdonis LMS takes security seriously, especially given that LMS platforms handle sensitive student data.
- CodeQL Analysis: Runs on every PR and weekly, scanning for:
- SQL/Command injection vulnerabilities
- Cross-Site Scripting (XSS)
- Authentication/authorization flaws
- Sensitive data exposure
- Cryptography issues
- Dependency Review: Checks for vulnerable dependencies on PRs
- Security Audit:
bun auditruns in CI to detect known vulnerabilities
If you discover a security vulnerability, please report it responsibly:
- Do not open a public issue
- Email security concerns to the maintainers
- Allow time for a fix before public disclosure
See GitHub Security Advisories for known issues.
We welcome contributions! Please see our CLAUDE.md for architecture details and development guidelines.
- Fork the repository
- Create a feature branch:
git checkout -b feature/amazing-feature - Make your changes following our coding standards
- Run tests:
bun test - Commit with conventional commits:
git commit -m "feat: add amazing feature" - Push and create a Pull Request
Apache License 2.0
Copyright 2025 argile agency
Licensed under the Apache License, Version 2.0 (the "License"). You may obtain a copy of the License at:
http://www.apache.org/licenses/LICENSE-2.0
This project uses Apache 2.0 for:
- 🛡️ Patent protection for users and contributors
- 🏢 Enterprise-friendly adoption
- 🔒 Trademark protection for the "Edonis" brand
- ⚖️ Clear contribution terms
See LICENSE and NOTICE files for details.
Compared to existing LMS solutions:
| Feature | Edonis | Moodle | Canvas | Blackboard |
|---|---|---|---|---|
| Modern Stack | ✅ TypeScript/React | ❌ PHP | ❌ Ruby | ❌ Java |
| AI Integration | ✅ Native | |||
| Mobile-First | ✅ PWA | ❌ | ||
| License | Apache 2.0 | GPL | AGPL | Proprietary |
| Developer Experience | ✅ Excellent | ❌ | ❌ | |
| Plugin System | ✅ Type-safe | ✅ | ❌ |
See CLAUDE.md for detailed architecture and feature roadmap.
- ✅ User management with RBAC
- ✅ Authentication & authorization
- ✅ Dynamic homepage system with role-based content
- ✅ Theme system (light/dark/system)
- 🚧 Course management system
- 🚧 Course enrollment workflows
- 🚧 Assignment workflow & evaluations
- 🚧 Gradebook & progress tracking
- 🚧 Communication tools (forums, messaging)
- 🔮 AI content generation (quizzes, summaries, objectives)
- 🔮 Personalized learning paths
- 🔮 Automated assessment & essay scoring
- 🔮 AI tutoring chatbot
- 🔮 PWA with offline support
- 🔮 Mobile optimization & touch gestures
- 🔮 Push notifications
- 🔮 Plugin marketplace & ecosystem
- 🔮 Advanced learning analytics
- 🔮 Video conferencing integration (Zoom, Google Meet)
- 🔮 Gamification features (badges, leaderboards)
- 🔮 Real-time collaboration tools
- 🔮 Multi-language support (i18n)
- 🔮 Advanced multi-tenancy features
- 🔮 SSO integrations (SAML, OAuth)
- 🔮 Full standards compliance (SCORM 2004, xAPI, LTI 1.3, QTI 2.1)
- 🔮 Advanced security features
- 🔮 Performance optimization for 10k+ users
- 🔮 Enterprise support & SLA options
- Documentation: CLAUDE.md
- Issues: GitHub Issues
- Discussions: GitHub Discussions
Built with amazing open-source projects:
- AdonisJS - The TypeScript framework
- React - UI library
- Inertia.js - Modern monolith approach
- shadcn/ui - Beautiful UI components
- Tailwind CSS - Utility-first CSS
Made with ❤️ by argile agency | Website | Documentation