{"id":24172,"library":"openstep-plist","title":"openstep-plist","description":"A fast ASCII plist parser written in Cython, used primarily for parsing Glyphs.app and other Apple-style ASCII property list files. Current version 0.5.2, supports Python >=3.8, released on a maintenance cadence.","status":"active","version":"0.5.2","language":"python","source_language":"en","source_url":"https://github.com/fonttools/openstep-plist","tags":["plist","ascii-plist","glyphs","fonttools","cython"],"install":[{"cmd":"pip install openstep-plist","lang":"bash","label":"pip"}],"dependencies":[],"imports":[{"note":"load is a top-level function, not a submodule.","wrong":"from openstep_plist.load import load","symbol":"load","correct":"from openstep_plist import load"},{"note":"Works but not the recommended import.","wrong":"import openstep_plist; openstep_plist.loads()","symbol":"loads","correct":"from openstep_plist import loads"},{"note":"","wrong":"","symbol":"dump","correct":"from openstep_plist import dump"},{"note":"","wrong":"","symbol":"dumps","correct":"from openstep_plist import dumps"},{"note":"PlistParser is exposed at package level.","wrong":"from openstep_plist.parser import PlistParser","symbol":"PlistParser","correct":"from openstep_plist import PlistParser"},{"note":"PlistWriter is exposed at package level.","wrong":"from openstep_plist.writer import PlistWriter","symbol":"PlistWriter","correct":"from openstep_plist import PlistWriter"}],"quickstart":{"code":"from openstep_plist import load, dumps\n\n# Parse an ASCII plist string\nplist_string = \"\"\"{\n    name = Example;\n    version = 1;\n}\"\"\"\ndata = load(plist_string)\nprint(data)  # {'name': 'Example', 'version': 1}\n\n# Dump back to ASCII plist\noutput = dumps(data)\nprint(output)\n","lang":"python","description":"Parse and dump ASCII plist strings."},"warnings":[{"fix":"Use `dumps(data, single_line_empty_objects=True)` to preserve old spacing.","message":"In v0.5.0, the default behavior for dumping single-line tuples changed: no space after comma. If you rely on the old format, set `single_line_empty_objects=True`.","severity":"breaking","affected_versions":">=0.5.0"},{"fix":"If you need automatic conversion to int/float, pass `use_numbers=True` to `load()` or `loads()`.","message":"In v0.2.1, the default value of `use_numbers` in the parser was reverted to False. Strings that look like numbers (e.g., '123') are now kept as strings by default.","severity":"breaking","affected_versions":">=0.2.1"},{"fix":"Use `importlib.metadata.version('openstep-plist')` instead of `pkg_resources.get_distribution('openstep-plist').version`.","message":"`pkg_resources` usage was replaced by `importlib.metadata` in v0.5.2. If you were depending on `pkg_resources` internals, update your code.","severity":"deprecated","affected_versions":">=0.5.2"},{"fix":"Use `plistlib` for XML/binary plists; use `openstep-plist` only for ASCII plist format (e.g., Glyphs files).","message":"The library only supports ASCII property list format, not XML or binary plists. Loading an XML plist will fail or produce unexpected results.","severity":"gotcha","affected_versions":"all"}],"env_vars":null,"last_verified":"2026-05-01T00:00:00.000Z","next_check":"2026-07-30T00:00:00.000Z","problems":[{"fix":"Install with `pip install openstep-plist`, then import as `from openstep_plist import ...`.","cause":"The package is installed as `openstep-plist` (with hyphen) but imported as `openstep_plist` (underscore).","error":"ModuleNotFoundError: No module named 'openstep_plist'"},{"fix":"Upgrade to latest version (`pip install -U openstep-plist`) or use `from openstep_plist import loads`.","cause":"Older versions (e.g., 0.2.x) did not expose `loads` at the top level; or the import is wrong.","error":"AttributeError: module 'openstep_plist' has no attribute 'loads'"},{"fix":"Use Python's built-in `plistlib` for XML or binary plists.","cause":"Attempting to parse XML or binary plist data with openstep-plist, which only handles ASCII plist format.","error":"ValueError: Unsupported plist format"}],"ecosystem":"pypi","meta_description":null,"install_score":null,"install_tag":null,"quickstart_score":null,"quickstart_tag":null}