EPUB validator · plain-language report
EPUB validator with plain-language findings and a full file list
Upload an EPUB and see which files break the structure basics. Every finding says what is wrong in plain words and names the file it is in. You also get a list of every file in the book with its size and SHA-256 checksum. Your EPUB is not changed.
- mimetype
- container.xml
- Package document
- Alt text
- Language tags
- Scripts
or drop it here
What you get · sample file names
A findings list with the file for each problem
status: review0 errors · 2 warnings · 1 review item
| Severity | Code | File |
|---|---|---|
| warning | IMAGE_ALT_MISSINGAn image on this page has no alt text | OEBPS/ch2.xhtml |
| warning | LANG_MISSINGThe html element has no lang attribute | OEBPS/notes.xhtml |
| review | ACTIVE_SCRIPTThe page contains a script element | OEBPS/quiz.xhtml |
findings.csvSeverity, code and file for each problemepub-inventory.csvEvery file in the archive with path, size and SHA-256manifest.jsonWhat was checked and the overall status
Result kept for 24 hours. Your EPUB is not changed.
What the report gives you
Findings you can act on
- Each problem in plain words, with a severity: error, warning or review
- The path of the file where it was found, such as
OEBPS/ch2.xhtml - An overall status: failed if there is any error, otherwise review
A full file inventory
- Every file in the archive with path, size and SHA-256
- Useful to compare two builds of the same book
- Downloaded as CSV together with the findings and a manifest
Where it stops
- Six structural checks, not every rule of the EPUB specification
- No repairs: you decide how to fix each finding
- Before a store upload, also run EPUBCheck on the final file
The six checks
- error
mimetype
The archive must start with a file called
mimetypethat readsapplication/epub+zip. - error
container.xml
META-INF/container.xmlmust exist, because reading systems use it to find the book. - error
Package document
The package file that container.xml points to must be in the archive.
- warning
Alt text
Every XHTML or HTML page is searched for images without an
altattribute. - warning
Language tag
Pages whose
htmlelement has nolangattribute are listed. - review
Scripts
Pages with a
scriptelement are listed so you can decide whether they belong there.
Any error sets the status to failed; otherwise the status is review. An EPUB whose mimetype file is compressed is rejected before the check runs, with a message saying so.
How it works
- 1
Add the EPUB
One file. There are no settings to choose.
- 2
The check runs
The archive is opened and each page is read. Your file is not changed.
- 3
Read and download
Go through the findings, then download the CSV files and the manifest.
Cost: 3 successful jobs a day are free, with no account. Failed jobs are not counted. If you check many books a day, Pro allows up to 200 jobs a day for €12.99/month or €89.99/year.
Questions before you run it
Does it check the whole EPUB specification?
No. It runs six structural checks and lists every file in the archive. Before you send a book to a store or distributor, also run EPUBCheck, the free open-source validator maintained by the W3C, on the final file. A clean report here does not mean EPUBCheck would pass.
When is this check the right one?
When you want a readable answer to a few concrete questions: is the mimetype right, can reading systems find the package, which pages lack alt text or a language tag, and which pages contain scripts. You also get a list of every file in the book, which helps when you compare two builds.
Will it repair the problems it finds?
No. Your file is left as it is and you get a findings list to work from. Rewriting prose or CSS just to silence a validator error is deliberately out of scope.
Why does it flag scripts?
Scripted content is a common reason a title is refused or degraded by reading systems. The findings list names the files that contain a script element so you can decide what to do.
Does a clean report mean a retailer will accept the file?
No. Retailer acceptance depends on each retailer's own ingestion rules, and this tool makes no claim about it.
What does it cost?
3 successful jobs a day are free, with no account. Failed jobs are not counted and the counter resets at midnight UTC. Pro allows up to 200 jobs a day for €12.99/month or €89.99/year.