The Modern Open-Source Learning Management System
Features β’ Quick Start β’ Hosted Service β’ Contributing
EaseLMS is a modern, open-source Learning Management System built with Next.js, TypeScript, and Supabase. It provides a complete solution for creating, managing, and delivering online courses with features like video lessons, interactive quizzes, progress tracking, certificates, and payment integration.
- π Modern Stack - Built with Next.js 16, React 19, and TypeScript
- π¨ Beautiful UI - Modern, responsive design with dark mode support
- π Secure - Built-in authentication, role-based access control, and data encryption
- π° Monetization Ready - Integrated payment processing (Stripe, Flutterwave)
- π± Mobile First - Fully responsive design that works on all devices
- π Feature Rich - Courses, quizzes, certificates, analytics, and more
- π§ Self-Hostable - Complete control over your data and infrastructure
- π Open Source - Free to use, modify, and distribute
- π Create unlimited courses with rich content editor
- π₯ Video lessons with progress tracking
- π Document resources (PDF, DOC, images)
- π Course prerequisites and dependencies
- π·οΈ Course categories and tags
- π Course analytics and enrollment tracking
- π° Multiple enrollment modes (free, paid, recurring, closed)
- π¬ Preview videos for course marketing
- π± Mobile-responsive course player
- β―οΈ Video playback with progress saving
- β Interactive quizzes with multiple question types
- π Real-time progress tracking
- π Achievement badges and certificates
- π¬ Discussion and support features
- π Lesson resources and downloadable materials
- π₯ User management (Admin, Instructor, Learner roles)
- π Comprehensive analytics dashboard
- π³ Purchase and payment management
- π¨ Custom branding and theming
- Platform name and description
- Custom logos (light and dark mode)
- Favicon customization
- SEO metadata (title, description, keywords, image)
- βοΈ Flexible course settings and enrollment modes
- π§ Email notifications
- π Role-based access control
- π³ Stripe integration for global payments
- π Flutterwave for African markets
- π± Multi-currency support
- π° One-time and recurring payment options
- π¦ Purchase history and receipts
- π Payment webhook handling
- π Automated certificate generation
- βοΈ Custom certificate templates
- π Digital signatures
- π PDF export
- π Completion and achievement certificates
- π§ TypeScript for type safety
- π¦ Monorepo structure with Turborepo
- π¨ shadcn/ui component library
- π§ͺ Well-structured, maintainable codebase
- Framework: Next.js 16 (App Router)
- Language: TypeScript
- UI Library: React 19
- Styling: Tailwind CSS
- Components: Radix UI + shadcn/ui
- Database: Supabase (PostgreSQL)
- Authentication: Supabase Auth
- File Storage: AWS S3 + CloudFront
- State Management: TanStack Query
- Forms: React Hook Form + Zod
- Payments: Stripe & Flutterwave
- PDF Generation: PDFKit
- Video Player: Media Chrome
- Monorepo: Turborepo
- Node.js 18.0 or higher
- npm 10.0 or higher
- A Supabase account (free tier works)
- AWS account (for S3 storage, optional for development)
-
Clone the repository
git clone https://github.com/enyojoo/easelms.git cd easelms -
Install dependencies
npm install
-
Set up environment variables
Create a
.env.localfile inapps/lms/:# Supabase NEXT_PUBLIC_SUPABASE_URL=your_supabase_project_url NEXT_PUBLIC_SUPABASE_ANON_KEY=your_supabase_anon_key SUPABASE_SERVICE_ROLE_KEY=your_supabase_service_role_key # AWS S3 (optional for development) AWS_REGION=us-east-1 AWS_ACCESS_KEY_ID=your_aws_access_key AWS_SECRET_ACCESS_KEY=your_aws_secret_key AWS_S3_BUCKET_NAME=your_bucket_name AWS_CLOUDFRONT_DOMAIN=your_cloudfront_domain # Payment Gateways (optional) STRIPE_SECRET_KEY=your_stripe_secret_key NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY=your_stripe_publishable_key FLUTTERWAVE_SECRET_KEY=your_flutterwave_secret_key NEXT_PUBLIC_FLUTTERWAVE_PUBLIC_KEY=your_flutterwave_public_key # App URL NEXT_PUBLIC_APP_URL=http://localhost:3000
-
Set up Supabase Database
a. Create a Supabase Project
- Go to supabase.com and sign up/login
- Click "New Project"
- Choose your organization, enter project name, database password, and region
- Wait for the project to be created (takes ~2 minutes)
b. Get your Supabase credentials
- Go to Project Settings β API
- Copy your
Project URL(this is yourNEXT_PUBLIC_SUPABASE_URL) - Copy your
anonpublickey (this is yourNEXT_PUBLIC_SUPABASE_ANON_KEY) - Copy your
service_rolesecretkey (this is yourSUPABASE_SERVICE_ROLE_KEY) - Update your
.env.localfile with these values
c. Run the database migration
- In your Supabase project, go to SQL Editor
- Click "New Query"
- Open the file
apps/lms/supabase/migrations/database_setup.sqlfrom this repository - Copy the entire contents of the file
- Paste it into the SQL Editor
- Click "Run" (or press Cmd/Ctrl + Enter)
- Wait for the migration to complete (you should see "Success. No rows returned")
d. Verify the migration
- Go to Table Editor in Supabase
- You should see all the tables created:
profiles,courses,lessons,enrollments,progress,payments,certificates,instructors,resources,quiz_questions,quiz_settings,quiz_attempts,quiz_results,course_instructors,course_prerequisites,lesson_resources, andplatform_settings
-
Start the development server
npm run dev
This will start both applications:
- LMS Application: http://localhost:3000 (apps/lms)
- Website: http://localhost:3001 (apps/website)
-
Open your browser
Navigate to http://localhost:3000 for the LMS application
After setting up the database, create your first admin user through the Supabase dashboard or by using the signup API endpoint.
Once logged in as an admin, navigate to Settings β Brand to customize your platform:
- Set your platform name and description
- Upload custom logos for light and dark modes
- Set a custom favicon
- Configure SEO metadata (title, description, keywords, and image)
These settings will automatically update across your entire platform, including the logo in the sidebar, favicon in browser tabs, and SEO tags for better search engine visibility.
EaseLMS is a monorepo containing two main applications:
easelms/
βββ apps/
β βββ lms/ # Main LMS application (deploy this for the learning platform)
β β βββ app/ # Next.js app router pages
β β β βββ admin/ # Admin dashboard pages
β β β βββ learner/ # Learner-facing pages
β β β βββ api/ # API routes
β β β βββ auth/ # Authentication pages
β β βββ components/ # React components
β β βββ lib/ # Utilities and helpers
β β β βββ aws/ # AWS S3 integration
β β β βββ certificates/ # Certificate generation
β β β βββ payments/ # Payment processing
β β β βββ supabase/ # Supabase utilities
β β βββ hooks/ # Custom React hooks
β β βββ utils/ # Utility functions
β β βββ supabase/ # Database migrations
β βββ website/ # Landing page website (deploy this for marketing site)
β βββ app/ # Next.js app router pages
β βββ components/ # Landing page components
βββ components/ # Shared components
βββ package.json # Root package.json
βββ turbo.json # Turborepo configuration
Applications:
apps/lms- The main Learning Management System application. Deploy this for your course platform.apps/website- The marketing landing page. Deploy this separately for your public-facing website.
Don't want to manage infrastructure? We offer a fully managed hosted service with:
- β Zero Setup - Get started in minutes, not weeks. We handle all the infrastructure setup and configuration
- β Managed Infrastructure - We manage servers, databases, backups, and updates so you can focus on your content
- β Security & Compliance - Enterprise-grade security with regular updates, SSL certificates, and compliance standards
- β Professional Support - Get help when you need it with priority support and dedicated account management
- β Automatic Backups - Your data is automatically backed up daily with point-in-time recovery options
- β Scalable Infrastructure - Scale seamlessly as your learner base grows without worrying about infrastructure limits
Learn more about our hosted service, including pricing plans and features: https://www.easelms.org/hosted
We welcome contributions! Please see our Contributing Guide for details.
- Fork the repository
- Create your feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add some AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
# Install dependencies
npm install
# Run development server
npm run dev
# Run linting
npm run lint
# Build for production
npm run buildThis project is licensed under the AGPL-3.0 License - see the LICENSE file for details.
For Your Own Use (Self-Hosting):
- β You can freely download, install, and use EaseLMS for your own organization
- β You can modify the code to fit your needs
- β No restrictions on internal use - use it privately within your organization
Commercial Use & Distribution:
- β You can use EaseLMS commercially (e.g., offer courses for sale)
- β You can modify and distribute EaseLMS
β οΈ Important: If you modify EaseLMS and provide it as a hosted service (SaaS), you must make your modifications available under AGPL-3.0β οΈ If you want to create a proprietary hosted service without sharing modifications, you'll need a commercial license
Commercial License: If you need to use EaseLMS in a proprietary application or provide a hosted service without open-sourcing your modifications, commercial licenses are available. Contact us for more information.
- π§ Email Support
- π¬ Contact Us - Schedule a meeting or send us a message
- π¦ Twitter (X) - Follow us for updates
- Mobile app (React Native)
- Advanced analytics and reporting
- SCORM compliance
- Live video conferencing integration
- AI-powered course recommendations
- Multi-language support
- Advanced quiz types (drag-and-drop, matching, etc.)
- Learning paths and curriculum builder
Made with β€οΈ to power learning
Website β’ Twitter (X)