Getting started
On this page
Run the core from a checkout: validate, build, test and preview the sample courses, then point an agent at one.
Requirements
- Node 24 or later, and pnpm 11 for a checkout (
npm install -g pnpm;package.jsonnames the version). The core is TypeScript run directly by Node (type stripping): there is no build step. - ffmpeg and ffprobe for media (imports, narration, quality presets), found through
ELABORA_FFMPEGandELABORA_FFPROBEor on thePATH. Validation and builds of courses without new media do not need them. - A browser for looks, captures, layout checks, LMS tests and free-object gates only. Validation and builds need none.
- With the Elabora desktop app installed and opened once, these workflows use isolated workers of its own Electron: nothing else to install. The app’s bundled command needs no separate Node, Chrome or Edge.
- Without the app, the default tries Chrome, Edge, then Playwright’s downloaded Chromium (
pnpm exec playwright-core install chromium). --browser chrome,msedge,playwright,firefoxorwebkitselects an external engine for package and object tests;electronrequires the app;chromiumis the default provider.ELABORA_BROWSER=externalturns off the discovery of the app for every workflow, and developers can pointELABORA_ELECTRON_EXECUTABLEandELABORA_ELECTRON_ENTRYat an Electron executable and the app’s browser worker. Results name the engine and version that ran; object baselines are kept per engine and OS. See Rendering, browsers and captures.
Install
git clone https://github.com/aureliendossantos/elabora-core.git
cd elabora-core
pnpm install
node bin/elabora.js is the elabora command in a checkout; node bin/elabora.js help lists every command (Command line).
Validate, build and test a sample
examples/diagnostic-reseau is a short French module: a plan, seven screens (a title screen first), a decision, a 3D free object, an assessment and three narrated screens.
node bin/elabora.js validate examples/diagnostic-reseau --profile moodle,successfactors
Every finding has a stable code and a fix (Diagnostic codes). --profile names the target LMSs: their limits apply (LMS profiles).
node bin/elabora.js build examples/diagnostic-reseau --profile moodle,successfactors
The build writes dist/<id>-<version>-scorm12.zip, a machine-readable report and a proof dossier (plan coverage screen by screen, tracking, accessibility, the human checks still to do). The same sources always give the same bytes. --target web adds a module for a plain web server (Web target).
node bin/elabora.js test examples/diagnostic-reseau --profile moodle,successfactors,docebo
test runs the package in an LMS emulator that replays each profile’s launch topology, abrupt closes and resume (SCORM 1.2 and the LMS emulator).
Look at it
node bin/elabora.js preview examples/diagnostic-reseau
node bin/elabora.js look examples/diagnostic-reseau --screen simulation
preview serves the course live, standalone and in the LMS emulator, and reloads after each rebuild. While designing, look shows one screen in well under a second once warm (a look server keeps one browser for the course; no build; free objects included). A narrated screen has its timeline: node bin/elabora.js timeline examples/diagnostic-reseau chemin lists its steps, lines and cues, and look … --screen chemin --sheet draws it as a storyboard.
examples/planetary-gearset is an English engineering module that uses the design layer and components: layouts, a quiz fork with generated diagrams, maths, numeric questions and a responsive 3D test bench. examples/orbital-rendezvous and examples/medieval-charts are two more. examples/phishing-by-numbers shows the twelve chart blocks on narrated slides: a short English module on spotting and reporting phishing, told through a fictional company’s numbers, whose charts follow an ElevenLabs voice word by word. examples/coffee-in-brief is the reference for the starter blocks: a Rise-style scroll course, from coffee cherry to cup, that uses every block and each of its presentations, with the opening layout on each lesson’s first page.
Start a course
node bin/elabora.js init my-course --id my-course --title "My course" --lang en
init writes course.json, a placeholder plan.json and the course’s AGENTS.md, the rules every agent working on it follows. The format specification explains each file.
Or start from a module template (D68): a charter already made (theme, fonts, components, an animated backdrop and its variants) on 14 screens of placeholder texts, the same screens in every template.
node bin/elabora.js templates # Organic, Flow, Clear, Shapes, Editorial, Paper, Watercolour
node bin/elabora.js init my-course --template flow --id my-course --title "My course" --lang en
The course is a copy of templates/flow under your id and title, in the language asked (each template is in English, translated into French). Its README.md says how the charter works and how to make it a brand’s.
Work with an agent
Agents work through the same operations, as MCP tools or from the shell:
node bin/elabora.js mcp examples/diagnostic-reseau # an MCP server on stdio, scoped to one course
node bin/elabora.js tools list --json # the operations and their input schemas
node bin/elabora.js tools call elabora_overview examples/diagnostic-reseau
examples/diagnostic-reseau/ holds a .mcp.json: a Claude Code session opened there has the elabora tools. Agents start with elabora_overview, follow the course’s AGENTS.md and load the skills served as MCP resources. Working with an agent explains the transports, and Agent tools lists every operation.
What 0.1 does not do yet
- SCORM 1.2 for LMSs (D2) and a web target for static hosting (D41); no cmi5, xAPI, LTI or dispatch yet.
- The emulator reproduces documented behaviour on scorm-again; it does not replace a smoke test in SCORM Cloud and a test learner in the client’s LMS. Profiles list what remains to be measured.
- Firefox and WebKit runs need their binaries (
pnpm exec playwright-core install firefox webkit). WebKit passed the LMS and object probes on macOS but differs from Chromium’s snapshots; Firefox may be blocked at startup on recent macOS by the protection of its app-data folder. - Storyline and Rise imports are in beta (D47).
- Media encoding was exercised with Homebrew’s ffmpeg on macOS (without libwebp, images fall back to JPEG or PNG; without zimg, HDR is converted without tone mapping); Windows encoders are untested.