EPUB Validator
Checks EPUB structure — ZIP layout, container, OPF manifest, and file references. Runs in your browser.
How it works
Drop an .epub (or the .zip it really is) and the archive is opened and walked from the outside in: ZIP directory first, then the mimetype file, then META-INF/container.xml, then the OPF package it points at. Findings are listed with the file they belong to, split into errors that will make a reader reject the book and warnings that are worth fixing anyway.
What it checks
That the ZIP central directory is intact and not truncated, that mimetype is the first entry, stored uncompressed and contains exactly application/epub+zip, that container.xml exists and declares a rootfile, that the OPF has a package element with a manifest and a spine, and that every manifest href actually resolves to a file inside the archive. Missing assets are the most common real fault and the hardest to spot by eye.
What it is not
This is a structural check, not EPUBCheck. It does not validate XHTML content documents, CSS, accessibility metadata or the full EPUB 3 specification, so a clean result here means the package is well formed, not that a store will accept it. It catches the class of breakage that stops a book opening at all, which is usually what you are looking for at 2am before a deadline.
Why it runs in your browser
Unpublished manuscripts are exactly the kind of file people should not be uploading to a stranger for a health check. The ZIP reader, the XML parsing and every rule are TypeScript running in this tab, so the book is read from your disk into your own memory and nowhere else.