Chris Collins

Tools · systems

Property lists and defaults

Open any property list — XML, binary (bplist00, every type including UIDs and dates), old-style OpenStep, `defaults read` output or JSON — edit it as a tree and get the plutil and defaults commands for each change, convert it byte-for-byte the way plutil does, take a binary plist apart, and browse a curated catalogue of defaults write tweaks with read and undo commands.

Added

How to use it

Property lists are everywhere on a Mac: preferences, Info.plist, launchd jobs, Xcode projects, keyed archives. They come in four spellings and two of them aren’t readable as text. This page reads them all, shows them as a tree you can edit, and writes them back out in any format — the same bytes plutil would write.

How to use it

  1. Paste a plist, or Open file… (or drop one on the page). Binary files work; so does the output of defaults read, which isn’t quite a plist (it prints data as {length = 4, bytes = 0x…} and loses the difference between some types — the page says where). Examples has one of each, including a binary keyed archive with UIDs.

  2. Tree: change values, keys and types, and add or delete items. Integers keep their full 64-bit range (unsigned too); dates are edited in UTC; data as hex.

  3. Commands: every edit, as the plutil -replace / -insert / -remove command that makes it in a file (keys with dots are escaped), and as defaults write / delete for top-level keys of a preference domain. Collections go in as -json, or -xml when they hold dates or data.

  4. Convert: XML, binary, JSON (compact or readable), old-style ASCII, or the plutil -p view, with a download button and the matching plutil -convert command. JSON can’t hold dates, data or UIDs — plutil refuses, and so does this page unless you tick lossy.

  5. Binary layout: the header, trailer, offset table and each object’s offset, marker and kind — useful when a binary plist won’t open, or to see how it’s built.

  6. defaults tweaks: a searchable list of defaults write settings — Dock, Mission Control, screenshots, Finder, desktop, keyboard and text, trackpad, windows and documents, menu bar clock, Xcode, Simulator, Safari and others — each with its write, read and undo commands and the macOS versions it’s known to work on. The page never runs any of them.

How exact is it?

The XML writer reproduces plutil -convert xml1 byte for byte (key order, tabs, base64 line widths, real numbers printed the way Apple’s C library rounds them), and the JSON and plutil -p views match too. The tests check this against several hundred random plists of every type that were converted by the real plutil on macOS 27, and also that plutil reads the binary files this page writes back to the same XML. Binary output holds the same objects as plutil’s, but not always in the same byte order (plutil’s depends on hash tables). The tweak catalogue comes from macos-defaults.com (with the versions it lists as tested) and Mathias Bynens' dotfiles; each entry says which.

Use defaults rather than editing files in ~/Library/Preferences directly: preferences are cached by cfprefsd, which can put old values back over your edit.

Related: launchd jobs builds and checks launchd plists; JSON workbench and jq for the JSON you convert to.

Browser support

Any current browser.

Privacy

Everything happens in your browser. Files you open or paste are not uploaded, and the page loads no outside scripts. A share link carries the text you pasted (if it’s short) — not a binary file.

Runs entirely in your browser; nothing you type leaves this page.