Ally (a11y)

Self-hosted accessibility widget powered by Sienna (MIT). Adds font, contrast, language, and navigation tools to any page. No external CDN — the JS bundle is served from your own server.

Ally (a11y) — Accessibility Widget for ProcessWire

Ally adds a self-hosted accessibility widget to your ProcessWire site. Powered by Sienna (MIT), the JS bundle ships with the module and is served from your own server — no external CDN, no third-party requests at runtime. The OpenDyslexic font used by the dyslexia-friendly mode is also bundled locally (vendor/fonts/), so even that feature makes no off-site requests.

Features


  • Font size adjustment
  • Dark, light, and high contrast modes
  • High / low saturation, monochrome
  • Dyslexia-friendly font
  • Highlight links and headings
  • Letter spacing, line height, bold text
  • Reading guide, stop animations, big cursor
  • 53 languages with auto-detection from html[lang] or browser settings
  • Full ProcessWire multi-language support — maps $user->language to the correct locale automatically
  • Configurable position, offset, button size, and accent color
  • Skips admin pages and Chrome Lighthouse by default

Installation


  1. Download or clone this repository into site/modules/Ally/
  2. Go to Modules → Refresh in the ProcessWire admin
  3. Install Ally (a11y)
  4. Configure via Modules → Ally

The module ships with a prebuilt JS bundle at vendor/sienna-accessibility.umd.js. No build step required.

Configuration


All settings are available in the module config UI:

SettingDefaultDescription
EnabledYesToggle widget on/off without uninstalling
PositionBottom Left8 positions available
Offset X / Y20pxDistance from the edge
Button Size58pxWidget button diameter
Accent ColorSienna defaultOptional custom color for the widget button (background + outline)
LanguageAutoAuto-detect or force a specific locale
Skip Admin PagesYesDo not inject on admin template
Skip LighthouseYesDo not inject when Chrome-Lighthouse UA is detected

Requirements


  • ProcessWire 3.0.200+
  • PHP 8.1+

Notes


  • The widget is injected by hooking Page::render. If you serve pages through ProCache (static HTML files bypassing PHP), the hook does not run and the widget is not injected on cached pages — exclude those pages from ProCache or disable caching for them if you need the widget there.
  • Overlay accessibility widgets supplement, but do not replace, building accessible markup. Use Ally alongside good semantic HTML, not instead of it.

License


MIT — see LICENSE

Bundled third-party components:

  • Sienna Accessibility Widget by Benny Luk — MIT.
  • OpenDyslexic font by Abelardo Gonzalez — SIL Open Font License 1.1.

More modules by Maxim Semenov

  • Context

    Export ProcessWire site context for AI development (JSON + TOON formats)
  • WireWall

    Advanced traffic firewall with VPN/Proxy/Tor detection, rate limiting, and JS challenge
  • Page Markdown

    Export any page to a clean Markdown file. Adds an export button to the page editor.
  • Subscribe

    Newsletter subscription handler with lists, double opt-in, honeypot, rate limiting and unsubscribe link.
  • Plausible Analytics

    Plausible Analytics dashboard using Stats API v2 with page-edit widget, traffic trends chart, and geo/device tabs.
  • Ichiban

    Comprehensive SEO module: meta/OG/schema, audit, redirects, revisions, email reports.
  • AiWire

    AI integration for ProcessWire. Supports Anthropic, OpenAI, Google, xAI, and OpenRouter.
  • Rapid

    EditorJS block editor fieldtype for ProcessWire. Stores content as JSON, renders HTML server-side via pluggable block renderers.
  • Robots.txt

    Manage robots.txt file through the admin UI with presets and visual editor.

All modules by Maxim Semenov

Install and use modules at your own risk. Always have a site and database backup before installing new modules.