ℹ️ The eXeLearning editor is fetched from the shared release and unpacked into the plugin when the playground boots, so the first load may take a few extra seconds. ELPX upload, viewer and preview work normally.
Activity-type Moodle module to create, edit and grade eXeLearning resources (
.elpx) directly in Moodle, preserving eXeLearning's native navigation and supporting multiple gradebook items per activity.
For teachers and administrators: see the User Guide for step-by-step instructions on adding, editing and grading eXeLearning resources, plus site-administration and troubleshooting notes.
Activity-type module to embed eXeLearning v4 packages (.elpx) inside Moodle while
preserving the package's native sidebar navigation and recording one or more
gradable items per resource in the Moodle gradebook (e.g. a single resource with
two quizzes registers two independent gradebook columns).
This plugin merges the best of two siblings:
mod_exeweb— read-only viewer that keeps eXeLearning's native sidebar but does not grade.mod_exescorm— SCORM player with eXeLearning extensions; grades into a single aggregated column.
mod_exelearning keeps the native sidebar AND splits the grade into independent
columns per iDevice. Click the Preview in Moodle Playground badge above to try
it without installing anything.
This plugin targets every supported Moodle release from Moodle 4.5 LTS (the
minimum required, see version.php: $plugin->requires = 2024100700) up to the
latest Moodle 5.x stable.
| Moodle branch | Status |
|---|---|
| 4.5.x (LTS) | Supported (minimum required version) |
| 5.0.x | Supported · default reference image |
| 5.1.x | Supported |
| 5.2.x (latest stable) | Supported · covered by CI |
Older Moodle releases (3.x, 4.0–4.4) are not supported because the plugin
relies on the multi-grade-item API (get_grade_item_names and the
itemnumber_mapping interface) that was finalised in Moodle 4.5 LTS. The plugin is expected to keep
working with newer Moodle releases as they appear; if you find an incompatibility
please open an issue at https://github.com/ateeducacion/mod_exelearning/issues.
- Moodle: 4.5 or later (see table above).
- PHP: 8.1+ (whatever Moodle 4.5+ requires).
- Database: any database supported by the Moodle release in use.
- Browser: any modern, evergreen browser with JavaScript enabled.
The fastest way to try this plugin is Moodle Playground. Click the badge at the top of this README and you'll get a fresh Moodle in your browser with:
mod_exelearninginstalled.- A demo course
EXEDEMO(Demo eXeLearning · ejemplo de uso). - Teacher account
teacher_demo / Demo!2026. - Two enrolled students
alumno1,alumno2 / Demo!2026. - An activity preloaded with
actividad-evaluable.elpx(2 gradable iDevices:trueorfalse+guess).
Nothing to install locally; everything runs in the browser via WebAssembly.
Important: It is recommended to install from a release ZIP, which includes the embedded editor pre-built for optimal performance. If the release ZIP does not include the editor, or if you want to install a newer version, administrators can download it from GitHub Releases via the Manage embedded editor page in the plugin settings.
- Download the latest ZIP from Releases.
- Log in to your Moodle site as an admin and go to Site administration > Plugins > Install plugins.
- Upload the ZIP file with the plugin code. You should only be prompted to add extra details if your plugin type is not automatically detected.
- Check the plugin validation report and finish the installation.
- Download and extract the latest ZIP from Releases.
- Place the extracted contents in
{your/moodle/dirroot}/mod/exelearning. - Log in to your Moodle site as an admin and go to Site administration > Notifications to complete the installation.
Alternatively, you can run
$ php admin/cli/upgrade.php
to complete the installation from the command line.
A docker-compose.yml is provided to spin up a self-contained test environment
based on erseco/alpine-moodle:v5.0.7 + MariaDB:
cp .env.dist .env # first time only
docker compose up -d # start Moodle + MariaDB
docker compose logs -f moodle # follow the install/seed progressOnce the install finishes (~1 minute), POST_CONFIGURE_COMMANDS automatically
runs scripts/setup_demo.php, which seeds the same content as the playground
badge above:
=== mod_exelearning · setup_demo ===
· Categoría creada: Demo eXeLearning (id=2)
· Curso creado: EXEDEMO (id=2)
· Profesor: teacher_demo / Demo!2026
· Estudiantes: alumno1, alumno2 / Demo!2026
· Actividad creada: Actividad evaluable (demo) (cmid=2, instance=1)
Moodle is then reachable at http://localhost with admin user / 1234 (override
via .env).
To regenerate the demo without reinstalling Moodle:
$ docker compose exec moodle php /var/www/html/mod/exelearning/scripts/setup_demo.php
To tear down keeping data: docker compose down. To wipe everything:
docker compose down -v.
Go to:
{your/moodle/dirroot}/admin/settings.php?section=modsettingexelearning
All settings live on a single admin page (see DEC-0009 for the rationale of dropping the eXeLearning Online integration — only the embedded editor remains):
- Embedded editor management (inline widget): install / update / repair /
uninstall the editor, downloading the latest release from GitHub
(
exelearning/exelearning) without leaving the settings page. - Styles: upload eXeLearning style packages (
.zip), enable/disable the editor's built-in styles, and optionally block users from importing styles bundled inside an.elpx. A dedicated Styles admin page lists and manages them.
The plugin supports two editor sources with the following precedence:
- Admin-installed (moodledata): downloaded from GitHub Releases via the
admin management page. Stored under
moodledata/mod_exelearning/embedded_editor/. - Bundled (plugin): included in the plugin release ZIP at
dist/static/.
An admin-installed version always takes precedence over the bundled version. If
neither source is available, the embedded editor cannot be used. The management
page requires the moodle/site:config and mod/exelearning:manageembeddededitor
capabilities.
When a teacher uploads a .elpx, the plugin extracts the package and detects
gradable iDevices from content.xml. The default gradebook model is per-iDevice
only: one visible column per detected gradable iDevice (itemnumber=1..N) and
no overall column — the two models are symmetric, with no hidden overall stub
(DEC-0038).
Pass-grade completion targets a registered gradable item directly (Moodle's
completion-by-grade). The teacher can switch the activity to overall only when a
single aggregated grade is preferred (SCORM-style). The former "both" mode was
removed in DEC-0008
to avoid double-counting and gradebook complexity. See
docs/GRADEBOOK.md for the full model.
Each submission is stored as an attempt (see DEC-0007); the gradebook value is the configured aggregation (highest / average / first / last / lowest). You can cap the number of attempts, let students review their past attempts, and delete attempts from the teacher report (the grade is recalculated). Completion can require a passing grade (SCORM-style, see DEC-0010).
Grading runtime uses a SCORM 1.2 bridge: a small window.API shim installed by
view.php accepts LMSSetValue calls from the iDevice's bundled pipwerks
wrapper and forwards them to track.php, which calls Moodle's grade_update().
xAPI support via core_xapi is on the roadmap.
The plugin exposes external functions for the official Moodle App and other
external clients, all registered under MOODLE_OFFICIAL_MOBILE_SERVICE and
enforcing context, login and capabilities in code
(DEC-0040):
| Function | Type | Capability | Purpose |
|---|---|---|---|
mod_exelearning_get_exelearnings_by_courses |
read | mod/exelearning:view |
List instances in courses (warnings for inaccessible ones; packageurl only for teachers). |
mod_exelearning_view_exelearning |
write | mod/exelearning:view |
Log a view (event + completion). |
mod_exelearning_get_exelearning_access_information |
read | — | The user's can* capability flags. |
mod_exelearning_get_user_attempts |
read | mod/exelearning:view (own); :viewreport (others) |
A user's attempts. |
mod_exelearning_get_user_grades |
read | mod/exelearning:view (own); :viewreport (others) |
A user's per-iDevice grades. |
mod_exelearning_save_track |
write | mod/exelearning:savetrack |
Submit per-iDevice scores for the current user. |
Limits / security. save_track reuses the same server-side pipeline as
track.php: scores are routed by stable iDevice objectid (unknown objectids are
ignored), the overall grade is recomputed server-side from the per-iDevice scores
(the client overall is never trusted), scores are clamped to the grade range and the
attempt cap is enforced. Tracking is SCORM 1.2 (score per iDevice + overall); xAPI
ingestion is on the roadmap. The navigable package content itself is served via
pluginfile, not through a web service.
See research/decisiones/adr/ for the full set of ADRs. Highlights:
- DEC-0003 — tracking standard and multi-grade-items (SCORM 1.2 now, xAPI roadmap).
- DEC-0006 — preview vs grading modes (done).
- DEC-0007 — multi-attempt support (done).
- DEC-0008 — overall vs per-iDevice grade aggregation (done).
- DEC-0009 — embedded editor only, no eXeLearning Online (done).
- DEC-0010 — SCORM-style completion by passing grade (done).
Developer/administrator reference docs live under docs/:
| Document | Scope |
|---|---|
| ARCHITECTURE.md | Responsibility map and request flows. |
| EXTERNAL_SERVICES.md | Web-service contract (classes/external ↔ db/services.php). |
| GRADEBOOK.md | Multi-item gradebook model (OVERALL vs PER-ITEM). |
| TRACKING.md | End-to-end tracking pipeline + security model. |
| ELPX_PACKAGE.md | .elpx parsing, iDevice detection and XML hardening. |
| EMBEDDED_EDITOR.md | Embedded editor source/lifecycle and postMessage bridge. |
| PRIVACY_BACKUP_FILES.md | Privacy, backup/restore and File API. |
| RELEASE_CHECKLIST.md | Objective beta→stable release gate. |
| AUDIT_FOLLOWUP.md | Reconciliation of the comparative report against current code. |
| USER_GUIDE.md | Teacher/admin step-by-step guide. |
For development setup, build instructions, and contributing guidelines, see
DEVELOPMENT.md. The full research history, including ADRs,
source fixtures and analysis notes, lives under
research/.
Please report bugs and feature requests on the GitHub issue tracker: https://github.com/ateeducacion/mod_exelearning/issues
Copyright 2026: ATE (Área de Tecnología Educativa) / Centro Nacional de Desarrollo Curricular en Sistemas no Propietarios (CeDeC) / INTEF (Instituto Nacional de Tecnologías Educativas y de Formación del Profesorado).
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should receive a copy of the GNU General Public License along with this program.