The EMP Export Package format
Build a package from selected originals, reports and retained artifacts. Enable the manifest so recipients can check the listed files; Audit Timeline is available on Standard and Professional.

The EMP Export Package format
Open spec · EMP-EXPORT v1.0
EMP case packages use a documented ZIP or folder layout. Included content depends on export selections and licence entitlements. With Manifest enabled, the package includes JSON, checksum text, a manifest PDF and a standalone verifier. Password-protected ZIPs require Manifest; standalone reports and workspace backups use separate formats. We publish it because an export only verifies without the vendor if the format the recipient checks against is open. Here it is, in full. SHA-256 is the integrity check. The product is the case workspace around it.
Who this is for: the person on the receiving end of an evidence package, opposing counsel, a court, a peer agency, or an integrator who has to confirm the files are unaltered and read them into another system.
The package: a versioned ZIP, fixed layout
One click produces one package: a ZIP, or an uncompressed folder of the same name. The structure is stable, so a recipient always knows where to look and a script can validate it without guessing. Folders depend on selection, entitlement and eligible retained content. Core supports case-package export; Standard and Professional add Audit Timeline, Chain of Custody and Incident Maps, while Professional adds Timeline Recon and Link Analysis.
| Path | What it holds |
|---|---|
| {CASE}_Incident_Report.pdf | Human-readable summary at the package root, when selected. |
| verify_integrity.html | A standalone, self-contained browser verifier at the package root, when Manifest is enabled. Open it after extraction to re-hash every file against the manifest, no EMP install needed. It is itself hashed and listed in the manifest. |
| Manifest/manifest.json | The machine-readable manifest: every object, with its path, its SHA-256, and its size. The source of truth for verification. |
| Manifest/manifest.txt | A sha256sum-compatible listing. Stock GNU coreutils read it directly. |
| Manifest/{CASE}_Manifest.pdf | The same manifest, human-readable. |
| Audit Timeline/{CASE}_Timeline_Report.pdf | Selected case action history on Standard or Professional. Custom report branding requires Professional. |
| Files/ | File Intake and managed entity originals, preserved bit-for-bit since intake, routed into Evidence/, Images/, Video/, Audio/, Documents/, Logs/, Other/, and entity subfolders (People/, Vehicles/, Assets/, Devices/). |
| Evidence/ | Physical-evidence records, photographs, and chain-of-custody PDFs, when the case has any. A separate forensic domain from Files/, not a duplicate. |
| Timeline Recon/ | A recon_index.json plus one folder per session, each holding the reconstruction PDF, its reconstructed-events CSV and metadata JSON, and the source, video-clip, and map-clip files, when the case has any. |
| Incident Maps/ | One folder per map workspace, each holding the incident-map PDF, the retained scene image, the scene JSON, and any building plans and lock history, when a locked map view is selected. |
| Link Analysis/{CASE}_Link_Analysis.pdf | The link-analysis graph rendered as a PDF, when link analysis is included in the export. |
| Statements/ | Finalized statement revisions (the statement PDF, any attached original, and a wet-signed copy), when the case has any. |
The package ships as a ZIP or an uncompressed folder. A password-protected package is a WinZip AES-256 compatible ZIP, and the Manifest is always included in that case.
manifest.json: the source of truth for the files
Plain JSON. It records the case, who exported it and when, the producing software version, and one entry per object with that object's own SHA-256, grouped by artifact type. The checksum of the finished ZIP itself is a separate integrity layer and lives outside the package (see the container hash, below).
| Field | Type | Notes |
|---|---|---|
| formatVersion | string | Export format version. "1.0" in v1.0. |
| software | string | Producing software + version (e.g. EMP Intake WS 0.9.158). |
| exportedAt | ISO 8601 datetime | When the package was produced (UTC). |
| exportedBy | string | The actor who produced the export. |
| case | Object | caseNo, title, investigator, status, type, and openedAt. |
| historyScope | Object | logsIncluded (count) and fullHistory (boolean). |
| files[] | array<Object> | Digital File Intake evidence objects. Each is an Object entry (below). |
| physicalFiles[] | array<Object> | Records and photos for physical evidence items. |
| cocFiles[] | array<Object> | Chain-of-custody PDFs. |
| mapFiles[] | array<Object> | Incident-map artifacts. |
| incidentMapWorkspaces | Object | Which incident-map workspaces this export covers: included and excluded arrays, each workspace carrying workspaceId, name, mapItemCount, and planRevisionCount. |
| reconFiles[] | array<Object> | Timeline Reconstruction sources, clips, metadata, index, and PDFs. |
| statementFiles[] | array<Object> | Statement PDFs, attached originals, and signed copies. |
| auxiliaryFiles[] | array<Object> | The standalone verifier (verify_integrity.html) and the sha256sum-compatible manifest.txt. |
| reportPdf, timelinePdf, manifestPdf, linkAnalysisPdf | Object | The generated PDFs, each a single Object entry; linkAnalysisPdf is present only when link analysis is included. |
| totalFiles, totalSizeBytes | integer | Package-wide file count and byte total. |
Each object entry
Common integrity fields are sha256, relativePath, filename and sizeBytes. Intake metadata applies where the entry type supplies it; generated reports do not have to include importedAt.
| Field | Type | Notes |
|---|---|---|
| sha256 | 64-char hex | The file's SHA-256. Preserved originals are checked against their retained baseline; generated artifacts are hashed after generation. |
| relativePath | string | Path inside the package, relative to the root (e.g. Files/Evidence/CASE-2026-0272_...png). |
| filename | string | Stored filename inside the package. File routing follows the configured document rules; generated reports use their package filenames. |
| sizeBytes | integer | Byte length, for a fast pre-check before hashing. |
| importedAt | ISO 8601 datetime | Intake timestamp where applicable, not a required field on generated reports. File Intake entries can also carry originalName, docType, mimeType and flags. |
The container hash: recorded outside the ZIP
The manifest is written before the archive is built, so it can describe the file checksums but does not contain the hash of the finished ZIP that carries it. After the ZIP is complete, EMP computes SHA-256 over the exact archive bytes and records that value in the package record and the append-only export audit metadata inside EMP, outside the package. EMP's own verification rehashes the on-disk ZIP and compares it with that stored value. A recipient who wants to verify the exact ZIP container, rather than the extracted files, needs that expected value from the exporting party's EMP record or another trusted channel.
How do you verify an export package?
With Manifest enabled, the package includes a standalone verifier. Command-line tools can check the listed file hashes, but do not reproduce all package-policy checks.
- Extract the package, keeping the folder structure intact (supply the password first for a protected ZIP).
- In a browser: open
verify_integrity.htmlfrom the extracted package and point it at the extracted folder. It re-hashes every file against the manifest and reports each as intact, modified, or missing, with nothing uploaded. - On the command line: from the package root, run
sha256sum -c "Manifest/manifest.txt"(orGet-FileHashin PowerShell for a single file). Investigate mismatched, missing or unreadable files separately. Get-FileHash calculates a hash; compare it with the expected value. The checksum list does not detect arbitrary extra files.
# GNU coreutils / WSL: check listed files from the extracted package root sha256sum -c "Manifest/manifest.txt" # → OK / FAILED, per file # PowerShell: calculate one file hash, then compare the expected value Get-FileHash "Files\Evidence\CASE-2026-0272_evidence.png" -Algorithm SHA256
To verify the exact ZIP container as well, ask the exporting party for the recorded package hash (EMP stores it in the package record and export audit metadata, outside the ZIP) and compare it with the SHA-256 you compute over the ZIP file itself.
Prefer the hosted route? The free in-browser verifier on our site runs the same SHA-256 checks locally. Use a supported ZIP or an extracted folder, with nothing uploaded. Extract protected ZIPs first and follow the verifier's instructions for unsupported or large archives.
A passing verification shows one thing: the checked bytes match the supplied manifest. A manifest alone does not authenticate the sender; retain the expected package hash through a trusted channel. It is not proof of admissibility; the court decides that. EMP is NIST SP 800-86 / 800-101 aligned as a design target, not certified, and is tamper-evident, not tamper-proof.
Versioned and open
This is EMP-EXPORT v1.0. The format is versioned and additive: later versions may add optional fields, and the manifest always records the producing software version. This page describes the current package format. Manifest-enabled packages include verify_integrity.html for recipient checks without EMP.
Put the format to the test
The spec is only useful if you can act on it. Two free, self-serve ways:
- Verify a sample export in your browser: drop in an EMP package and re-hash every file against this manifest, nothing installed, nothing uploaded.
- Start the 14-day trial and produce your own export, then check it against the format described here.
What is the EMP Export Package format?
A documented ZIP or folder layout for selected case artifacts. Core includes package exports; Audit Timeline requires Standard or Professional. Enable Manifest to include file checksums and a standalone verifier. The completed ZIP hash is calculated after archiving and stored outside the ZIP in EMP's package and export-audit records.
Why publish the format at all?
Because “verify without the vendor” only means something if the format the recipient checks against is open. A closed export you can only validate inside the producing tool proves nothing to the other side. Publishing the layout and the manifest schema is what lets opposing counsel, a court, or a peer agency recompute the hashes independently, and it keeps your evidence verifiable even if EMP is not around.
Do I need EMP Intake installed to verify a package?
No. With Manifest enabled, extract the package and use the included verifier for supported file checks. From the extracted root, GNU coreutils can check the text list with sha256sum -c Manifest/manifest.txt. That list is not equivalent to all package-policy checks; follow the verifier's instructions for protected or unsupported archives.
Can a recipient verify the exact ZIP container?
The manifest supplies expected hashes for the extracted files; agreement alone does not authenticate their origin. Verifying the exact ZIP container also needs the recorded package hash, which EMP stores in the package record and append-only export audit metadata rather than inside the ZIP, because a file inside an archive cannot carry the hash of the finished archive that contains it. Request that value from the exporting party and compare it with the SHA-256 of the ZIP file.
Is a passing verification proof of admissibility?
No. A pass shows one thing: the checked bytes match the supplied manifest. A manifest alone does not authenticate the sender; retain the expected package hash through a trusted channel. No software decides admissibility; the court does. The format gives a court the ability to check integrity; it does not, and cannot, guarantee an outcome.
How does this relate to the DNM File Naming Standard?
DNM provides configurable filename conventions. EMP's generated reports use their documented package filenames. Naming helps organize files; the manifest supplies the checksums used to check their contents.
How is the spec versioned?
This is EMP-EXPORT v1.0. The format is versioned and additive: new optional fields may appear in later versions, and the manifest always records the producing software version so a verifier knows exactly what it is reading.
Keep reading or try EMP Intake
Put defensible chain-of-custody intake to work on your own matters.