--- id: serpent version: "1.43" license: MIT license_treatment: permissive maintenance: active --- # serpent — Serialization based on ast.literal_eval License: permissive · Maintenance: active · Downloads: 663.7K/mo ## What it is and what it does Serpent is a serialization library that converts Python objects into human-readable, executable Python source code (literals) that can be safely deserialized using ast.literal_eval(). Unlike pickle, which has known security risks, serpent produces text that is safe to transport over networks or store in files because it only recreates literal values—no arbitrary code execution occurs during deserialization. The library extends basic repr() and literal_eval() by adding automatic serialization for types like uuid, datetime, array, and decimal, encoding bytes as base-64, and allowing pretty-printed output with comments. It's designed for scenarios where human readability, safety, and cross-platform compatibility matter more than performance. Serpent also has implementations in Java and .NET, enabling data exchange between Python, Java, and C# ecosystems. Use it for: - Serialize configuration or data files that humans need to read and edit while maintaining type safety. - Exchange structured data between Python, Java, and .NET services without security risks of pickle. - Store application state or cache data in a format that survives code changes and is auditable. - Debug and log complex object structures in a readable, executable format. - Build a lightweight data protocol for inter-process communication where JSON's type limitations are insufficient. ## Worth the install? AI-flagged interpretation of the facts above — verify before relying. Serpent serializes Python objects to human-readable, safe literals that can be deserialized using ast.literal_eval(), with support for uuid, datetime, array, and decimal types. Yes, if you need safe, human-readable serialization and can accept the constraint that circular object references are not supported. The zero-dependency installation, active maintenance, permissive license, and lack of known vulnerabilities make it a solid choice for configuration, logging, and cross-language data exchange. Not suitable if you need binary efficiency or must serialize arbitrary object graphs. ## Install pip install serpent uv add serpent poetry add serpent ## Installing serpent Before you install: Low friction: pure Python wheel with no runtime dependencies. Actively maintained with a recent release; last commit 2026-05-30 and status marked active. License in practice: MIT license (permissive) means you can use, modify, and distribute serpent freely in commercial or private projects as long as you retain the copyright notice and license text. Quickstart: import serpent data = {'names': ['Alice', 'Bob'], 'count': 42} ser_bytes = serpent.dumps(data) obj = serpent.loads(ser_bytes) Requires Python 3.2 or later; cannot serialize object graphs (circular references will raise ValueError). Verify before relying: - Performance characteristics compared to alternative serialization formats in typical workloads. - Whether cross-language interoperability (Java and .NET) is actively maintained and tested. - Handling of very large objects or deeply nested structures in practice. ## Package facts - License: MIT (permissive) - Python support: supports_current - Install friction: low - Maintenance: active - Downloads: 663.7K/month (top 15,000 on PyPI) - Known vulnerabilities: none known ## Tags python object serialization, ast.literal_eval serializer, safe data serialization, cross-language serialization, human-readable serialization format, python to bytes serialization, literal eval based serialization, serialization, cross-language, safe-deserialization [View on SkillFed](https://skillfed.io/packages/serpent) · [View on PyPI](https://pypi.org/project/serpent/)