Typed binary and XML plist inspector
Read all local plist objects and references with exact integer width, signedness, raw float bits and a complete typed JSON report.
- 1Add input
- 2Review and run
- 3Get your result
Tool input and files are processed in this browser without being uploaded.
Before you start
Inspect one bplist00 or UTF-8 Apple XML plist without instantiating archived classes. Validate every binary object, including unused ones; preserve a typed root, full object directory, raw references and source SHA256 in the downloadable report.
How to use this tool
- Select one local binary or XML plist.
- Review root type, validated objects, unused objects and explicit raw-number policy.
- Download full typed JSON and inspect all objects/references, not only the bounded preview.
Supported inputs and limits
One 8 MiB file; at most 100,000 binary objects or XML elements, 64 nested containers and 200,000 expanded visits per validated object/root. Binary physical references are additionally capped 200,000. All limits apply together; full typed JSON ≤ 32 MiB, checked before shared references are serialized repeatedly.
Supported binary types: null, boolean, ASCII/valid UTF-16BE string, data, array, unique-string-key dict, finite float32/64, date and UID ≤ 8 bytes. Integer 1/2/4 bytes is decoded unsigned; 8/16 bytes signed, retaining decimal string, width, signedness and rawHex. These raw 128-bit values do not promise universal NSObject interpretation; UID is inert numeric data only.
XML 1.0 UTF-8 requires plist version 1.0, recognized declaration and only the standard Apple external doctype; it is never fetched. Unknown attributes, tags, PI, custom DTD/entities and unsupported types fail. XML integers preserve lexical text and decimal value in −2^127…2^128−1; binary width/sign is not inferred. Base64 must have canonical padding bits; dict order is retained.
Dates retain binary seconds/IEEE 64-bit representations or the full XML UTC lexeme YYYY-MM-DDTHH:mm:ss[.fraction]Z, years 0001–9999, no leap seconds. ISO preview rounds original binary seconds or XML fractional seconds to nearest millisecond, ties away from zero, before adding its epoch/date; preview must fit JavaScript ISO date range. Fractional input precision remains in the report.
Reject cycles, truncated/overlapping/duplicate offsets, bad references, unknown unused objects, nonfinite floats and malformed UTF-16. Preview only 200 root-value nodes, 2,000 UTF-16 units per cell; full JSON includes every object and reference. This is read-only parsing, not writeback, NSKeyedArchiver execution or a trust/security verdict.
Worked example
Example input
Apple XML dict: date 2026-10-07T00:00:00.999999999999Z, real -0 and integer 00018446744073709551615.
Example options
{}Example output
The original 12 fraction digits, negative-zero bits and integer lexeme remain; ISO preview is 2026-10-07T00:00:01.000Z and integer value is the exact decimal string 18446744073709551615.
When something does not work
Correct or export an unsupported plist with its owning application, or reduce structure/output size; then retry. A cycle, bad unused object, invalid encoding or cancellation produces no partial successful report.
Frequently asked questions
Can a large integer safely be read as a JavaScript number?
Use the decimal string and rawHex. The report keeps width/signedness separately; converting it to a floating number can lose precision.
Are UID or archived classes executed?
No. UID remains unsigned numeric data and no archived object is instantiated.