Accessibility testing in the browser and on the server.
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.
bin Remove the Quail CLI dependency. Nov 29, 2015
config Require PhantomJS in quail-core, not quail Jan 18, 2016
dist Fixing dist Jan 25, 2016
docs quick spelling fix (#400) Jun 3, 2016
examples finished getStackedAssert Sep 22, 2014
scripts Adding the test get scope wrapping script. Jan 2, 2016
src Fixing some tests that failed on eval Jan 19, 2016
test Moved the Chai assertions to Quail core and required them as a module. Jan 17, 2016
.babelrc Oops, should not have commited the change to the babelrc Jan 2, 2016
.editorconfig JSCS: Add linefeed at the end of each file Oct 28, 2014
.eslintrc Remove tests.json references. Dec 14, 2015
.gitignore Mucking with the packages and scripts. Nov 29, 2015
.jscsrc JSCS rules for JSDoc3. Not quite ready. Getting a lot of noise from it Aug 9, 2015
.jshintrc Fixed jshint and jscs after adding more files to these checks May 17, 2015
.nvmrc Upping node version in .nvm Nov 29, 2015
.quailrc Hacking at the jQuery weeds Dec 17, 2015
.travis.yml removing quail-cli from the Travis install Nov 30, 2015 Updating changelot Jan 25, 2016
LICENSE-MIT Update all version numbers to the latest tag: 2.2.18 Jun 30, 2015 Deprecation Nov 27, 2016
package.json 3.1.0 Jan 25, 2016

Build Status


All projects have a useful lifespan. Quail was born during a time when accessibility testing, as a discipline, was maturing. There were numerous teams building solutions in parallel -- Quail was just one of these. In the end, we were all orbiting around the same general approach. Technology may have been a distinguishing factor a couple years ago, but even these advantages have largely dissolved as solutions have evolved and improved over time.

Given the realities of the market and the limited time that the Quail team can devote to this project, we are initializing deprecation for this project. Folks are welcome to fork it or volunteer to maintain it, but realistically, there are better options out there.

If you are looking for one, we recommend aXe: the Accessibility Engine by Deque Labs.

Quail: Accessibility Information Library

The project website is

Quail is a Node module and a jQuery plugin that lets you easily check HTML for adherence to accessibility standards. It comes with over 200 tests which implement Open Accessibility Tests and comes with WCAG 1.0, WCAG 2.0, and Section 508 guidelines.

Developers can build their own guidelines, or easily build a custom guideline that integrates with their project. While the project supports checking entire HTML pages, integration with a CMS to check partial HTML content is probably the most popular use case.

Notice for developers working in the 2.2.x version.

Please base your changes on the master-2.2.x branch.


You will need the following installed on your system to run Quail.

  1. Node.js
  2. Grunt & Grunt CLI
  3. Bower
  4. Java JDK (To run Selenium Server)
  5. Karma

Using Quail


Run the following commands to build Quail.

git clone
cd quail
npm install
bower install
grunt build

Using Quail from the command line

To see the Quail CLI API, run the following. You can also add the Quail bin directory to your PATH if you are so inclined.

./bin/quail --help

Once the command is set up, you can run the following to test any addressable web page.

./bin/quail eval

Write the results as a JSON object out to file in an existing directory.

./bin/quail evaluate -o ./analyses

You can also pass configurations to the evaluator.

./bin/quail evaluate -c ~/path/to/myconfig.json -o ./analyses

This is the default set of configurations. Your configurations will replace the defaults.

  "phantomjs": {
    "resourceTimeout": 5000
  "blacklists": {
    "domains": [
    "mimetypes": [
    "headers": []

The phantomjs configurations affect the PhantomJS runtime.

The blacklists block resource resource requests from PhantomJS by the resource's domain, its mime type or a header name in the request. Currently the only header value that can be blocked is the value of Accept (mime type).

To work on an existing assessment in a browser (so that breakpoints can be set in the console), run the following.

./bin/quail dev aMustHaveTitle

The following is experimental, which means it probably won't work. You can generate a new assessment with this command.

./bin/quail gen someNewAssessment


Core unit tests in Karma

./node_modules/karma/bin/karma start ./config/karma-unit.conf.js

Testing assessments in Selenium

All assessments. This takes about 10 minutes to run.

node ./test/assessmentSpecs/testRunner.js

An individual assessment. This takes about 2 seconds to run.

node ./test/assessmentSpecs/testRunner.js -I aMustHaveTitle

In a specific browser.

_BROWSER=chrome node ./test/assessmentSpecs/testRunner.js


Full documentation is available via


Pull requests should be made against the master branch.

We are currently looking for the following types of contritions.

  1. Help with our current Milestone objectives.
  2. JavaScript enthusiasts who want a chance to build out:
  3. A dependency injection load pattern: Replace our load-order-depending spinup with an Inversion of Control pattern
  4. A pub/sub pattern: Refactor the custom event bubbling code in the core Classes (e.g. TestCollection) to use a real event pub/sub library
  5. Improve an NPM package, better build and test scripts, etc: Improve the Quail NPM package



HTML Test Suite for WCAG 2.0, Sorted by Guideline


QUAIL is covered under the MIT License, and is copyright (c) 2015 by Jesse Beach. Current license is at