← toolkit.bot

How to Validate EPUB3 Accessibility with ACE by DAISY

ACE by DAISY is the reference validator for EPUB3 accessibility and EPUB Accessibility 1.1 conformance. If you’re producing accessible EPUBs — whether for EAA compliance, distributor submission, or internal accessibility audits — ACE is the tool you’ll use to document conformance.

This tutorial covers installing ACE, running a validation check, reading the report, and understanding the key criteria.

What ACE By DAISY Checks

ACE validates EPUB3 files against:

Key criteria ACE tests (relevant to EAA compliance):

Installation

ACE requires Node.js (version 14 or later). Install Node.js from nodejs.org if you don’t have it.

Install ACE globally via npm:

npm install -g @daisy/ace

Verify installation:

ace --version

You should see output like @daisy/ace 1.3.x.

Running a Validation Check

Basic usage:

ace --outdir ./ace-report ./your-document.epub

This produces an HTML report in the ./ace-report directory.

Options:

# Specify a custom title in the report
ace --outdir ./report --title "Annual Report 2025" ./annual-report.epub

# Verbose output during processing
ace --verbose --outdir ./report ./document.epub

# Silent mode (no stdout, just write report)
ace --silent --outdir ./report ./document.epub

Batch validation (multiple EPUBs):

# Linux/macOS
for f in *.epub; do ace --outdir "./reports/${f%.epub}" "$f"; done
# Python cross-platform batch processing
import subprocess, pathlib

epub_dir = pathlib.Path("./epubs")
report_dir = pathlib.Path("./ace-reports")
report_dir.mkdir(exist_ok=True)

for epub_path in epub_dir.glob("*.epub"):
    out_dir = report_dir / epub_path.stem
    result = subprocess.run(
        ["ace", "--outdir", str(out_dir), str(epub_path)],
        capture_output=True, text=True
    )
    print(f"{epub_path.name}: {'PASS' if result.returncode == 0 else 'FAIL'}")

Reading the ACE Report

ACE generates two output files in the --outdir directory:

Report Structure

The HTML report has three sections:

1. Summary
Shows the EPUB metadata, accessibility metadata, and overall pass/fail status. Key fields:

2. Violations Table
Lists each WCAG violation with criterion (e.g., “WCAG 1.4.10 Reflow”), impact level (critical, serious, moderate, minor), location in the EPUB (file and element), and a help link.

3. Metadata
Shows the accessibility metadata from the EPUB OPF package document.

Understanding Key Results

WCAG 1.4.10 Reflow — the EAA-critical criterion

If your EPUB passes WCAG 1.4.10, the violations table will have no entries for 1.4.10 Reflow. If it fails, you’ll see entries like:

WCAG 1.4.10 Reflow
IMPACT: critical
LOCATION: EPUB/content/chapter01.xhtml (css-fixed-size)
HELP: https://daisy.github.io/ace/rules/html/wcag/reflow

Why EPUBs fail 1.4.10:

Fix for reflowable EPUBs: Replace fixed width with max-width or percentage widths in CSS. Remove any fixed-layout OPF declarations.

If the EPUB was converted from PDF by toolkit.bot, it will pass WCAG 1.4.10 — toolkit.bot produces reflowable EPUB3.

Missing Alt Text (WCAG 1.1.1)

If images lack alt text:

WCAG 1.1.1 Non-text Content
IMPACT: critical
LOCATION: EPUB/images/figure1.xhtml img[src="figure1.png"]

Fix: Add alt="Description of figure" to the <img> element. For decorative images, use alt="" and role="presentation".

Missing Heading Structure (WCAG 1.3.1)

If the EPUB uses visual styling to create headings rather than <h1><h6> elements:

WCAG 1.3.1 Info and Relationships
IMPACT: serious
LOCATION: EPUB/content/intro.xhtml .chapter-title

Fix: Use semantic heading elements. <h1>Chapter Title</h1> not <p class="chapter-title">Chapter Title</p>.

EPUB Accessibility Metadata

ACE checks for required accessibility metadata in the OPF. A passing EPUB should include:

<meta property="schema:accessibilitySummary">
  This publication conforms to EPUB Accessibility 1.1 and WCAG 2.1 Level AA.
</meta>
<meta property="schema:accessMode">textual</meta>
<meta property="schema:accessModeSufficient">textual</meta>
<meta property="dcterms:conformsTo">
  EPUB Accessibility 1.1 - WCAG 2.1 Level AA
</meta>

Integrating ACE into CI/CD

For publishers automating EPUB production, integrate ACE as a quality gate:

# GitHub Actions example
name: EPUB Accessibility Check

on:
  push:
    paths:
      - '**.epub'

jobs:
  ace-check:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Install Node.js
        uses: actions/setup-node@v4
        with:
          node-version: '20'

      - name: Install ACE
        run: npm install -g @daisy/ace

      - name: Run ACE validation
        run: |
          for f in dist/*.epub; do
            ace --outdir "reports/${f%.epub}" "$f"
          done

      - name: Upload reports
        uses: actions/upload-artifact@v4
        with:
          name: ace-reports
          path: reports/

ACE exits with code 0 on success and non-zero on failures. This allows CI pipelines to block deployment of non-conforming EPUBs.

Using ACE Reports as Compliance Evidence

ACE report HTML files are suitable for regulatory compliance documentation:

For EAA compliance: The report confirms WCAG 2.1 AA conformance including WCAG 1.4.10. National market surveillance authorities accept ACE reports as evidence for EPUB Accessibility 1.1 conformance.

For distributor submission: Ingram, Kobo, and Apple Books are moving toward requiring EPUB Accessibility 1.1 metadata. The ACE report confirms conformance metadata is correctly set.

For accessibility statements: Reference ACE reports in your accessibility statement:

Key publications are available in accessible EPUB3 format conforming to EPUB Accessibility 1.1 (WCAG 2.1 AA). ACE by DAISY validation reports are available on request.

Generate an EPUB3 that passes ACE

toolkit.bot converts PDFs to accessible EPUB3 that passes ACE by DAISY validation — including WCAG 1.4.10 Reflow. Free, no account required.

  1. Upload at toolkit.bot/pdf2epub
  2. Download the EPUB3
  3. Run ace --outdir ./report ./document.epub
  4. Open report.html — WCAG 1.4.10 Reflow: pass
Convert a PDF free →

Further Reading

ACE by DAISY is maintained by the DAISY Consortium and is free, open-source, and the reference tool for EPUB accessibility validation.