Canvas LMS — Codebase Overview
Repository
| Field | Detail |
|---|---|
| GitHub | instructure/canvas-lms |
| Stars | 6,478 |
| Forks | 2,886 |
| License | AGPL-3.0 |
| Primary Language | Ruby (~45%), JavaScript/TypeScript (~45%) |
| Created | ~2011 |
Tech Stack
- Backend: Ruby on Rails (one of the largest Rails monoliths in production)
- Database: PostgreSQL (MySQL support dropped years ago)
- Cache / Queue: Redis for caching, sessions, and job queuing
- Job Processing:
inst-jobs(Instructure's custom Delayed Jobs fork) - Analytics Store: Apache Cassandra (optional, for page views / high-write workloads)
- Frontend: React (migrating from legacy jQuery/Backbone), TypeScript (active migration from JS)
- Build: Webpack
- Component Library: Instructure UI (InstUI) — Instructure's open-source React design system
- APIs: Extensive REST API (hundreds of endpoints) + growing GraphQL API
- Standards: LTI 1.1, 1.3, LTI Advantage, SCORM
- Rich Content: Standalone RCE service built on TinyMCE (
canvas-rce-api) - Scaling: Switchman gem for horizontal PostgreSQL sharding; multi-tenant SaaS architecture
Architecture Highlights
- Massive Rails monolith with plugin/engine architecture (
gems/plugins/) - Multi-tenant: a single instance serves many institutions (accounts)
- Key directories:
app/(Rails core),ui/(frontend React/TS),spec/(RSpec tests),gems/(internal gems/plugins),db/migrate/(thousands of migrations) - Docker Compose-based development environment
- Some microservice extraction (RCE, Rich Content Service) but core remains monolithic
Release Model
Canvas follows a continuous deployment model for its SaaS product, with production deploys multiple times per week. Open-source/self-hosted releases are tagged as date-based stable releases (e.g., release/2026-03-11.30). There is no semantic versioning.
Canvas publishes release notes through the Canvas Community rather than a traditional CHANGELOG.
Recent Development Activity
The repo sees dozens of commits per day from Instructure engineers, with 80,000–90,000+ lifetime commits. Recent sample commits (February 2026):
accept icon enum values instead of icon_url in APIMove coverage-istanbul-loader to devDependenciesclean up from_user enrollments after merge moveselenium: bypass rack app for static assetsallow spaces in login and registration input fields
Active Development Areas
- Frontend modernization: CoffeeScript → JS/TS, jQuery/Backbone → React
- TypeScript adoption: Systematic
.js→.ts/.tsxconversion - InstUI upgrades: Migrating to newer Instructure UI versions
- GraphQL API expansion: Adding queries and mutations
- Accessibility: Continuous WCAG 2.1 AA compliance work
- Performance: Database query optimization, caching improvements
Notable Recent Features & Changes
- Block Editor: New content editor experience for course pages
- New Quizzes: Continued migration from Classic Quizzes to the new assessment engine
- AI features: Instructure has been adding AI-powered tools (some require additional licensing)
- Smart Search: AI-powered search capabilities
- Pace Plans: Self-paced learning features
- Discussion Redesign: Overhauled discussion boards UI
- Canvas Credentials: Verifiable digital credentialing work
Key Technical Migrations
- CoffeeScript removal: Long-running effort, mostly complete
- jQuery/Backbone deprecation: Being replaced by React
- Rails 7.x: Keeping current with Rails versions
- Ruby 3.x: Tracking modern Ruby versions
- Node.js LTS: Current with LTS versions for frontend build
Caveats
- AGPL-3.0 means any modifications deployed as a network service must be open-sourced — more restrictive than MIT/Apache
- The open-source version diverges from the commercial SaaS product (some features are not in the open-source repo)
- Self-hosting is complex and resource-intensive; Instructure provides limited support for self-hosted installations
- Community around self-hosted Canvas is smaller than the commercial user base