Skip to main content

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:

  • Exception if 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:

  • Exception if 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:

  1. Development path (relative to package)
  2. Directories in LD_LIBRARY_PATH environment variable
  3. /usr/local/lib (default install location)
  4. ~/.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).

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)

Source distribution for yamlstar 0.1.25
File Size Uploaded Provenance
yamlstar-0.1.25.tar.gz 12.1 kB Without provenance Details

Built distributions (wheels)

Table of built distributions (wheels) for yamlstar 0.1.25
File
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.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page