YAMLStar Python Bindings
Python bindings for YAMLStar - a pure YAML 1.2 loader implemented in Clojure.
Features
- YAML 1.2 Spec Compliance: 100% compliant with YAML 1.2 core schema
- Pluggable YAML: Select parser and emitter implementations per call
- Fast Native Performance: Uses the native YAMLStar shared library
- Simple API: Load YAML documents with a single function call
- Multi-Document Support: Load multiple YAML documents from a single string
Installation
Prerequisites
First, build and install the shared library:
cd ../libyamlstar
make native
sudo make install PREFIX=/usr/local
Or install to user-local directory:
cd ../libyamlstar
make native
make install PREFIX=~/.local
Install Python Package
pip install .
For development:
pip install -e .
Quick Start
import yamlstar
# Create a YAMLStar instance
ys = yamlstar.YAMLStar()
# Load a simple YAML string
data = ys.load("key: value")
print(data) # {'key': 'value'}
# Select YAML parser and emitter plugins (see https://yamlstar.org/plugins/)
opts = yamlstar.Options()
opts.plugin(yamlstar.parser('go-yaml'))
opts.plugin(yamlstar.yaml_emitter('go-yaml'))
ys = yamlstar.YAMLStar(opts)
data = ys.load("key: value")
Install a Shared Plugin
Install the JSON comments plugin wheel in the same environment:
pip install yamlstar-plugin-json-comments
The binding discovers the installed library when that plugin is selected:
opts = yamlstar.Options().plugin(yamlstar.json_comments())
ys = yamlstar.YAMLStar(opts)
data = ys.load('''{
"a": true // comment
}''')
Setting YAMLSTAR_LIBRARY_PATH disables Python package discovery and uses
only the directories in that explicit path.
Usage Examples
Basic Types
import yamlstar
ys = yamlstar.YAMLStar()
# Strings
ys.load("hello") # 'hello'
# Integers
ys.load("42") # 42
# Floats
ys.load("3.14") # 3.14
# Booleans
ys.load("true") # True
ys.load("false") # False
# Null
ys.load("null") # None
Collections
# Mappings (dictionaries)
data = ys.load("""
name: Alice
age: 30
city: Seattle
""")
# {'name': 'Alice', 'age': 30, 'city': 'Seattle'}
# Sequences (lists)
data = ys.load("""
- apple
- banana
- orange
""")
# ['apple', 'banana', 'orange']
# Flow style
data = ys.load("[a, b, c]")
# ['a', 'b', 'c']
Nested Structures
data = ys.load("""
person:
name: Alice
age: 30
hobbies:
- reading
- coding
- hiking
""")
# {
# 'person': {
# 'name': 'Alice',
# 'age': 30,
# 'hobbies': ['reading', 'coding', 'hiking']
# }
# }
Multi-Document YAML
# Load all documents from a multi-document YAML string
docs = ys.load_all("""---
name: Document 1
---
name: Document 2
---
name: Document 3
""")
# [
# {'name': 'Document 1'},
# {'name': 'Document 2'},
# {'name': 'Document 3'}
# ]
Type Coercion
YAMLStar follows YAML 1.2 core schema type inference:
data = ys.load("""
string: hello
integer: 42
float: 3.14
bool_true: true
bool_false: false
null_value: null
""")
# {
# 'string': 'hello',
# 'integer': 42,
# 'float': 3.14,
# 'bool_true': True,
# 'bool_false': False,
# 'null_value': None
# }
Error Handling
try:
data = ys.load("invalid: yaml: syntax")
except Exception as e:
print(f"Error loading YAML: {e}")
Version Information
# Get YAMLStar version
version = ys.version()
print(f"YAMLStar version: {version}")
API Reference
YAMLStar Class
__init__()
Create a new YAMLStar instance. Each instance maintains its own native-library lifecycle handle.
ys = yamlstar.YAMLStar()
load(yaml_input)
Load a single YAML document.
Parameters:
yaml_input(str): String containing YAML content
Returns:
- Python object representing the YAML document (dict, list, str, int, float, bool, or None)
Raises:
Exceptionif the YAML is malformed
Example:
data = ys.load("key: value")
load_all(yaml_input)
Load all YAML documents from a multi-document string.
Parameters:
yaml_input(str): String containing one or more YAML documents
Returns:
- List of Python objects, one per YAML document
Raises:
Exceptionif the YAML is malformed
Example:
docs = ys.load_all("---\ndoc1\n---\ndoc2")
version()
Get the YAMLStar version string.
Returns:
- str: Version string
Example:
version = ys.version()
Development
Running Tests
# Run all tests
make test
# Run only pytest tests
make test-pytest
# Run only FFI tests
make test-ffi
Building Distribution
# Build source distribution
make dist
# Build and install in development mode
make install
Requirements
- Python: 3.6 or higher
- libyamlstar: Shared library (installed separately)
- System: Linux or macOS
Library Search Path
The package searches for libyamlstar.so (or .dylib on macOS) in:
- Development path (relative to package)
- Directories in
LD_LIBRARY_PATHenvironment variable /usr/local/lib(default install location)~/.local/lib(user-local install location)
Comparison to PyYAML
| Feature | YAMLStar | PyYAML |
|---|---|---|
| YAML Version | 1.2 | 1.1 |
| Implementation | Pure Clojure | C + Python |
| Type Inference | YAML 1.2 core schema | YAML 1.1 + custom |
| Native Performance | Yes (Gloat/Glojure) | Yes (C extension) |
| Dependencies | libyamlstar.so | None |
License
MIT License - See License file
Credits
Created by Ingy döt Net, inventor of YAML.
YAMLStar is built on the YAML Reference Parser (pure Clojure implementation).
Links
- GitHub: https://github.com/yaml/yamlstar
- YAML Specification: https://yaml.org/spec/1.2/spec.html
Metadata
Release files for yamlstar 0.1.25
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| yamlstar-0.1.25.tar.gz | 12.1 kB | Without provenance | Details |
Built distributions (wheels)
| File | Reset | |||
|---|---|---|---|---|
| yamlstar-0.1.25-py3-none-win_amd64.whl | Python 3 | none | Windows x86-64 | Details |
| yamlstar-0.1.25-py3-none-manylinux_2_31_x86_64.whl | Python 3 | none | Linux glibc 2.31+ x86-64 | Details |
| yamlstar-0.1.25-py3-none-macosx_15_0_x86_64.whl | Python 3 | none | macOS 15.0+ x86-64 | Details |
| yamlstar-0.1.25-py3-none-macosx_14_0_arm64.whl | Python 3 | none | macOS 14.0+ ARM64 | Details |
Total release size: 43.3 MB
Release files / yamlstar-0.1.25.tar.gz
| Download URL | yamlstar-0.1.25.tar.gz |
|---|---|
| Size | 12.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
c7d7b12aee9b33f0cafcad479fa50262ec95c5e4cee7644759f6159cefb9b2ab
|
|
BLAKE2b-256 checksum How to use checksums |
0ee1eee4caa0411240cef36fda15ef39138b465aed5c7171cfa39ec7c2849f1e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.7
|
Release files / yamlstar-0.1.25-py3-none-win_amd64.whl
| Download URL | yamlstar-0.1.25-py3-none-win_amd64.whl |
|---|---|
| Size | 6.4 MB |
| Tags | Python 3 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
d3d9e9d67d9fb37b898ed9543ead161c22261ef88aebc962a94efef7c96d84b9
|
|
BLAKE2b-256 checksum How to use checksums |
34bcdf822cc302ac2ed7e0563fbe205c85710928cf2ae374e59ee5252725a2bf
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.7
|
Release files / yamlstar-0.1.25-py3-none-manylinux_2_31_x86_64.whl
| Download URL | yamlstar-0.1.25-py3-none-manylinux_2_31_x86_64.whl |
|---|---|
| Size | 13.0 MB |
| Tags | Linux glibc 2.31+ x86-64 Python 3 |
|
SHA-256 checksum How to use checksums |
dcd9624e255d70f4d1f402edc4e22f31abc400c4d824e3d1c1aa8110dd889366
|
|
BLAKE2b-256 checksum How to use checksums |
64057265692591270ff39d37aec0519a0ac2d8978bb5ed2e5545400630d8071b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.7
|
Release files / yamlstar-0.1.25-py3-none-macosx_15_0_x86_64.whl
| Download URL | yamlstar-0.1.25-py3-none-macosx_15_0_x86_64.whl |
|---|---|
| Size | 12.6 MB |
| Tags | Python 3 macOS 15.0+ x86-64 |
|
SHA-256 checksum How to use checksums |
7f03c2510401810dde724d237f6a936a4119d6835f6cdedc1ac79bca77b28a2c
|
|
BLAKE2b-256 checksum How to use checksums |
c4d290730b1858a52922eefc7d670d9481a390e520654651cb47bd2d32f0406d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.7
|
Release files / yamlstar-0.1.25-py3-none-macosx_14_0_arm64.whl
| Download URL | yamlstar-0.1.25-py3-none-macosx_14_0_arm64.whl |
|---|---|
| Size | 11.3 MB |
| Tags | Python 3 macOS 14.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
0de7202c92ed4ed121465cba3c12ee63913b6acf25dc1fd1759d733e192013f8
|
|
BLAKE2b-256 checksum How to use checksums |
0fcdfbb9dfe1660a4c73a3cbe6d1f2d712010b23aa3c20b8d80c37272128cd3d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.7
|
Security for yamlstar 0.1.25
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.