F

Fettle

0/5 (0 ratings) — active installs Updated Oct 3, 2026

Most accessibility plugins bolt a JavaScript widget onto your front end and patch the page every time someone loads it. Your actual content stays exactly as broken as it was.

Fettle works the other way around. It reads your posts and pages from the admin side, tells you in plain language exactly what’s wrong, and when you decide to fix something, the fix goes into the post itself. Nothing is added to your front end and nothing runs for your visitors, so your pages load exactly as fast as before.

What Fettle checks

  • Missing alt text – finds images with no alt attribute at all. Images you deliberately marked as decorative (alt="") are respected, not flagged.
  • Colour contrast – uses the standard W3C relative-luminance formula and resolves colours from your active theme’s palette (theme.json), so results reflect what visitors actually see rather than a guess.
  • Heading order – catches skipped levels, multiple H1s and empty headings that break screen reader navigation.
  • Form labels – flags <input>, <select> and <textarea> fields that a screen reader can’t name.
  • Link text – spots “click here”, bare URLs and other link text that doesn’t say where the link goes.
  • Theme landmarks – checks your active theme’s front page once for a main content area, navigation, banner and footer region.

Let AI draft the fix – you stay in control

On WordPress 7.0 or later, Fettle can use the AI provider you’ve already set up for your whole site under Settings > Connectors – no extra key needed. Or add your own API key for Gemini, Claude, OpenAI, Grok or OpenRouter. Either way, Fettle can suggest a fix for any single finding:

  • Alt text written from the image itself
  • A replacement text colour that passes contrast against its background
  • Descriptive link text based on where the link actually points

Every suggestion is shown to you first. You apply it or discard it – nothing is ever changed automatically, and none of your content is sent until you click the button for that specific finding.

Built to stay out of your way

  • Zero front-end footprint – no scripts, styles or widgets on your public site.
  • Smart caching – a page is re-scanned only when its content actually changes.
  • Per-finding dismissal – mark a single result as “Not an issue” without switching off the whole check.
  • Plain-language digest – a short summary at the top of your results tells you where to start.
  • Site Health integration – see which AI provider is configured at a glance, plus an explicit “Test connection” button when you want it.
  • Works fully without AI – every check runs locally. No key, no account, no signup.

Honest by design

No automated tool can certify a website against WCAG, and Fettle never pretends to. It checks a clearly defined set of WCAG 2.1 AA rules, shows you exactly what it found, and helps you fix it for real – in your content, where it matters. Every release is checked against a list of accessibility claims this plugin refuses to make.

Who it’s for

  • Site owners who want to fix real problems instead of hiding them behind a widget.
  • Agencies and freelancers who want a quick, reliable accessibility pass before handing a site over to a client.
  • Editors and content teams who want to catch missing alt text, vague links and broken heading structure across the whole site in one place.

External services

Every check in this plugin works entirely locally and sends nothing anywhere. The one exception, and it is entirely optional, is the AI-suggested fix feature: clicking “Generate AI fix” on a specific finding sends that finding’s data to the AI provider you configured, to receive a suggestion back. That provider is either the one set up for your whole site in WordPress under Settings > Connectors (WordPress 7.0+; the request then goes through WordPress’s own AI Client, to whichever service that connector uses, under that service’s terms), or – if you add your own API key in Fettle’s settings – Gemini, Claude, OpenAI, Grok, or OpenRouter, called directly.

  • For a missing-alt-text finding, that one image – and, for a published public page, its public URL – is sent. For a draft, private, or password-protected post, the image is read from your server and sent directly instead, so its URL is never transmitted.
  • For a contrast finding, only the two colour hex codes involved (background and failing text colour) are sent – no image, no content.
  • For a link-text finding, only the link’s current visible text and its destination URL are sent – no image, no other page content.

None of your content is ever sent without you clicking that button for that specific finding, and nothing is applied to your content until you separately click Apply. Without a provider configured, no such request is ever made, and every other check in this plugin is unaffected either way.

Once a key is saved for a direct provider, two other requests can go to that same provider, and neither sends any of your content: opening Fettle Settings fetches the provider’s list of available models (only your API key is sent; the list is cached for 24 hours so this doesn’t happen on every page load), and the “Test connection” button sends one minimal, text-only request to confirm the key and model work.

When you use your own API key, depending on which provider you select in Settings, the plugin talks to one of the following:

Google Gemini
* Endpoint: https://generativelanguage.googleapis.com/v1beta/models/
* Terms of Service: https://developers.google.com/terms
* Privacy Policy: https://policies.google.com/privacy

Anthropic Claude
* Endpoint: https://api.anthropic.com/v1/messages
* Terms of Service: https://www.anthropic.com/legal/commercial-terms
* Privacy Policy: https://www.anthropic.com/legal/privacy

OpenAI
* Endpoint: https://api.openai.com/v1/chat/completions
* Terms of Service: https://openai.com/policies/terms-of-use
* Privacy Policy: https://openai.com/policies/privacy-policy

xAI (Grok)
* Endpoint: https://api.x.ai/v1/chat/completions
* Terms of Service: https://x.ai/legal/terms-of-service
* Privacy Policy: https://x.ai/legal/privacy-policy

OpenRouter
* Endpoint: https://openrouter.ai/api/v1/chat/completions
* Terms of Service: https://openrouter.ai/terms
* Privacy Policy: https://openrouter.ai/privacy
* Note: OpenRouter itself routes your request to one of many underlying model providers (OpenAI, Anthropic, Google, Meta, and others) depending on the model you select – see OpenRouter’s own policies for how it handles data passed to those upstream providers.