CoreLMS is a small, open Learning Management System — and an experiment.
It exists to make two arguments, one with code and one with what comes next.
The "core" functionality of a Learning Management System — courses, modules, activities, assessments, enrollments, grades, announcements, roles, permissions — is now easily replicable by a single developer using AI-agentic tools. CoreLMS is the working proof. The full feature set lives in this repository, under an MIT license, free for anyone to use, fork, study, or replace.
If the basic LMS is a commodity, the interesting question is no longer can we build one. It is what should we build instead.
After three decades of LMS adoption, these systems still have very little to do with teaching and learning. They manage courses. They manage files. They manage assignments, grades, announcements, enrollments, and permissions. Those things matter — but they are not the same as advancing teaching and learning.
A different architecture is needed. That work is long-term, and even if it materializes, institutions will not transition overnight. So there needs to be a Plan B.
Plan B is to evolve the Learning Management System. CoreLMS is the testbed for that evolution.
The questions this project wants to explore:
- How can AI be used not merely to automate administration, but to support teaching?
- How can learning science be built into the architecture rather than sprinkled on top as an afterthought?
- Can a system built to manage courses become something that genuinely helps improve teaching and learning?
Early. The codebase is a working LMS; the research agenda on top of it is just beginning. Expect things to change.
CoreLMS is looking for collaborators. If the argument resonates with you — as a developer, educator, learning scientist, instructional designer, or institutional leader — please get in touch. The goal is not simply to build another LMS. The goal is to use a simple, open system as a testbed for rethinking what learning software should do.
Open an issue to introduce yourself, share an idea, or suggest a direction.
- Framework: Next.js 16 (App Router) with React 19 Server Components
- Language: TypeScript
- Database: PostgreSQL on Neon with Drizzle ORM
- Auth: Clerk (roles in
publicMetadata.role) - Styling: Tailwind CSS 4 with Radix UI / shadcn components
- Icons: HugeIcons
- Role-based access for learners, instructors, and admins
- Course → module → section → activity content hierarchy
- Activity types: watch, listen, read, write
- Assessments: open-ended and auto-graded MCQ
- Per-activity completions and learner notes
- Instructor gradebook and managed enrollment
- Admin tools for roster, ingestion, and app settings
- OpenStax content library ingestion
- Node.js 20+
- A PostgreSQL database (Neon recommended)
- A Clerk account for authentication
# Install dependencies
npm install
# Configure environment
cp .env.example .env.local # then fill in the values below
# Run database migrations
npm run db:migrate
# Start the dev server
npm run devOpen http://localhost:3000 to use the app.
DATABASE_URL= # Neon Postgres connection string
NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY=
CLERK_SECRET_KEY=
npm run dev # Start dev server
npm run build # Production build
npm run lint # Run ESLint
npm run db:generate # Generate Drizzle migrations from schema changes
npm run db:migrate # Apply migrations to the databaseapp/ # Next.js App Router pages
components/ui/ # Reusable UI components (shadcn-based)
lib/ # Server actions, auth, schema, db helpers
drizzle/ # SQL migration files
scripts/ # Database migration and ingestion scripts
docs/ # UI/UX specs and roadmaps
The current reference deployment runs on Netlify. Set the environment variables listed above in your site settings and connect the GitHub repo.
MIT — see LICENSE.