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
  • Pure Implementation: No dependencies on SnakeYAML or other external parsers
  • Fast Native Performance: Uses GraalVM native-image 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'}

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 GraalVM isolate.

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 (GraalVM) 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

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

yamlstar-0.1.17.tar.gz (7.2 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

yamlstar-0.1.17-py3-none-win_amd64.whl (10.6 MB view details)

Uploaded Python 3Windows x86-64

yamlstar-0.1.17-py3-none-manylinux_2_31_x86_64.whl (11.0 MB view details)

Uploaded Python 3manylinux: glibc 2.31+ x86-64

yamlstar-0.1.17-py3-none-macosx_14_0_arm64.whl (10.2 MB view details)

Uploaded Python 3macOS 14.0+ ARM64

File details

Details for the file yamlstar-0.1.17.tar.gz.

File metadata

  • Download URL: yamlstar-0.1.17.tar.gz
  • Upload date:
  • Size: 7.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.3

File hashes

Hashes for yamlstar-0.1.17.tar.gz
Algorithm Hash digest
SHA256 f4ccf6ec843ccfbce1cac2943f1594707d570f725e0905ef2879e099f695109f
MD5 1cf6557f99118084bf8db43e077bc24d
BLAKE2b-256 c1fb3eea9e98ea8a54fb92f922211385b070b9f531851d4eb21da6dd339d1663

See more details on using hashes here.

File details

Details for the file yamlstar-0.1.17-py3-none-win_amd64.whl.

File metadata

  • Download URL: yamlstar-0.1.17-py3-none-win_amd64.whl
  • Upload date:
  • Size: 10.6 MB
  • Tags: Python 3, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.3

File hashes

Hashes for yamlstar-0.1.17-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 cb6c00c0d5b0227967eb9af2929d299602c8a8c660be6105e25535e4e7824abb
MD5 8c75a0fad7ad094234a7a9d12963baa3
BLAKE2b-256 f188c7b997ba1f83a973242b5fc9a7e1039b1fee93dea7a2a64b20d30f5574c5

See more details on using hashes here.

File details

Details for the file yamlstar-0.1.17-py3-none-manylinux_2_31_x86_64.whl.

File metadata

File hashes

Hashes for yamlstar-0.1.17-py3-none-manylinux_2_31_x86_64.whl
Algorithm Hash digest
SHA256 3db08bc88f3ac883cf7d9ca4091a3785d3dfa5539fde2211126b812792ed2b58
MD5 11a268b4d387a06248cd311f5889005a
BLAKE2b-256 019dfdc205faa24dac2a5c697ac07613a0ca9ebc97962eb79023ecb560b3eda6

See more details on using hashes here.

File details

Details for the file yamlstar-0.1.17-py3-none-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for yamlstar-0.1.17-py3-none-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 65a1036fd5a0f4a35bb4ec67dec96d0baacb3cb4f6bf1b003b07199b12c26b77
MD5 59c0a023577cc122e0220d372f47263f
BLAKE2b-256 17515b27adc5ed5753887a19ce39f019a6484fc7357833873541c563b6d3a6bd

See more details on using hashes here.

Release history Release notifications | RSS feed

0.1.19

5 files

0.1.18

5 files

This release

0.1.17 This release

4 files

0.1.15

4 files

0.1.14

4 files

0.1.12

4 files

0.1.11

4 files

0.1.9

4 files

0.1.8

4 files

0.1.7

4 files

0.1.6

3 files

0.1.5

3 files

0.1.4

3 files

0.1.3

1 file

0.1.2

1 file

0.1.0

1 file

0.0.1

1 file

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