bpylist2
Parse and generate NSKeyedArchiver archives
What it is and what it does
bpylist2 is a Python library for reading and writing Apple's binary plist format and NSKeyedArchiver archives—a proprietary serialization format used by Cocoa applications on macOS and iOS. It handles both plain binary plists and the more complex NSKeyedArchiver format, which encodes Cocoa objects like NSString, NSNumber, NSDate, NSArray, and NSDictionary. The library also supports custom Cocoa classes through Python class registration, allowing you to map archived objects to your own Python dataclasses or custom classes with encode/decode methods.
The package has no external runtime dependencies and installs cleanly. It supports Python 3.7 through 3.11, bundling a copy of the Python 3.8 plistlib for older versions. Maintenance is aging—the last release was over a year ago—but the repository remains active and not archived, and there are no known security vulnerabilities.
Use it for:
- Extract data from macOS or iOS application archives or preference files for analysis or migration.
- Deserialize Cocoa objects saved by native applications into Python for processing or conversion.
- Build tools that need to read or modify NSKeyedArchiver-formatted data from Apple platforms.
- Reverse-engineer or inspect binary plist data structures from macOS system files or app bundles.
- Archive Python dictionaries and lists in a format compatible with Cocoa applications.
Worth the install?
AI-flagged interpretation of the facts on this page — verify before relying
Reads and writes Apple's binary plist format and NSKeyedArchiver archives, enabling serialization and deserialization of Cocoa objects in Python.
Yes, if you need to work with Apple's binary plist or NSKeyedArchiver formats. The package is lightweight, dependency-free, and permissively licensed. The aging maintenance is a minor concern—it does not affect basic functionality for standard Cocoa classes, but verify compatibility if you rely on newer or less common archive features. No security vulnerabilities are known.
Install
bpylist2 on PyPI
pip
pip install bpylist2uv
uv add bpylist2poetry
poetry add bpylist2Installing bpylist2
Before you install
Low friction install with no runtime dependencies. Maintenance is aging—last release was over a year ago and the repository has not received recent commits, though it remains active and not archived.
License in practice
MIT license permits free use, modification, and distribution with minimal restrictions; suitable for both open-source and proprietary projects.
Quickstart
from bpylist2 import archiver
# Unarchive
with open('my_archived_object', 'rb') as f:
obj = archiver.unarchive(f.read())
# Archive
my_object = {'foo': 'bar', 'some_array': [1, 2, 3, 4]}
archived = archiver.archive(my_object)
Requires Python 3.7 or later. For Python 3.6 and 3.7, a bundled copy of plistlib is used; Python 3.8+ uses the standard library version.
Verify before relying
- Whether the aging maintenance status affects compatibility with recent macOS or iOS archive formats.
- Performance characteristics when handling large or deeply nested archives.
- Completeness of support for all NSKeyedArchiver-compatible Cocoa classes beyond the documented standard ones.
Package facts
| License | MIT (permissive) |
| Python support | supports the current Python release (>=3.7,<4.0) |
| Install friction | low — pure-Python wheel |
| Runtime dependencies | none |
| Maintenance | aging — 1,068 days since the last release |
| Last repo commit | |
| First released | |
| Downloads | 344,320/month — #7,374 on PyPI (30-day window, as of 2026-08-14) |
| Known vulnerabilities | none known (OSV.dev, checked 2026-08-14) |
Evidence: bpylist2-4.1.1-py3-none-any.whl
Tags
More Utilities packages
Converts domain names between Unicode and…
permissive · top 100 on PyPI
charset-normalizerDetects and normalizes text encoding from…
permissive · top 100 on PyPI
setuptoolsSetuptools is a Python build backend and…
permissive · top 100 on PyPI
pluggyPluggy provides a plugin system that lets you…
permissive · top 100 on PyPI
PygmentsPygments is a syntax highlighter that colorizes…
permissive · top 100 on PyPI
sixSix provides utility functions to write Python…
permissive · top 100 on PyPI
opack2opack2 parses the opack binary format, a…
copyleft · top 15,000 on PyPI
openstep-parserParses Xcode project files (OpenStep format)…
permissive · top 15,000 on PyPI
pyobjc-framework-DeviceDiscoveryExtensionProvides Python bindings for Apple's…
permissive · top 15,000 on PyPI
pyobjc-framework-MediaExtensionProvides Python bindings to Apple's…
permissive · top 15,000 on PyPI
pyiosbackupParses and decrypts iOS device backups,…
copyleft · top 15,000 on PyPI
pyobjc-framework-FinderSyncProvides Python bindings to macOS's FinderSync…
permissive · top 15,000 on PyPI
pyobjc-framework-MapKitProvides Python bindings to Apple's MapKit…
permissive · top 15,000 on PyPI
pyobjc-framework-DataDetectionProvides Python bindings to macOS's…
permissive · top 15,000 on PyPI
pyobjc-framework-BackgroundAssetsProvides Python bindings to Apple's…
permissive · top 15,000 on PyPI
pyobjcPyObjC bridges Python and Objective-C, enabling…
permissive · top 15,000 on PyPI