EPUB Validator

Find out exactly why a store or reader is rejecting your book.

Errors vs warnings

ERROR — WILL BE REJECTED

A missing mimetype, a broken container, absent required metadata, or manifest entries pointing at files that are not in the archive.

WARNING — WORTH FIXING

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.

The seven checks this validator runs, what each one is testing, and the symptom when it fails
CheckWhat it meansWhat breaks if it fails
mimetype entryThe 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.xmlMETA-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 XMLThe .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 metadatadc: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 resolutionEvery 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 spineThe 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 documentAn 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.

Common EPUBCheck codes, what each one means in plain English, the fix, and whether this validator catches it
CodeWhat it meansThe fixCaught here?
PKG-006The 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-007The 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-001A path in container.xml or the OPF points at a file that is not there.Correct the path, or restore the file.Yes
RSC-005A 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-007A referenced resource — an image, a stylesheet, a chapter — is missing from the archive.Restore the file, or remove the reference to it.Yes
OPF-003A 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-014Content 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-015The reverse: a declared property the file does not actually use.Remove the property.No — requires full EPUBCheck
HTM-004A chapter carries an old or malformed doctype.Replace it with plain <!DOCTYPE html>.No — requires full EPUBCheck
NCX-001The 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.

How this browser validator compares to EPUBCheck, and which one to use when
This validatorEPUBCheckUse which
What it readsThe package: archive structure, container, OPF, manifest, spine, navEverything: package, every XHTML chapter, every stylesheet, every referenceEPUBCheck for a complete audit
DepthSeven structural checksThe full EPUB specification, hundreds of rulesEPUBCheck before you publish
OutputPlain English naming the file and the faultCodes plus line and column numbersThis tool for triage; EPUBCheck for a record you can hand to a publisher
Where it runsYour browser tab. The file stays on your deviceYour own machine, via the command line or a GUI wrapperEither — neither needs an upload if you run EPUBCheck locally
SpeedInstant. No download, no toolchainSeconds, after installing Java and the checkerThis tool when you want an answer now
File sizeNo cap. The ceiling is your device's memoryNo capEither
CostFree, no accountFree and open sourceEither

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.

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.