Property list (plist) converter
Drop or paste a .plist, XML or binary, and get it back as XML, JSON or a binary plist download, with a tree view that shows each value's type. Paste JSON to go the other way. Dates and data, which JSON has no type for, are listed so nothing changes without you knowing. It does what plutil -convert does, without a Mac, and the file never leaves this page.
Drop a .plist or .json file here
XML or binary (bplist00) property lists, or JSON. The file is read in this page and never uploaded.
Read as an XML property list · 12 values
(root)dict9 keys
- CFBundleDisplayNamestring"Pocket Notes"
- CFBundleShortVersionStringstring"2.4"
- CFBundleVersionstring"118"
- LSRequiresIPhoneOSbooleantrue
UIBackgroundModesarray2 items
- 0string"fetch"
- 1string"remote-notification"
- ReleaseDatedate2026-03-07T17:50:56Z
- IconScalereal2
- MaxItemsinteger500
- Signaturedatade ad be ef (4 bytes)
How it works
- •The input is recognised by its first bytes: bplist00 is a binary property list, < is XML, anything else is read as JSON.
- •XML is written the way plutil writes it: tab indentation, <dict/> and <array/> when empty, data wrapped at 68 characters. Keys keep their order unless you ask for plutil's sorted order.
- •The binary writer follows the format as described in Apple's open-source CFBinaryPList.c: header, objects, offset table and trailer. Repeated strings and numbers are stored once. Its output was checked against plutil -lint, plutil -convert xml1 and plutil -p.
- •Reals stay reals and integers stay integers: <real>2</real> is written as 2.0 in JSON so that converting it back gives a real again.
- •In JSON, dates become ISO 8601 text and data becomes base64 text; the page lists every place this happens. When reading JSON, you choose whether such strings turn back into <date> and <data>.
- •Errors name the line and column for XML and JSON, and the key path for values a plist cannot hold, such as null.
What it does not do
- •It does not read the old OpenStep text format ({ key = value; }) or .strings files.
- •It does not edit values; convert, edit the XML or JSON in your editor, and convert back.
- •It does not unpack NSKeyedArchiver archives into objects. Their UID references are shown and kept, but JSON can only hold them as {"CF$UID": n}.
- •XML dates store whole seconds, so a binary plist date with a fraction of a second loses the fraction in XML, as it does with plutil.
- •The binary file has the same contents as plutil's but not always the same bytes, because object order and sharing can differ.
- •Files over 5 MB are refused.
Frequently asked questions
- How do I turn a binary plist into XML on a Mac?
- In Terminal: plutil -convert xml1 Info.plist rewrites the file in place, and plutil -convert xml1 -o out.plist Info.plist writes a copy. plutil -p Info.plist only prints it. This page gives the same XML without Terminal, on any computer.
- Why does plutil -convert json say “Invalid object in plist for JSON format”?
- Because the plist holds a <date> or <data> value, and JSON has no type for either, so plutil refuses. This page writes dates as ISO 8601 text and data as base64 text instead, and lists each place where it did that.
- Will Xcode and iOS read the binary file this page makes?
- Yes, it is a standard bplist00 file. The tests for this page convert files with the writer and compare the result with plutil's own reading of the original, including long arrays, Unicode strings, 64-bit integers, dates and data.
- How are JSON numbers turned into plist types?
- A number without a point or exponent, such as 3, becomes <integer>. One with a point or exponent, such as 3.0 or 1e3, becomes <real>. Integers must fit between -2^63 and 2^64 - 1, the range a plist integer can hold; anything outside is reported with its path.
- Should my project keep Info.plist as XML or binary?
- Keep the source file as XML: it diffs and merges cleanly in Git. Xcode can write the copy inside the built app in binary through the INFOPLIST_OUTPUT_FORMAT build setting, so the size of the source file does not matter.
- Is my file uploaded?
- No. The file is read and converted by code running in this page; nothing is sent to a server. You can disconnect from the network after the page loads and it still works.