# PLIST Studio (open and convert plist)

Drop a .plist file to see its contents as a tree, whether it is XML or binary (bplist00). You can also save it as XML, binary or JSON. For the internal structure of an .exe or .dll, use EXE/DLL Info Viewer; for XML formatting or XPath search, use XML Studio.

- URL: https://tools.itlibra.com/en/plist-studio
- On-device・No upload
- Last updated: 2026-10-31

## How to use

1. Drop a .plist file onto the frame, or choose it with "Choose file". XML and binary (bplist00) are detected automatically.
2. 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.
3. If you already have the XML text, paste it into "Paste XML plist" (binary cannot be pasted).
4. Use "Save as XML", "Save as binary" or "Save as JSON" to convert. The JSON can also be copied.
5. Broken values are shown in red with their place and reason. A file that cannot be read shows where it stopped.

## 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

## 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.


## Supported formats

### Input

- XML plist 1.0 (.plist)
- Binary plist (bplist00)
- Pasted XML text (UTF-8, UTF-16)

### Output

- XML plist 1.0 (.plist)
- Binary plist (bplist00, .bplist)
- JSON (.json)


## 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?

A text XML plist opens in any text editor. A binary plist (bplist00) is unreadable as text, so open it here to see the tree, and save it as XML if you need text.

### How do I convert a binary plist to XML?

Drop the file in and choose "Save as XML". The XML keeps the same structure and key order. Note that milliseconds in dates are dropped.

### Can I convert a plist to JSON?

Yes. Use "Save as JSON" or "Copy JSON". JSON has no date or data type, so dates become ISO 8601 strings and data becomes Base64 text.

### Why does a plist show as broken?

In binary, an offset or length outside the file, or an object that refers to itself, stops the read. In XML, check that tags close correctly, entities are written properly, and the encoding is UTF-8 or UTF-16. The page shows where it stopped.
