Convert an XML plist to JSON (and back) without a Mac

Info.plist files, .mobileconfig profiles, Apple config dumps — XML plists parse to editable JSON here. Binary plists are rejected; convert with `plutil -convert xml1` first.

Tools used in this guide

The job

You pulled a plist out of an app bundle and need it as JSON — or you're generating a plist and only have JSON. Apple ships both XML and binary formats; this converter reads the XML kind (the text format Xcode writes), and plutil exists on macOS but not everywhere you're working.

Either direction

Paste plist XML into the input — text in, text out, no file upload. The converter produces JSON with dictionaries, arrays, strings, numbers and booleans mapped; <date> becomes {"$date": "ISO-8601"} and <data> becomes {"$data": "base64"}.

  • XML input up to 4 MiB parses locally — anything larger is rejected with a size error.
  • Nesting deeper than 60 levels is rejected — real Apple plists sit under a dozen.
  • Binary plists (they start with `bplist00`) are rejected — on a Mac, `plutil -convert xml1 file.plist` produces the XML form to paste.

Back to plist

JSON → plist emits the XML format (the one Apple tools and humans both read). The JSON root must be an object or array — a plist root is a dict or list. Keep the {"$date": "…"} and {"$data": "…"} markers and they come back as real <date>/<data> elements; a bare ISO string stays a string, and JSON null becomes an empty string — plist has no null.