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
- Pure Implementation: No dependencies on SnakeYAML or other external parsers
- 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'}
# Load with a parser plugin (see https://yamlstar.org/plugins/)
opts = yamlstar.Options().plugin(yamlstar.parser('go-yaml'))
ys = yamlstar.YAMLStar(opts)
data = ys.load("key: value")
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.20
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.20.tar.gz | 7.4 kB | Without provenance | Details |
Built distributions (wheels)
| File | Reset | |||
|---|---|---|---|---|
| yamlstar-0.1.20-py3-none-win_amd64.whl | Python 3 | none | Windows x86-64 | Details |
| yamlstar-0.1.20-py3-none-manylinux_2_31_x86_64.whl | Python 3 | none | Linux glibc 2.31+ x86-64 | Details |
| yamlstar-0.1.20-py3-none-macosx_15_0_x86_64.whl | Python 3 | none | macOS 15.0+ x86-64 | Details |
| yamlstar-0.1.20-py3-none-macosx_14_0_arm64.whl | Python 3 | none | macOS 14.0+ ARM64 | Details |
Total release size: 83.8 MB
Release files / yamlstar-0.1.20.tar.gz
| Download URL | yamlstar-0.1.20.tar.gz |
|---|---|
| Size | 7.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
f6020381deb20c7b2749e5a8ec3142a0e31948253c720b2368a50e3dcb160a6f
|
|
BLAKE2b-256 checksum How to use checksums |
24ac060db77500c3ba832954188beb0830920609d47629a963d9814d129f298d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.3
|
Release files / yamlstar-0.1.20-py3-none-win_amd64.whl
| Download URL | yamlstar-0.1.20-py3-none-win_amd64.whl |
|---|---|
| Size | 12.5 MB |
| Tags | Python 3 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
00d8fddb51ecfa117ad6d28fc96747a366f3419f2e2ac5580c7dac15f2e3656e
|
|
BLAKE2b-256 checksum How to use checksums |
143511879a91ebec6b8f18573db6b24476ab064bf3004c9612e095a725f7be20
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.3
|
Release files / yamlstar-0.1.20-py3-none-manylinux_2_31_x86_64.whl
| Download URL | yamlstar-0.1.20-py3-none-manylinux_2_31_x86_64.whl |
|---|---|
| Size | 25.2 MB |
| Tags | Linux glibc 2.31+ x86-64 Python 3 |
|
SHA-256 checksum How to use checksums |
ff55152701cb77e6e0caa2402d51edb2598aee2536ed2ec76b295de71420f748
|
|
BLAKE2b-256 checksum How to use checksums |
7fb60eb11a3aa3b64faf6bf2b87d63d571d3ce4a3d4cd26adba78199ad3f6209
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.3
|
Release files / yamlstar-0.1.20-py3-none-macosx_15_0_x86_64.whl
| Download URL | yamlstar-0.1.20-py3-none-macosx_15_0_x86_64.whl |
|---|---|
| Size | 24.4 MB |
| Tags | Python 3 macOS 15.0+ x86-64 |
|
SHA-256 checksum How to use checksums |
73f8f060be8cecdb4bcabc3d5cb334faed19ed68547b62fe2b5e97510ddc8872
|
|
BLAKE2b-256 checksum How to use checksums |
23c4437633118bb75db7c475c56f8f8a7adafa438f6fd900bfd101bfe79fdc96
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.3
|
Release files / yamlstar-0.1.20-py3-none-macosx_14_0_arm64.whl
| Download URL | yamlstar-0.1.20-py3-none-macosx_14_0_arm64.whl |
|---|---|
| Size | 21.7 MB |
| Tags | Python 3 macOS 14.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
4291b948bfff2150b9a12d3c5ced929d06e93791d64f67985e06b0e37eda4c50
|
|
BLAKE2b-256 checksum How to use checksums |
1b5c188a74dc34d23895ce875e04af1dfcf1980518d6cf837ff62e4a23ffa3c6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.3
|
Security for yamlstar 0.1.20
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.