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.
alt="") are respected, not flagged.<input>, <select> and <textarea> fields that a screen reader can’t name.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:
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.
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.
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.
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.