{
  "version": "1.0.0",
  "modified": "2026-10-17",
  "license": "CC0-1.0",
  "checker": {
    "name": "EPUBCheck",
    "version": "5.4.0",
    "distribution": "https://github.com/w3c/epubcheck/releases/tag/v5.4.0",
    "archiveSha256": "33350c61038e71dfb3d45a76aed04bf5481e6d5500cb780f6e98db8bbd15a28c"
  },
  "source": {
    "baseCommit": "f371368c5a1224c280a0e8ae03fb8ee203a1f517",
    "validatorSha256": "087df1177db45acd8339e7dca04aea696222e4eb99a324bb6860cd82f5c31e81",
    "options": {
      "deepScan": true,
      "autoFix": true
    },
    "comparedWith": {
      "baseCommit": "0e17fbe3689478ee2fd9929d443fccf69dca325b",
      "validatorSha256": "9e288cfb134385f2815927ea5b99329b09a49824baa6dae7c722f8077ce85953"
    },
    "matchingResults": true
  },
  "repairNormalization": "Only ZIP local/central DOS timestamps are set to 1980-01-01 00:00:00 (no timezone stored); payload, compression and entry order are unchanged.",
  "downloads": {
    "all": "epub-validation-lab-v1.zip",
    "source": "epub-validation-lab-source-v1.zip",
    "checksums": "SHA256SUMS.txt",
    "builder": "build.mjs"
  },
  "samples": [
    {
      "id": "baseline",
      "title": "Complete two-chapter EPUB",
      "description": "Original prose, navigation, linked chapters and an SVG diagram; no deliberate fault.",
      "mutation": {
        "kind": "none",
        "path": null,
        "before": null,
        "after": null
      },
      "filename": "baseline.epub",
      "bytes": 3269,
      "sha256": "7dc8def3275e27dd212a9d71ccfa95744066335ce5d7c32c99427e6da6703133",
      "epubcheck": {
        "valid": true,
        "counts": {
          "fatal": 0,
          "error": 0,
          "warning": 0,
          "usage": 0
        },
        "messages": []
      },
      "epublys": {
        "valid": true,
        "fixCount": 0,
        "checks": [
          {
            "level": "pass",
            "message": "mimetype file is valid"
          },
          {
            "level": "pass",
            "message": "container.xml present"
          },
          {
            "level": "pass",
            "message": "OPF file found: OEBPS/package.opf"
          },
          {
            "level": "pass",
            "message": "Title: \"A Small Harbour: an EPUB Test Book\""
          },
          {
            "level": "pass",
            "message": "Language: en"
          },
          {
            "level": "pass",
            "message": "Unique identifier present"
          },
          {
            "level": "pass",
            "message": "All 5 manifest items found"
          },
          {
            "level": "pass",
            "message": "Spine has 2 valid items"
          },
          {
            "level": "pass",
            "message": "All 2 XHTML files are well-formed"
          },
          {
            "level": "pass",
            "message": "All internal links resolve correctly"
          },
          {
            "level": "pass",
            "message": "All image references resolve correctly"
          }
        ],
        "light": {
          "ok": true
        },
        "repair": null
      }
    },
    {
      "id": "wrong-mimetype",
      "title": "Wrong mimetype text",
      "description": "The first uncompressed mimetype entry has the wrong value.",
      "mutation": {
        "kind": "text",
        "path": "mimetype",
        "before": "application/epub+zip",
        "after": "text/plain"
      },
      "filename": "wrong-mimetype.epub",
      "bytes": 3259,
      "sha256": "774cbd47acb74912933abaeca2f1ddd165daf73c927582f252769759c81d490d",
      "epubcheck": {
        "valid": false,
        "counts": {
          "fatal": 0,
          "error": 1,
          "warning": 0,
          "usage": 0
        },
        "messages": [
          {
            "id": "PKG-007",
            "severity": "ERROR",
            "message": "The content of the mimetype file must be the string \"application/epub+zip\"",
            "locations": [
              {
                "path": "wrong-mimetype.epub",
                "line": -1,
                "column": -1
              }
            ]
          }
        ]
      },
      "epublys": {
        "valid": false,
        "fixCount": 1,
        "checks": [
          {
            "level": "error",
            "message": "Invalid mimetype: \"text/plain\""
          },
          {
            "level": "pass",
            "message": "container.xml present"
          },
          {
            "level": "pass",
            "message": "OPF file found: OEBPS/package.opf"
          },
          {
            "level": "pass",
            "message": "Title: \"A Small Harbour: an EPUB Test Book\""
          },
          {
            "level": "pass",
            "message": "Language: en"
          },
          {
            "level": "pass",
            "message": "Unique identifier present"
          },
          {
            "level": "pass",
            "message": "All 5 manifest items found"
          },
          {
            "level": "pass",
            "message": "Spine has 2 valid items"
          },
          {
            "level": "pass",
            "message": "All 2 XHTML files are well-formed"
          },
          {
            "level": "pass",
            "message": "All internal links resolve correctly"
          },
          {
            "level": "pass",
            "message": "All image references resolve correctly"
          }
        ],
        "light": {
          "ok": false,
          "reason": "bad_mimetype"
        },
        "repair": {
          "filename": "repairs/wrong-mimetype.epub",
          "bytes": 3269,
          "sha256": "7dc8def3275e27dd212a9d71ccfa95744066335ce5d7c32c99427e6da6703133",
          "epubcheck": {
            "valid": true,
            "counts": {
              "fatal": 0,
              "error": 0,
              "warning": 0,
              "usage": 0
            },
            "messages": []
          },
          "valid": true,
          "fixCount": 0,
          "checks": [
            {
              "level": "pass",
              "message": "mimetype file is valid"
            },
            {
              "level": "pass",
              "message": "container.xml present"
            },
            {
              "level": "pass",
              "message": "OPF file found: OEBPS/package.opf"
            },
            {
              "level": "pass",
              "message": "Title: \"A Small Harbour: an EPUB Test Book\""
            },
            {
              "level": "pass",
              "message": "Language: en"
            },
            {
              "level": "pass",
              "message": "Unique identifier present"
            },
            {
              "level": "pass",
              "message": "All 5 manifest items found"
            },
            {
              "level": "pass",
              "message": "Spine has 2 valid items"
            },
            {
              "level": "pass",
              "message": "All 2 XHTML files are well-formed"
            },
            {
              "level": "pass",
              "message": "All internal links resolve correctly"
            },
            {
              "level": "pass",
              "message": "All image references resolve correctly"
            }
          ],
          "light": {
            "ok": true
          },
          "rawReferenceMatchesNormalized": true
        }
      }
    },
    {
      "id": "misplaced-mimetype",
      "title": "Mimetype is not first",
      "description": "The correct uncompressed mimetype entry is moved to the end of the ZIP.",
      "mutation": {
        "kind": "entry-order",
        "path": "mimetype",
        "before": "first ZIP entry",
        "after": "last ZIP entry"
      },
      "filename": "misplaced-mimetype.epub",
      "bytes": 3269,
      "sha256": "700c943bda93da96e9818e04b8a7942ece61caf7aa3a33d44f67c61a1142fb88",
      "epubcheck": {
        "valid": false,
        "counts": {
          "fatal": 0,
          "error": 1,
          "warning": 0,
          "usage": 0
        },
        "messages": [
          {
            "id": "PKG-006",
            "severity": "ERROR",
            "message": "Mimetype file entry is missing or is not the first file in the archive.",
            "locations": [
              {
                "path": "misplaced-mimetype.epub",
                "line": -1,
                "column": -1
              }
            ]
          }
        ]
      },
      "epublys": {
        "valid": false,
        "fixCount": 1,
        "checks": [
          {
            "level": "error",
            "message": "Misplaced mimetype file: it must be the first entry in the archive"
          },
          {
            "level": "pass",
            "message": "container.xml present"
          },
          {
            "level": "pass",
            "message": "OPF file found: OEBPS/package.opf"
          },
          {
            "level": "pass",
            "message": "Title: \"A Small Harbour: an EPUB Test Book\""
          },
          {
            "level": "pass",
            "message": "Language: en"
          },
          {
            "level": "pass",
            "message": "Unique identifier present"
          },
          {
            "level": "pass",
            "message": "All 5 manifest items found"
          },
          {
            "level": "pass",
            "message": "Spine has 2 valid items"
          },
          {
            "level": "pass",
            "message": "All 2 XHTML files are well-formed"
          },
          {
            "level": "pass",
            "message": "All internal links resolve correctly"
          },
          {
            "level": "pass",
            "message": "All image references resolve correctly"
          }
        ],
        "light": {
          "ok": false,
          "reason": "mimetype_not_first"
        },
        "repair": {
          "filename": "repairs/misplaced-mimetype.epub",
          "bytes": 3451,
          "sha256": "bfebf07ba40eeef3309c5d8f5598ba12bc6fd9fadd2c9f4c97fb86bce08b4852",
          "epubcheck": {
            "valid": true,
            "counts": {
              "fatal": 0,
              "error": 0,
              "warning": 0,
              "usage": 0
            },
            "messages": []
          },
          "valid": true,
          "fixCount": 0,
          "checks": [
            {
              "level": "pass",
              "message": "mimetype file is valid"
            },
            {
              "level": "pass",
              "message": "container.xml present"
            },
            {
              "level": "pass",
              "message": "OPF file found: OEBPS/package.opf"
            },
            {
              "level": "pass",
              "message": "Title: \"A Small Harbour: an EPUB Test Book\""
            },
            {
              "level": "pass",
              "message": "Language: en"
            },
            {
              "level": "pass",
              "message": "Unique identifier present"
            },
            {
              "level": "pass",
              "message": "All 5 manifest items found"
            },
            {
              "level": "pass",
              "message": "Spine has 2 valid items"
            },
            {
              "level": "pass",
              "message": "All 2 XHTML files are well-formed"
            },
            {
              "level": "pass",
              "message": "All internal links resolve correctly"
            },
            {
              "level": "pass",
              "message": "All image references resolve correctly"
            }
          ],
          "light": {
            "ok": true
          },
          "rawReferenceMatchesNormalized": true
        }
      }
    },
    {
      "id": "missing-language",
      "title": "Missing package language",
      "description": "Only dc:language is removed; the XHTML language attributes remain present.",
      "mutation": {
        "kind": "text",
        "path": "OEBPS/package.opf",
        "before": "    <dc:language>en</dc:language>\n",
        "after": ""
      },
      "filename": "missing-language.epub",
      "bytes": 3256,
      "sha256": "5f0f2b1ea7e5884ad6d05c9b4773362a348531f4c07d11c3d1e83f130789e6b7",
      "epubcheck": {
        "valid": false,
        "counts": {
          "fatal": 0,
          "error": 1,
          "warning": 0,
          "usage": 0
        },
        "messages": [
          {
            "id": "RSC-005",
            "severity": "ERROR",
            "message": "Error while parsing file: element \"metadata\" incomplete; missing required element \"dc:language\"",
            "locations": [
              {
                "path": "OEBPS/package.opf",
                "line": 9,
                "column": 14
              }
            ]
          }
        ]
      },
      "epublys": {
        "valid": true,
        "fixCount": 1,
        "checks": [
          {
            "level": "pass",
            "message": "mimetype file is valid"
          },
          {
            "level": "pass",
            "message": "container.xml present"
          },
          {
            "level": "pass",
            "message": "OPF file found: OEBPS/package.opf"
          },
          {
            "level": "pass",
            "message": "Title: \"A Small Harbour: an EPUB Test Book\""
          },
          {
            "level": "warning",
            "message": "Missing dc:language in metadata"
          },
          {
            "level": "pass",
            "message": "Unique identifier present"
          },
          {
            "level": "pass",
            "message": "All 5 manifest items found"
          },
          {
            "level": "pass",
            "message": "Spine has 2 valid items"
          },
          {
            "level": "pass",
            "message": "All 2 XHTML files are well-formed"
          },
          {
            "level": "pass",
            "message": "All internal links resolve correctly"
          },
          {
            "level": "pass",
            "message": "All image references resolve correctly"
          }
        ],
        "light": {
          "ok": true
        },
        "repair": {
          "filename": "repairs/missing-language.epub",
          "bytes": 3358,
          "sha256": "9bbce1901bbafb75ddafeb0cfc3e534c50e6659502ddc12b593ca166d90412fb",
          "epubcheck": {
            "valid": true,
            "counts": {
              "fatal": 0,
              "error": 0,
              "warning": 0,
              "usage": 0
            },
            "messages": []
          },
          "valid": true,
          "fixCount": 0,
          "checks": [
            {
              "level": "pass",
              "message": "mimetype file is valid"
            },
            {
              "level": "pass",
              "message": "container.xml present"
            },
            {
              "level": "pass",
              "message": "OPF file found: OEBPS/package.opf"
            },
            {
              "level": "pass",
              "message": "Title: \"A Small Harbour: an EPUB Test Book\""
            },
            {
              "level": "pass",
              "message": "Language: en"
            },
            {
              "level": "pass",
              "message": "Unique identifier present"
            },
            {
              "level": "pass",
              "message": "All 5 manifest items found"
            },
            {
              "level": "pass",
              "message": "Spine has 2 valid items"
            },
            {
              "level": "pass",
              "message": "All 2 XHTML files are well-formed"
            },
            {
              "level": "pass",
              "message": "All internal links resolve correctly"
            },
            {
              "level": "pass",
              "message": "All image references resolve correctly"
            }
          ],
          "light": {
            "ok": true
          },
          "rawReferenceMatchesNormalized": true
        }
      }
    },
    {
      "id": "missing-container",
      "title": "Missing container.xml",
      "description": "Only META-INF/container.xml is removed; the package document is still present.",
      "mutation": {
        "kind": "remove-entry",
        "path": "META-INF/container.xml",
        "before": "entry present",
        "after": "entry absent"
      },
      "filename": "missing-container.epub",
      "bytes": 2977,
      "sha256": "04ece61b18efbfd44b4a45bd247ede60524ae364a088051350debb7530bcad3d",
      "epubcheck": {
        "valid": false,
        "counts": {
          "fatal": 1,
          "error": 0,
          "warning": 0,
          "usage": 0
        },
        "messages": [
          {
            "id": "RSC-002",
            "severity": "FATAL",
            "message": "Required META-INF/container.xml resource could not be found.",
            "locations": [
              {
                "path": "missing-container.epub",
                "line": -1,
                "column": -1
              }
            ]
          }
        ]
      },
      "epublys": {
        "valid": false,
        "fixCount": 0,
        "checks": [
          {
            "level": "pass",
            "message": "mimetype file is valid"
          },
          {
            "level": "error",
            "message": "Missing META-INF/container.xml"
          },
          {
            "level": "error",
            "message": "Cannot locate OPF package file"
          }
        ],
        "light": {
          "ok": false,
          "reason": "container_unresolved"
        },
        "repair": null
      }
    },
    {
      "id": "missing-chapter",
      "title": "Missing chapter file",
      "description": "The first chapter file is removed, leaving its manifest, spine and navigation references intact.",
      "mutation": {
        "kind": "remove-entry",
        "path": "OEBPS/chapter-1.xhtml",
        "before": "entry present",
        "after": "entry absent"
      },
      "filename": "missing-chapter.epub",
      "bytes": 2612,
      "sha256": "7bda1912d76c11492ad4f024adb601c776e62ec2ebadc30ee1ac5a8ceb0fa4eb",
      "epubcheck": {
        "valid": false,
        "counts": {
          "fatal": 0,
          "error": 2,
          "warning": 0,
          "usage": 0
        },
        "messages": [
          {
            "id": "RSC-001",
            "severity": "ERROR",
            "message": "File \"OEBPS/chapter-1.xhtml\" could not be found.",
            "locations": [
              {
                "path": "OEBPS/chapter-1.xhtml",
                "line": -1,
                "column": -1
              }
            ]
          },
          {
            "id": "RSC-012",
            "severity": "ERROR",
            "message": "Fragment identifier is not defined.",
            "locations": [
              {
                "path": "OEBPS/chapter-2.xhtml",
                "line": 9,
                "column": 42
              },
              {
                "path": "OEBPS/nav.xhtml",
                "line": 9,
                "column": 47
              }
            ]
          }
        ]
      },
      "epublys": {
        "valid": false,
        "fixCount": 0,
        "checks": [
          {
            "level": "pass",
            "message": "mimetype file is valid"
          },
          {
            "level": "pass",
            "message": "container.xml present"
          },
          {
            "level": "pass",
            "message": "OPF file found: OEBPS/package.opf"
          },
          {
            "level": "pass",
            "message": "Title: \"A Small Harbour: an EPUB Test Book\""
          },
          {
            "level": "pass",
            "message": "Language: en"
          },
          {
            "level": "pass",
            "message": "Unique identifier present"
          },
          {
            "level": "error",
            "message": "Manifest references missing file: chapter-1.xhtml"
          },
          {
            "level": "pass",
            "message": "Spine has 2 valid items"
          },
          {
            "level": "pass",
            "message": "All 1 XHTML files are well-formed"
          },
          {
            "level": "warning",
            "message": "1 broken internal link(s) found"
          },
          {
            "level": "pass",
            "message": "All image references resolve correctly"
          }
        ],
        "light": {
          "ok": false,
          "reason": "manifest_missing_file"
        },
        "repair": null
      }
    },
    {
      "id": "broken-image",
      "title": "Broken image reference",
      "description": "One img src points to a nonexistent file; the original diagram remains in the archive.",
      "mutation": {
        "kind": "text",
        "path": "OEBPS/chapter-1.xhtml",
        "before": "src=\"diagram.svg\"",
        "after": "src=\"missing-diagram.svg\""
      },
      "filename": "broken-image.epub",
      "bytes": 3274,
      "sha256": "2a23463586bd75a20aebbf53f28f3d9940195f866c859de4bb0d29da8f7b2b5f",
      "epubcheck": {
        "valid": false,
        "counts": {
          "fatal": 0,
          "error": 1,
          "warning": 0,
          "usage": 0
        },
        "messages": [
          {
            "id": "RSC-007",
            "severity": "ERROR",
            "message": "Referenced resource \"OEBPS/missing-diagram.svg\" could not be found in the EPUB.",
            "locations": [
              {
                "path": "OEBPS/chapter-1.xhtml",
                "line": 9,
                "column": 121
              }
            ]
          }
        ]
      },
      "epublys": {
        "valid": true,
        "fixCount": 0,
        "checks": [
          {
            "level": "pass",
            "message": "mimetype file is valid"
          },
          {
            "level": "pass",
            "message": "container.xml present"
          },
          {
            "level": "pass",
            "message": "OPF file found: OEBPS/package.opf"
          },
          {
            "level": "pass",
            "message": "Title: \"A Small Harbour: an EPUB Test Book\""
          },
          {
            "level": "pass",
            "message": "Language: en"
          },
          {
            "level": "pass",
            "message": "Unique identifier present"
          },
          {
            "level": "pass",
            "message": "All 5 manifest items found"
          },
          {
            "level": "pass",
            "message": "Spine has 2 valid items"
          },
          {
            "level": "pass",
            "message": "All 2 XHTML files are well-formed"
          },
          {
            "level": "pass",
            "message": "All internal links resolve correctly"
          },
          {
            "level": "warning",
            "message": "1 broken image reference(s) found"
          }
        ],
        "light": {
          "ok": true
        },
        "repair": null
      }
    },
    {
      "id": "duplicate-xhtml-id",
      "title": "Duplicate ID inside one chapter",
      "description": "Two paragraphs in the same XHTML document have the same ID. IDs in separate documents are a different case.",
      "mutation": {
        "kind": "text",
        "path": "OEBPS/chapter-1.xhtml",
        "before": "id=\"second-note\"",
        "after": "id=\"first-note\""
      },
      "filename": "duplicate-xhtml-id.epub",
      "bytes": 3264,
      "sha256": "73cbd030afc71af42cbf2214565efa7aca80921d26e9418aec621fe52a12c6cc",
      "epubcheck": {
        "valid": false,
        "counts": {
          "fatal": 0,
          "error": 1,
          "warning": 0,
          "usage": 0
        },
        "messages": [
          {
            "id": "RSC-005",
            "severity": "ERROR",
            "message": "Error while parsing file: Duplicate ID \"first-note\"",
            "locations": [
              {
                "path": "OEBPS/chapter-1.xhtml",
                "line": 7,
                "column": 24
              },
              {
                "path": "OEBPS/chapter-1.xhtml",
                "line": 8,
                "column": 24
              }
            ]
          }
        ]
      },
      "epublys": {
        "valid": true,
        "fixCount": 0,
        "checks": [
          {
            "level": "pass",
            "message": "mimetype file is valid"
          },
          {
            "level": "pass",
            "message": "container.xml present"
          },
          {
            "level": "pass",
            "message": "OPF file found: OEBPS/package.opf"
          },
          {
            "level": "pass",
            "message": "Title: \"A Small Harbour: an EPUB Test Book\""
          },
          {
            "level": "pass",
            "message": "Language: en"
          },
          {
            "level": "pass",
            "message": "Unique identifier present"
          },
          {
            "level": "pass",
            "message": "All 5 manifest items found"
          },
          {
            "level": "pass",
            "message": "Spine has 2 valid items"
          },
          {
            "level": "pass",
            "message": "All 2 XHTML files are well-formed"
          },
          {
            "level": "pass",
            "message": "All internal links resolve correctly"
          },
          {
            "level": "pass",
            "message": "All image references resolve correctly"
          }
        ],
        "light": {
          "ok": true
        },
        "repair": null
      }
    },
    {
      "id": "compressed-mimetype",
      "title": "Compressed mimetype only",
      "description": "Only the first mimetype entry changes from STORE to DEFLATE. Its text and position remain correct.",
      "mutation": {
        "kind": "compression-method",
        "path": "mimetype",
        "before": "STORE (0)",
        "after": "DEFLATE (8)"
      },
      "filename": "compressed-mimetype.epub",
      "bytes": 3271,
      "sha256": "561551f8acfdd30a6e75068d14614cd8cd5c46013f1402b5684e427d67dbd2ed",
      "epubcheck": {
        "valid": true,
        "counts": {
          "fatal": 0,
          "error": 0,
          "warning": 0,
          "usage": 0
        },
        "messages": []
      },
      "epublys": {
        "valid": true,
        "fixCount": 0,
        "checks": [
          {
            "level": "pass",
            "message": "mimetype file is valid"
          },
          {
            "level": "pass",
            "message": "container.xml present"
          },
          {
            "level": "pass",
            "message": "OPF file found: OEBPS/package.opf"
          },
          {
            "level": "pass",
            "message": "Title: \"A Small Harbour: an EPUB Test Book\""
          },
          {
            "level": "pass",
            "message": "Language: en"
          },
          {
            "level": "pass",
            "message": "Unique identifier present"
          },
          {
            "level": "pass",
            "message": "All 5 manifest items found"
          },
          {
            "level": "pass",
            "message": "Spine has 2 valid items"
          },
          {
            "level": "pass",
            "message": "All 2 XHTML files are well-formed"
          },
          {
            "level": "pass",
            "message": "All internal links resolve correctly"
          },
          {
            "level": "pass",
            "message": "All image references resolve correctly"
          }
        ],
        "light": {
          "ok": false,
          "reason": "mimetype_compressed"
        },
        "repair": null
      }
    }
  ]
}
