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