{"id":402056,"date":"2026-11-12T16:29:22","date_gmt":"2026-11-12T16:29:22","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/waysill\/"},"modified":"2026-11-12T16:29:08","modified_gmt":"2026-11-12T16:29:08","slug":"waysill","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/waysill\/","author":23601884,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.1.1","stable_tag":"1.1.1","tested":"7.1.4","requires":"6.6","requires_php":"7.4","requires_plugins":null,"header_name":"Waysill","header_author":"Saffo","header_description":"Checks the post or page you edit for WCAG issues, such as missing alt text, low contrast and skipped headings, and explains each fix.","last_updated":"2026-11-12 16:29:08","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"https:\/\/saffo.dev\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":82,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.1.1":{"tag":"1.1.1","author":"saffodev","date":"2026-11-12 16:29:08","revision":3798794}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3798794,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3798794,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3798794,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3798794,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.1.1"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3798794,"resolution":"1","location":"assets","locale":"","width":1440,"height":900},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3798794,"resolution":"2","location":"assets","locale":"","width":1440,"height":900},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3798794,"resolution":"3","location":"assets","locale":"","width":1440,"height":900},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3798794,"resolution":"4","location":"assets","locale":"","width":1440,"height":900}},"screenshots":{"1":"The Accessibility sidebar in the block editor: issue counts by impact and issues grouped by WCAG criterion.","2":"An opened issue: what is wrong, who it affects, and fix steps for editors and for developers.","3":"Show in preview outlines the failing element with its issue number.","4":"Settings \u2192 Waysill: WCAG level, best-practice rules, roles that see results, check on save and deleting stored results."}},"plugin_section":[],"plugin_tags":[1447,1953,17214,23713,1956],"plugin_category":[34],"plugin_contributors":[292333],"plugin_business_model":[],"class_list":["post-402056","plugin","type-plugin","status-publish","hentry","plugin_tags-a11y","plugin_tags-accessibility","plugin_tags-alt-text","plugin_tags-contrast","plugin_tags-wcag","plugin_category-accessibility","plugin_contributors-saffodev","plugin_committers-saffodev"],"banners":{"banner":"https:\/\/ps.w.org\/waysill\/assets\/banner-772x250.png?rev=3798794","banner_2x":"https:\/\/ps.w.org\/waysill\/assets\/banner-1544x500.png?rev=3798794","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/waysill\/assets\/icon-128x128.png?rev=3798794","icon_2x":"https:\/\/ps.w.org\/waysill\/assets\/icon-256x256.png?rev=3798794","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/waysill\/assets\/screenshot-1.png?rev=3798794","caption":"The Accessibility sidebar in the block editor: issue counts by impact and issues grouped by WCAG criterion."},{"src":"https:\/\/ps.w.org\/waysill\/assets\/screenshot-2.png?rev=3798794","caption":"An opened issue: what is wrong, who it affects, and fix steps for editors and for developers."},{"src":"https:\/\/ps.w.org\/waysill\/assets\/screenshot-3.png?rev=3798794","caption":"Show in preview outlines the failing element with its issue number."},{"src":"https:\/\/ps.w.org\/waysill\/assets\/screenshot-4.png?rev=3798794","caption":"Settings \u2192 Waysill: WCAG level, best-practice rules, roles that see results, check on save and deleting stored results."}],"raw_content":"<!--section=description-->\n<p>Waysill tests each post or page you edit against WCAG 2.2 AA from inside the editor. Every finding says what is wrong, who is affected and how to repair it, with short examples plus a link to W3C guidance.<\/p>\n\n<h4>What gets checked<\/h4>\n\n<ul>\n<li>Colour contrast of text, buttons as your theme renders them, with a suggested colour that passes<\/li>\n<li>Images, linked images without alt text<\/li>\n<li>Form fields lacking labels; links, buttons with no accessible name<\/li>\n<li>Skipped heading levels, empty headings, empty links<\/li>\n<li>ARIA misuse within blocks, shortcodes or page builder output<\/li>\n<\/ul>\n\n<h4>Free, without limits<\/h4>\n\n<ul>\n<li>Check now button in the block editor sidebar or classic editor box<\/li>\n<li>Optional check on save<\/li>\n<li>Highlight any issue on a preview<\/li>\n<li>Contrast details, headings outline, explanations for every rule<\/li>\n<li>Unlimited checks; no account, no sign-up<\/li>\n<\/ul>\n\n<h4>Pro: paid, $79 per year for one site<\/h4>\n\n<ul>\n<li>Site scan of all posts, pages, custom post types plus archives, run from your dashboard<\/li>\n<li>Site-wide issue list, an accessibility column for admin lists<\/li>\n<li>CSV export, scan history, optional weekly digest email<\/li>\n<\/ul>\n\n<p>Pro is a separate plugin sold through Freemius. The free plugin never expires and never counts checks.<\/p>\n\n<h4>How it works<\/h4>\n\n<p>Checks run inside your browser while you are logged in: Waysill loads a preview from this same installation, tests it with the bundled open-source axe-core engine (MPL-2.0), then saves results as post meta in your database. Visitors see nothing; no code or credit is added to public pages.<\/p>\n\n<h4>Limits<\/h4>\n\n<p>Automated testing finds only part of all WCAG failures, so combine results with keyboard plus screen reader testing. Waysill does not make sites compliant and changes nothing by itself.<\/p>\n\n<h4>Privacy<\/h4>\n\n<p>The free plugin contacts no outside server: checks run in your browser against your own site, and results stay in your database.<\/p>\n\n<p>Freemius, which handles Pro sales, licences and updates, receives data only if an administrator clicks Allow and Continue on its opt-in screen. That screen lists what is sent: the admin's name and email address, the site URL, the WordPress, PHP and plugin versions and plugin events such as activation and deactivation. Skip sends nothing and keeps every feature working. Freemius terms: https:\/\/freemius.com\/terms\/ \u2013 Freemius privacy policy: https:\/\/freemius.com\/privacy\/<\/p>\n\n<h4>Source code and build<\/h4>\n\n<p>The editor scripts in <code>assets\/js\/<\/code> are built from the TypeScript sources in <code>src\/<\/code> (the shared Waysill core is in <code>src\/core\/<\/code>). They are bundled with esbuild, not minified, and use the React, components and data packages that WordPress loads; <code>src\/package.json<\/code> lists the build tools. <code>assets\/vendor\/axe\/axe.js<\/code> is the unmodified axe-core 4.14.0 release file with its licence.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>In the dashboard, go to Plugins \u2192 Add New Plugin, search for Waysill and click Install Now, then Activate.<\/li>\n<li>Allow or skip the Freemius opt-in screen. Everything works either way.<\/li>\n<li>Open a post or page in the editor and click the Accessibility icon in the top bar (in the classic editor, use the Accessibility box beside the post), then Check now.<\/li>\n<li>Optional: choose the WCAG level, best-practice rules and the roles that see results in Settings \u2192 Waysill.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"what%20can%20automated%20checks%20not%20find%3F\"><h3>What can automated checks not find?<\/h3><\/dt>\n<dd><p>Automated checks find only part of all WCAG failures. They cannot judge whether alt text describes an image well, whether link texts make sense, whether the reading and focus order are logical, whether everything works with a keyboard alone, or whether videos have correct captions. Test your pages with a keyboard and a screen reader too. A result without issues does not mean a page is accessible.<\/p><\/dd>\n<dt id=\"where%20are%20the%20results%20stored%3F\"><h3>Where are the results stored?<\/h3><\/dt>\n<dd><p>In your own database. Each check stores its result with the post as post meta (<code>_waysill_result<\/code> and <code>_waysill_counts<\/code>). Your settings are stored in the option <code>waysill_settings<\/code>, and each user's check on save choice in user meta. Nothing is sent anywhere else.<\/p><\/dd>\n<dt id=\"how%20do%20i%20remove%20all%20data%3F\"><h3>How do I remove all data?<\/h3><\/dt>\n<dd><p>To delete stored results only, use Delete all stored results in Settings \u2192 Waysill. To remove everything, deactivate and delete the plugin on the Plugins screen: Waysill then removes its settings, all stored results and the user choices.<\/p><\/dd>\n<dt id=\"who%20can%20see%20the%20results%3F\"><h3>Who can see the results?<\/h3><\/dt>\n<dd><p>Users who can edit the post and have a role chosen in Settings \u2192 Waysill (administrators always can). Show in preview works only for these users; visitors never see any outline or other output from Waysill.<\/p><\/dd>\n<dt id=\"does%20check%20on%20save%20slow%20down%20saving%3F\"><h3>Does check on save slow down saving?<\/h3><\/dt>\n<dd><p>No. When it is on, the check starts in your browser after the post has been saved. Saving and publishing never wait for it.<\/p><\/dd>\n<dt id=\"what%20if%20my%20site%20does%20not%20allow%20its%20pages%20in%20frames%3F\"><h3>What if my site does not allow its pages in frames?<\/h3><\/dt>\n<dd><p>Some security plugins forbid framing. Waysill then opens the preview in a new tab, checks it there and closes the tab. It never changes your security headers.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.1.1<\/h4>\n\n<ul>\n<li>The Freemius SDK now ships in <code>vendor\/freemius\/<\/code>, where Freemius' integration instructions put it, so the wordpress.org upload scan accepts the plugin. No change in behaviour.<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Renamed to Waysill (was Curbcut).<\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<p>First release for WordPress.<\/p>\n\n<ul>\n<li>WCAG 2.2 checks (axe-core 4.14.0) of the post or page you edit, from the Accessibility panel in the block editor or the Waysill box in the classic editor.<\/li>\n<li>Issues counted by impact and grouped by WCAG criterion, each with what is wrong, who it affects, fix steps for editors and for developers, and the W3C guidance.<\/li>\n<li>Show in preview: outline and numbered badge on the failing element, for logged-in users who can edit the post.<\/li>\n<li>Optional check after each save, per user, off by default.<\/li>\n<li>Settings \u2192 Waysill: WCAG level, best-practice rules, roles that see results, check on save default, delete all results.<\/li>\n<li>Pro: site scan with pause and resume, site-wide issue list with filters, accessibility column in post lists, CSV export, 12-month scan history and an optional weekly digest email.<\/li>\n<\/ul>","raw_excerpt":"Checks posts and pages in the editor for WCAG issues (missing alt text, low contrast, unlabeled fields, skipped headings) and explains each fix.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/402056","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=402056"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/saffodev"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=402056"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=402056"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=402056"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=402056"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=402056"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=402056"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}