Skip to content

Canvas LMS — Codebase Overview

Repository

FieldDetail
GitHubinstructure/canvas-lms
Stars6,478
Forks2,886
LicenseAGPL-3.0
Primary LanguageRuby (~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 API
  • Move coverage-istanbul-loader to devDependencies
  • clean up from_user enrollments after merge move
  • selenium: bypass rack app for static assets
  • allow spaces in login and registration input fields

Active Development Areas

  • Frontend modernization: CoffeeScript → JS/TS, jQuery/Backbone → React
  • TypeScript adoption: Systematic .js.ts/.tsx conversion
  • 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

Schema Education — Internal Research