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.24
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.24.tar.gz | 12.0 kB | Without provenance | Details |
Built distributions (wheels)
| File | Reset | |||
|---|---|---|---|---|
| yamlstar-0.1.24-py3-none-win_amd64.whl | Python 3 | none | Windows x86-64 | Details |
| yamlstar-0.1.24-py3-none-manylinux_2_31_x86_64.whl | Python 3 | none | Linux glibc 2.31+ x86-64 | Details |
| yamlstar-0.1.24-py3-none-macosx_15_0_x86_64.whl | Python 3 | none | macOS 15.0+ x86-64 | Details |
| yamlstar-0.1.24-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.24.tar.gz
| Download URL | yamlstar-0.1.24.tar.gz |
|---|---|
| Size | 12.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
0f1895d6343686f555247da736daf3e91b0e49f9fbfe7efb503354892058ddcc
|
|
BLAKE2b-256 checksum How to use checksums |
070502dfe9500cfb32bb84f83586a4712c4503dd2bfcabe4fac745d7f9b54d41
|
| 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.24-py3-none-win_amd64.whl
| Download URL | yamlstar-0.1.24-py3-none-win_amd64.whl |
|---|---|
| Size | 6.4 MB |
| Tags | Python 3 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
8350e8951f4d251916d06463c1d4a03878b6f10d93afecfa5fc459d6fae896c9
|
|
BLAKE2b-256 checksum How to use checksums |
83d67bc16fe1de5f6ca0c0f4d1e010fb1ab2076df09ba037090520f541d2199c
|
| 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.24-py3-none-manylinux_2_31_x86_64.whl
| Download URL | yamlstar-0.1.24-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 |
36ff27b4785fede3b49e555aa6639fff71a1458649f8c3d02f6f308fe7bebe2a
|
|
BLAKE2b-256 checksum How to use checksums |
cca2e7b64bbcf72ace09062ae732cd1bb1a1ada095e196dd58e2c41b34e096b0
|
| 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.24-py3-none-macosx_15_0_x86_64.whl
| Download URL | yamlstar-0.1.24-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 |
95c471f4d55a75873fc378930cebcb78e090d08246168a228492fbee0ae55246
|
|
BLAKE2b-256 checksum How to use checksums |
08f95e59f9a884ce35e99b1111e887276205eecd7f760531980018b76ecdc0ae
|
| 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.24-py3-none-macosx_14_0_arm64.whl
| Download URL | yamlstar-0.1.24-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 |
f6ce9709b7671f7ae60d67ea7b38b74a8c53c9a485945ba97f278eeffae910f4
|
|
BLAKE2b-256 checksum How to use checksums |
fa31f631ba2fa5419761499bb362a49f5e43d702ffebf64bbf7ff80ad94c3cab
|
| 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.24
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.