How to use
Drop a .plist file onto the frame, or choose it with "Choose file". XML and binary (bplist00) are detected automatically.
Expand dict and array in the Structure panel to check keys and values. Dates show as ISO 8601 (UTC); data shows its byte count and the first bytes.
If you already have the XML text, paste it into "Paste XML plist" (binary cannot be pasted).
Use "Save as XML", "Save as binary" or "Save as JSON" to convert. The JSON can also be copied.
Broken values are shown in red with their place and reason. A file that cannot be read shows where it stopped.
What it does
Reads XML and binary
Opens XML plist 1.0 and binary plist bplist00 in the same screen. Binary offsets, lengths and the trailer are checked to be in range before they are read.
Shows each type
Labels dict, array, string, integer (keeps digits beyond 64 bits), real, true/false, date (UTC) and data (byte count and the first 16 bytes).
Converts between XML, binary and JSON
Saves the content as XML plist 1.0 or binary bplist00, and as JSON. The page states how dates and data are written in JSON, since JSON cannot keep their types.
Points at broken parts
A cycle (an array or dictionary that refers to itself), an out-of-range offset, or nesting deeper than 512 levels stops the walk at that point, marks it as broken, and gives the reason. The rest still loads.
No external fetches in XML
Internal entity declarations (<!ENTITY) in a DOCTYPE are refused. External DTDs and entities are never fetched. Only the five predefined entities and numeric references are decoded.
Use cases
- Check the keys in an Info.plist or entitlements file as a tree, without reading raw XML
- Convert a binary plist (bplist00) from a Mac or iPhone to text XML so you can diff it
- Turn a plist into JSON for a script or another tool
- See which type each setting uses (string, integer, boolean, date)
- Find where a broken plist fails, using offsets and cycle detection
Supported formats
Input
Output
Capability matrix
| Feature | Support | Notes |
|---|---|---|
| Reading XML plist 1.0 | Supported | — |
| Reading binary plist (bplist00) | Supported | — |
| Writing XML, binary and JSON | Supported | In JSON, date, data and uid become strings |
| Date precision in XML | Partial | Written XML keeps whole seconds only (milliseconds are dropped) |
| Binary versions other than bplist00 (such as bplist15) | Not supported | — |
| Following NSKeyedArchiver references | Not supported | Shown as a plain tree; UIDs appear as values |
| Fetching external DTDs or entities | Not supported | Never fetched; internal entity declarations are refused |
| Editing values | Not supported | Viewing and saving only |
| XML character encodings | Partial | UTF-8 and UTF-16 (with BOM) only; other encodings are not read |
| Offline use | Supported | Works without a network connection after the page has loaded once |
Limits & notes
- Files up to 10 MB. Larger files are refused before they are read.
- Nesting up to 512 levels and up to 200,000 values. In binary, a value that is referenced several times is counted each time. Anything past the limit is left out.
- The screen shows the first 2,000 values. Save the file to see all of them.
- XML integers up to 40 digits; binary integers up to 128 bits. Larger values cannot be written.
- Control characters (some of 0x00–0x1F) and unpaired surrogates cannot be written to XML.
Privacy & safety
The contents of a plist you open are processed only inside your browser. Nothing is sent to or stored on a server, including identifiers and certificates inside an Info.plist.
FAQ
What opens a plist file?
How do I convert a binary plist to XML?
Can I convert a plist to JSON?
Why does a plist show as broken?
Related tools
XML Studio — Formatter & Validator
Paste XML to format, minify or validate it. Errors show the exact line, column and cause, and whitespace that carries meaning (mixed content, xml:space) is never touched. XPath search and JSON conversion are on the same screen. Your data never leaves your device.
JSON Studio — Formatter & Validator
Paste JSON to format, minify or validate it instantly. Errors are shown with the exact line, column and cause, and comments or trailing commas can be auto-repaired. Your data never leaves your device.
Binary Data Studio (Hex Viewer)
Drop a file to open it as a hex dump with offsets, hex bytes and a text column. Only the visible rows are read, so even multi-gigabyte files open without freezing, and nothing leaves your device. Search, value interpretation, compare and export are on the same screen.
YAML / TOML Studio — Validate, Format & Convert
Paste YAML, TOML or JSON to validate, format or convert it. Errors show the exact line and column, and type traps such as “no becomes false” and anything lost in conversion are flagged up front. Your data never leaves your device.
Diff Tool — Text & Code Compare
Paste or drop two versions and see added and removed lines, plus the exact words that changed inside each line. Copy or save the result as a unified patch. Nothing leaves your browser.
UUID / ULID / NanoID / Token Generator
A UUID is ready the moment the page opens. Switch to UUID v7, ULID, NanoID or a random token, generate up to 10,000 at once and save them as .txt, .csv or .json. Paste an existing UUID or ULID to read its embedded time and version.
Last updated: