Skip to content
NEWSADA Title II web deadlines: April 24, 2026 (50k+ pop) · April 26, 2027 (under 50k) — Is your site compliant?ADA Title II: April 2026 & 2027 deadlinesLearn more →

Moodle

Note
Requires Moodle 4.1 or later and server access to copy files. Compatible with standard Moodle hosting and self-hosted installations.

The local_angstroma_a11y Moodle plugin adds a floating accessibility toolbar to every page of your Moodle site. Students can enable 20+ accessibility features and their preferences persist across sessions via the Angstroma API.

Features included

  • Reading Mask
  • Bionic Reading
  • Dyslexia Font
  • Text Spacing
  • High Contrast
  • Dark Mode
  • Warm Overlay
  • Large Text (A+/A-)
  • Large Cursor
  • Large Targets
  • Focus Highlight
  • Keyboard Mode
  • Reduced Motion
  • AI Content Simplification
  • AI Hints
  • AI Rephrasing
  • AI Vocabulary

Installation

  1. Download the plugin package from the Angstroma Portal under Settings → Integrations → Moodle
  2. Copy the local_angstroma_a11y folder to your Moodle server:
    cp -r local_angstroma_a11y /path/to/moodle/local/angstroma_a11y
  3. Go to Site Administration → Notifications — Moodle will detect the new plugin and prompt you to install it. Click Upgrade Moodle database now.
  4. Navigate to Site Administration → Plugins → Local plugins → Angstroma Accessibility
  5. Enter your API key from the Angstroma Portal and click Save changes
Tip
You can toggle the plugin on/off and change the toolbar position (left/right) from the plugin settings page without editing any files.

Plugin settings

SettingDescription
API KeyYour Angstroma tenant API key
API URLAPI endpoint. Leave empty to use the production API.
PositionFloating button position: left or right (default: right)
EnabledToggle the widget on or off site-wide

How the plugin works

The plugin injects the Angstroma widget script into every Moodle page footer using Moodle's local_angstroma_a11y_before_footer() hook. The Moodle user ID is passed as the data-student-id attribute, so the student's accessibility profile is loaded automatically on each page visit.

local/angstroma_a11y/lib.php (simplified)
function local_angstroma_a11y_before_footer() {
    global $USER;
    $apikey  = get_config('local_angstroma_a11y', 'apikey');
    $enabled = get_config('local_angstroma_a11y', 'enabled');
    if (!$enabled || empty($apikey)) return;

    $studentid = $USER->id ? 'moodle_user_' . $USER->id : '';

    echo '<script
        src="https://cdn.angstroma.com/widget.js"
        data-key="' . s($apikey) . '"
        data-student-id="' . s($studentid) . '"
        async
    ></script>';
}

Requirements

  • Moodle 4.1 or later
  • PHP 8.1+
  • Angstroma API key — any paid plan for higher-ed / corporate; Schools or Enterprise + signed DPA for K–12 deployments
  • Moodle server administrator access
Warning
Privacy posture. The plugin passes the Moodle user ID as data-student-id (e.g. moodle_user_42). Angstroma stores only that opaque identifier — no Moodle name, email, or course metadata is persisted. See our Privacy Policy §12 and FERPA page.
Important
Schools / Enterprise plan required for K–12 deployments. When the plugin is installed on a Moodle instance serving K–12 students, the integration is gated to the Schools and Enterprise tiers and activates only after a signed Data Processing Agreement is on file. Higher-ed and corporate Moodle deployments can use any paid plan. See the Schools overview.