Tessera

A JavaScript framework for building eLearning courses.

Free and MIT licensed. Needs Node.js 24 or newer. Designed for AI-assisted authoring.

The wiring is standard. The design is yours.

Tessera handles what the LMS needs: tracking, completion, scoring, and saved state. You and your AI assistant handle the design, with the built-in components or your own.

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8

Workplace Safety

Reporting hazards

Report anything that blocks an exit or could cause a fall, even if it looks minor.

Which should you report?

Blocked fire exit

Wet floor with signage

Page 3 of 8 BackNext
LV 2★ 340 XP
  1. 3

Mission 3 · Reporting hazards

Which of these do you report?

ABlocked fire exit

BWet floor with signage

Workplace Safety

03/08

Reporting hazards

Report anything that blocks an exit or could cause a fall, even if it looks minor.

Which should you report?

Blocked fire exit

Wet floor with signage

Design and build whatever you want

Page layoutsMenus & navigationVideo lessonsInteractive mapsTimelinesSimulationsGamesAnything else

LMS record · SCORM 1.2

cmi.core.lesson_location page-3

cmi.core.lesson_status incomplete

cmi.core.score.raw 100

cmi.suspend_data {"q1":"exit"}

Design changes: 0 Record changes: 0

Custom components connect to Tessera through the same hooks as the built-in ones, so anything you build is tracked, scored, and resumed the same way. See how the hooks work.

Author with AI

Focus on the instructional design while your assistant handles the build. Describe what you want in plain English and it writes the pages, builds the quiz, and drops your assets in place. The preview in your browser updates as it goes.

Every workspace ships the authoring guide your assistant reads first.

Every build gets checked

Every build flags structure and accessibility problems, so they get fixed while you work.

terminal
# build it, render it, audit it
pnpm check product-101

# pass or fail against the ruleset you pick:
# WCAG 2.0 A, 2.0 AA, or 2.1 AA

The audit renders every page in a real browser and checks for accessibility and structural issues.

Keep every course in one workspace

One workspace holds every course, plus any components they share. It's all plain files, so you can version and collaborate on your courses with git and GitHub.

my-courses/
my-courses/
├── package.json        # one set of dependencies for every course
├── shared/             # your design system, shared across courses
├── courses/
│   ├── starter-course/ # each course is a self-contained folder
│   └── …               # add as many as you like
└── AGENTS.md           # points your assistant to the authoring guide

Each course is a self-contained folder that exports on its own. No proprietary format, no seat licence.

Send it to any LMS

Run pnpm export <course> and get a package you can upload today. One course, every standard.

Emit custom xAPI statements from any component when completion and score are not enough.

Start building

Run this in a terminal, then follow the three steps it prints.

pnpm create tessera@latest my-courses
View on GitHub →

Don't have Node.js or pnpm? Start with Getting started.

Copied