
Description
You upload an ebook to KDP or Apple Books and a day later get a rejection saying the file does not conform, with an error code that tells you nothing about which chapter or which line broke. EpubCheck moves that step onto your own machine: one command and it names the file, line and column — a missing dc:language, an itemref pointing at something not in the manifest, an unclosed XHTML tag, each pinned to an exact spot.
It is the W3C's official EPUB validator, and the storefronts run the same rules during ingestion, so a clean local check means format is no longer what gets you rejected. Version 5.4 validates against the EPUB 3.4 Candidate Recommendation.
Full specification checks: OCF container structure, the OPF package document, XHTML and SVG content, CSS, the navigation document, media overlays and internal reference consistency, with findings graded FATAL / ERROR / WARNING / USAGE.
Line and column precision: every message carries a file path, a position and a lookup-able message ID such as RSC-005 or OPF-049, so fixing it is not guesswork.
Multiple report formats: beyond console text it writes XML, XMP or JSON reports, which drop straight into a publishing pipeline for automated QA.
Profiles and single-file mode: validate against the Dictionaries, EDUPUB, Indexes and Previews extension specs, or check a lone OPF, XHTML, SVG or nav document without packaging a whole book first.
Expanded directory checking:
Portable and cross-platform: written in Java, so the unpacked jar runs on Windows, macOS and Linux, and it can be embedded as a library in your own toolchain.
It is the W3C's official EPUB validator, and the storefronts run the same rules during ingestion, so a clean local check means format is no longer what gets you rejected. Version 5.4 validates against the EPUB 3.4 Candidate Recommendation.
Features
Full specification checks: OCF container structure, the OPF package document, XHTML and SVG content, CSS, the navigation document, media overlays and internal reference consistency, with findings graded FATAL / ERROR / WARNING / USAGE.
Line and column precision: every message carries a file path, a position and a lookup-able message ID such as RSC-005 or OPF-049, so fixing it is not guesswork.
Multiple report formats: beyond console text it writes XML, XMP or JSON reports, which drop straight into a publishing pipeline for automated QA.
Profiles and single-file mode: validate against the Dictionaries, EDUPUB, Indexes and Previews extension specs, or check a lone OPF, XHTML, SVG or nav document without packaging a whole book first.
Expanded directory checking:
--mode exp validates an unpacked folder directly, so a book in progress can be checked on every edit instead of being rezipped each time.Portable and cross-platform: written in Java, so the unpacked jar runs on Windows, macOS and Linux, and it can be embedded as a library in your own toolchain.
