EPUB Validator
Find out exactly why a store or reader is rejecting your book.
Errors vs warnings
A missing mimetype, a broken container, absent required metadata, or manifest entries pointing at files that are not in the archive.
No navigation document, or an EPUB 2 package. The book opens, but the table of contents may be empty and some stores will complain.
What the report tells you
The validator runs seven structural checks against your file, in the order a reading app would hit them. Each one either passes or names the thing that is missing. There are no codes to look up.
| Check | What it means | What breaks if it fails |
|---|---|---|
mimetype entry | The archive must contain a file called mimetype holding exactly application/epub+zip. | The file is not recognised as an EPUB at all. Most readers refuse to open it; store ingestion rejects it before any other check runs. |
container.xml | META-INF/container.xml must exist and point at the package document. | Nothing knows where the book starts. The reader opens an empty shell or throws a generic "damaged file" error. |
| Package document XML | The .opf file must be well-formed XML. | The manifest, spine and metadata all become unreadable at once. This is the failure behind most "corrupt file" messages. |
| Required metadata | dc:title, dc:language and dc:identifier must all be present. | The book opens but arrives with no title or author. Every store rejects it — this is the single most common cause of a KDP bounce. |
| Manifest href resolution | Every file the manifest declares must actually exist in the archive. | Missing images, missing stylesheets, or a chapter that opens blank. The book looks broken rather than failing outright. |
| Non-empty spine | The spine must list at least one content document in reading order. | There is nothing to read. The reader opens the file and shows a blank page. |
| Navigation document | An EPUB 3 nav document (or an NCX for EPUB 2) should be present. | The table of contents is empty. The book is readable but you cannot jump between chapters, and some stores reject on this. |
Common EPUBCheck error codes, decoded
If you have already run EPUBCheck, or a store has quoted a code back at you, this is what each one means. Every code is a category prefix plus a number, and the prefix tells you which part of the book is wrong: PKG is the outer archive, OPF is the package document, RSC is a resource or reference, HTM is a chapter, NCX is the legacy navigation file.
| Code | What it means | The fix | Caught here? |
|---|---|---|---|
PKG-006 | The mimetype entry is missing, or is not the first file in the archive. | Rebuild the ZIP so mimetype is written first. A normal desktop archiver cannot guarantee this. | Partly — a missing entry is caught, an out-of-order one is not |
PKG-007 | The mimetype is compressed, or does not contain exactly application/epub+zip. | Store it uncompressed, with no trailing newline. | Partly — wrong contents are caught, compression is not |
RSC-001 | A path in container.xml or the OPF points at a file that is not there. | Correct the path, or restore the file. | Yes |
RSC-005 | A file could not be parsed. The code itself tells you almost nothing. | Read the sentence after the colon — it names a line and column. Usually an unclosed tag or a bare & that should be &. | Partly — flagged when the fault is in the package document, not when it is inside a chapter |
RSC-007 | A referenced resource — an image, a stylesheet, a chapter — is missing from the archive. | Restore the file, or remove the reference to it. | Yes |
OPF-003 | A file exists in the archive but the manifest never declares it. | Add it to the manifest, or delete it if it is genuinely unused. | No — requires full EPUBCheck |
OPF-014 | Content uses SVG, scripting, MathML or remote resources, but the manifest entry does not advertise it. | Add the properties attribute to that manifest item. Nothing is visibly broken; this is bookkeeping. | No — requires full EPUBCheck |
OPF-015 | The reverse: a declared property the file does not actually use. | Remove the property. | No — requires full EPUBCheck |
HTM-004 | A chapter carries an old or malformed doctype. | Replace it with plain <!DOCTYPE html>. | No — requires full EPUBCheck |
NCX-001 | The identifier in toc.ncx disagrees with dc:identifier in the OPF. | Make the two values equal. The Metadata Editor settles the OPF side. | No — requires full EPUBCheck |
Two of these ten are caught here in full and three in part. The rest need EPUBCheck itself, which parses every chapter and every stylesheet rather than the package alone. That difference is set out below. The long version of this table, with the reasoning behind each code, is in EPUB validation errors explained.
This validator vs EPUBCheck
EPUBCheck is a Java program maintained by the DAISY Consortium on behalf of the W3C. It is the authority. It cannot run in a browser tab, so this tool is not a port of it and does not pretend to be.
| This validator | EPUBCheck | Use which | |
|---|---|---|---|
| What it reads | The package: archive structure, container, OPF, manifest, spine, nav | Everything: package, every XHTML chapter, every stylesheet, every reference | EPUBCheck for a complete audit |
| Depth | Seven structural checks | The full EPUB specification, hundreds of rules | EPUBCheck before you publish |
| Output | Plain English naming the file and the fault | Codes plus line and column numbers | This tool for triage; EPUBCheck for a record you can hand to a publisher |
| Where it runs | Your browser tab. The file stays on your device | Your own machine, via the command line or a GUI wrapper | Either — neither needs an upload if you run EPUBCheck locally |
| Speed | Instant. No download, no toolchain | Seconds, after installing Java and the checker | This tool when you want an answer now |
| File size | No cap. The ceiling is your device's memory | No cap | Either |
| Cost | Free, no account | Free and open source | Either |
Our recommendation, plainly: run this first to find out whether something is obviously broken and where. Run EPUBCheck before final submission, especially for Apple Books. This tool catches the failures behind most real rejections; it does not catch all of them, and we would rather say so than lose you a submission.
Fix the error you found
Knowing what is broken is half of it. Each of these covers one failure mode end to end.
- EPUB validation errors explained The ten EPUBCheck codes above, with the reasoning behind each. Start here if a store quoted a code at you.
- Fixing corrupt EPUB files What to do when the package document itself is damaged and the book will not open at all.
- EPUB cover not showing The image is in the archive but not marked in the manifest. Why Calibre hides it, and the fix.
- EPUB table of contents problems Stray bullets, wrong order, missing chapters. All of it is the navigation file drifting from the spine.
- EPUB images not showing after conversion Almost always a broken manifest link rather than a lost picture.
- EPUB compatibility problems When the same file works in one reader and breaks in another, because one enforces a rule the other ignores.
Questions
Why did KDP reject my EPUB when it opens fine on my computer? +
Because your reading app is forgiving and KDP's ingestion is not. Calibre, Apple Books and most desktop readers will repair or ignore a missing navigation document, an odd doctype, or metadata that is present but empty. A store's pipeline has no reason to be generous — it checks, fails, and moves on. The usual culprits are a missing dc:identifier, a cover image below the minimum size, or a title in the file that disagrees with the title you typed into the dashboard. Run the file through this validator first; if it passes here and KDP still refuses it, the problem is one of KDP's own rules rather than the spec.
What is the difference between an error and a warning? +
An error means the file is broken. A missing mimetype, a broken container, absent required metadata, or a manifest entry pointing at a file that is not in the archive — the book will not open properly and no store will take it. A warning means the file works but carries a cost: no navigation document, or a package still declaring EPUB 2. For a book you will only read yourself, most warnings can wait. For a book headed to a store, clear them too, because ingestion systems often reject on warnings the specification tolerates.
Does passing this mean my book will be accepted? +
No, and we would rather be clear about that than sell you a false pass. This validator runs seven structural checks. EPUBCheck runs hundreds, and stores add their own rules on top of EPUBCheck — cover dimensions, metadata completeness, file size limits, identifier uniqueness. Passing here means the file is structurally sound and none of the common fatal faults are present. It does not mean Apple Books will accept it. For final pre-publication validation, run EPUBCheck.
Can I validate an EPUB 2 file? +
Yes. The validator reads both EPUB 2 and EPUB 3. An EPUB 2 package is reported as a warning with a note rather than an error, because most reading apps still open EPUB 2 without trouble and Kobo accepts it directly. If you are submitting to a store that wants EPUB 3, converting is a separate job from validating — this tool tells you the version, it does not upgrade it.
Is this the same as EPUBCheck? +
No. EPUBCheck is the official, exhaustive validator. This runs the structural checks that catch the overwhelming majority of real rejections, instantly and without uploading your file.
Does this work with DRM-protected books? +
No. Files with DRM can’t be opened by any converter. This tool works with DRM-free files — like the ones you export from your own writing tools or buy from DRM-free stores.