Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
60 commits
Select commit Hold shift + click to select a range
d6ae746
Initial Elixir NIF release v0.1.0
niranjanaryan Sep 5, 2026
2803361
Prepare Hex package metadata and elixir_make NIF build
niranjanaryan Sep 5, 2026
59a6a2f
feat: add GitHub Sponsors and Buy Me a Coffee funding
niranjanaryan Sep 8, 2026
8eb350e
perf: build maps in a single enif_make_map_from_arrays call
niranjanaryan Oct 9, 2026
290e90a
bench: compare zaml against glazer, yaml_elixir, and yamerl
niranjanaryan Oct 9, 2026
878ac4a
fix: drop stray unused input_term parameter from parse_yaml
niranjanaryan Oct 9, 2026
1690835
perf: single-shot map building and zero-copy sub-binary scalars
niranjanaryan Oct 9, 2026
9d285c0
fix: support anchors and aliases
niranjanaryan Oct 9, 2026
8669f7e
docs: fix Zig prerequisite and build/benchmark notes
niranjanaryan Oct 9, 2026
a55672c
perf: keep zero-copy sub-binary scalars with anchor support
niranjanaryan Oct 9, 2026
1d9af57
docs: align benchmark numbers across README and release notes
niranjanaryan Oct 9, 2026
2055c78
release: zaml 0.2.0
niranjanaryan Oct 9, 2026
13a708e
docs: give the bench/build Mix tasks public moduledocs
niranjanaryan Oct 9, 2026
4713c83
docs: document Mix tasks and fix benchmark comment
niranjanaryan Oct 9, 2026
e4edc0e
docs: bump zaml version to 0.2.0 in benchmark table
niranjanaryan Oct 9, 2026
560134f
docs: add Zig install step to forum post
niranjanaryan Oct 9, 2026
b849b34
docs: align forum post to YAML 1.1 resolution; add Gen Z social post …
niranjanaryan Oct 9, 2026
c301479
docs: add catchy Gen Z cut of the Elixir Forum post
niranjanaryan Oct 9, 2026
60e8b42
docs: catchier release copy (blog/hex + LinkedIn/X/Reddit/HN) and res…
niranjanaryan Oct 9, 2026
4bef17d
gitignore: stop tracking RELEASE_NOTES draft copy
niranjanaryan Oct 9, 2026
c5ff274
gitignore: stop tracking RELEASE_NOTES draft copy
niranjanaryan Oct 9, 2026
a9c599c
python: libyaml-backed CPython extension (Zig 0.16 + Py3.14 compatibl…
niranjanaryan Oct 9, 2026
95c4acb
eval: libfyaml vs libyaml event-mode comparison
niranjanaryan Oct 9, 2026
c522a14
docs: add speed eval (libfyaml vs libyaml)
niranjanaryan Oct 9, 2026
03a74a1
eval: update libfyaml doc-mode numbers with allow-dup-keys
niranjanaryan Oct 10, 2026
5319dba
python: remove profiling; add Python benchmark helper (run_py_bench.py)
niranjanaryan Oct 10, 2026
e28c1e3
docs: add Python extension vs PyYAML/ruamel performance
niranjanaryan Oct 10, 2026
301f3fe
python: add Codon-compatible benchmark harness; zaml 437ms under Codo…
niranjanaryan Oct 10, 2026
0ae8008
python: PEP 517/621 packaging, changelog + readme updates
niranjanaryan Oct 10, 2026
cbcad02
docs: eval 0.0.9 (stub) vs 0.2.0; ~1.36x over 0.0.9-era prototype
niranjanaryan Oct 10, 2026
a5a3c2e
ci: fix cibuildwheel 2.x build selector and musllinux libyaml install
niranjanaryan Oct 21, 2026
db40b36
python: support CPython 3.12/3.13 refcount layout; fix CI lint and ru…
niranjanaryan Oct 21, 2026
932b860
ci: generate benchmark fixture; use manylinux_2_28 image
niranjanaryan Oct 21, 2026
1dd6f9b
python: rename distribution and extension to zamlpy
niranjanaryan Oct 21, 2026
b38a682
core: share the scalar rules between the hosts
niranjanaryan Oct 22, 2026
12a9876
wasm: build the parser for the browser and for WASI
niranjanaryan Oct 22, 2026
2e16e75
packages: add the npm package and the Wasmer command
niranjanaryan Oct 22, 2026
b97a3f1
wasm: drop the unused version stub
niranjanaryan Oct 22, 2026
55995c3
core: write the output formats while the document is parsed
niranjanaryan Oct 22, 2026
b97c6f4
packages: test the browser entry point and the types of zamljs
niranjanaryan Oct 22, 2026
bdb30be
docs: the WebAssembly core writes the document while it is parsed
niranjanaryan Oct 22, 2026
b283661
core: cover the aliases as keys in the differential test
niranjanaryan Oct 22, 2026
171437e
benchmark: compare the npm package with the JavaScript parsers
niranjanaryan Oct 22, 2026
398d6e7
wasm: tell an out of memory apart from a parse failure
niranjanaryan Oct 22, 2026
b565780
kilo: keep the plan of the multi-ecosystem work
niranjanaryan Oct 22, 2026
6de8dcc
release: prepare 0.3.0 and fix the links of the repository
niranjanaryan Oct 22, 2026
bc563a9
release: publish the Elixir package with the release
niranjanaryan Oct 22, 2026
6efd0f3
ci: let the release through while the Windows build is broken
niranjanaryan Oct 22, 2026
47d19bc
ci: publish the Python distribution from the tag
niranjanaryan Oct 22, 2026
8784c06
packages: publish the Wasmer command with the manifest of Wasmer 7
niranjanaryan Oct 22, 2026
2598e43
release: publish the Elixir package in the production environment
niranjanaryan Oct 22, 2026
afbdc0a
release: fix the pattern that sets the version of the mix project
niranjanaryan Oct 22, 2026
9275053
ci: use the Wasmer setup action
niranjanaryan Oct 22, 2026
a52e071
packages: run the tests with an explicit glob
niranjanaryan Oct 22, 2026
1b932d4
-
niranjanaryan Oct 22, 2026
1177c28
-
niranjanaryan Oct 22, 2026
4a3e1c1
-
niranjanaryan Oct 22, 2026
db91f70
-
niranjanaryan Oct 22, 2026
4355eb4
-
niranjanaryan Oct 22, 2026
7b6f816
-
niranjanaryan Oct 22, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions .formatter.exs
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
[
inputs: [
"{mix,.formatter}.exs",
"{config,lib,test}/**/*.{ex,exs}"
],
line_length: 120
]
2 changes: 2 additions & 0 deletions .github/FUNDING.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
github: niranjanaryan
custom: https://www.buymeacoffee.com/niranjanaryan
154 changes: 120 additions & 34 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -1,96 +1,182 @@
name: CI
on:
pull_request:
workflow_dispatch:
inputs:
version:
description: "Version to set on the Python package (e.g. 0.3.1)"
required: false
type: string
push:
tags:
- "v*"
release:
types:
- published

# The Python distribution is published when a release is tagged or published.
# The job needs the `pypi_password` secret of the repository. A release that
# the release workflow publishes does not trigger this workflow, because it is
# published with the token of the workflow, so the tag is the trigger that
# always works.

jobs:
test-windows:
# The C importer of Zig cannot translate the headers of the Windows SDK
# yet, so the CPython extension does not build on Windows:
# https://codeberg.org/ziglang/translate-c/issues/307
# The job keeps reporting the problem, but it does not hold the release
# back.
runs-on: windows-latest
continue-on-error: true
steps:
- uses: actions/checkout@v3
- name: Setup up Python
uses: actions/setup-python@v3
- uses: actions/checkout@v4
- name: Setup Python
uses: actions/setup-python@v5
with:
python-version: '3.10'
python-version: '3.13'
- name: Install Zig
uses: goto-bus-stop/setup-zig@v1
uses: goto-bus-stop/setup-zig@v2
with:
version: 0.9.1
version: 0.16.0
- name: Install libyaml
run: vcpkg install libyaml:x64-windows
- name: Run simple module test
env:
YAML_INCLUDE_DIR: C:\vcpkg\installed\x64-windows\include
YAML_LIB_DIR: C:\vcpkg\installed\x64-windows\lib
run: python test.py
test-mac-osx:
runs-on: macOS-latest
runs-on: macos-latest
steps:
- uses: actions/checkout@v3
- name: Setup up Python
uses: actions/setup-python@v3
- uses: actions/checkout@v4
- name: Setup Python
uses: actions/setup-python@v5
with:
python-version: '3.10'
python-version: '3.13'
- name: Install Zig
uses: goto-bus-stop/setup-zig@v1
uses: goto-bus-stop/setup-zig@v2
with:
version: 0.9.1
version: 0.16.0
- name: Install libyaml
run: brew install libyaml
- name: Run simple module test
run: python test.py
test-linux:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Setup up Python
uses: actions/setup-python@v3
- uses: actions/checkout@v4
- name: Setup Python
uses: actions/setup-python@v5
with:
python-version: '3.10'
python-version: '3.13'
- name: Install Zig
uses: goto-bus-stop/setup-zig@v1
uses: goto-bus-stop/setup-zig@v2
with:
version: 0.9.1
version: 0.16.0
- name: Install libyaml
run: sudo apt-get update && sudo apt-get install -y libyaml-dev
- name: Lint Python files # TODO: get Zig linting working
uses: pre-commit/action@v2.0.3
uses: pre-commit/action@v3.0.1
- name: Run simple module test
run: python test.py
- name: Generate benchmark fixture
run: python benchmark/gen_big_yaml.py
- name: Run benchmark
working-directory: ./benchmark
run: python benchmark.py
test-wasm:
name: Test the WebAssembly builds
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install Zig
uses: goto-bus-stop/setup-zig@v2
with:
version: 0.16.0
- name: Run the tests of the core
run: zig build test
- name: Build the WebAssembly modules
run: |
zig build wasm -Doptimize=ReleaseSmall
zig build wasm-wasi -Doptimize=ReleaseSmall
- name: Test the JavaScript package
working-directory: packages/zamljs
run: |
npm ci
npm run build
npm run typecheck
npm test
- name: Install Wasmer
uses: wasmerio/setup-wasmer@v3
- name: Smoke test the command
run: |
echo 'a: 1' | wasmer run zig-out/dist/wasm/zaml.wasi.wasm
build_wheels:
name: Build wheels on ${{ matrix.os }}
runs-on: ${{ matrix.os }}
strategy:
matrix:
# TODO: build wheels on other platforms
# os: [ubuntu-20.04, windows-2019, macos-11]
os: [ ubuntu-20.04 ]
# os: [ubuntu-22.04, windows-2019, macos-11]
os: [ubuntu-22.04]
env:
# The glibc 2.17 (CentOS 7) headers cannot be parsed by zig's C
# importer, so use the default manylinux_2_28 (AlmaLinux 8) image.
CIBW_MANYLINUX_X86_64_IMAGE: manylinux_2_28
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- name: Set the version
run: |
if [ -n "${{ inputs.version }}" ]; then
version="${{ inputs.version }}"
else
version="${GITHUB_REF_NAME#v}"
fi
sed -i "s|^version = \".*\"|version = \"$version\"|" pyproject.toml
grep -n '^version' pyproject.toml
- name: Build wheels
uses: pypa/cibuildwheel@v2.12.0
- uses: actions/upload-artifact@v3
uses: pypa/cibuildwheel@v2.22.0
- uses: actions/upload-artifact@v4
if: always()
with:
name: wheels
path: ./wheelhouse/*.whl
if-no-files-found: ignore
build_sdist:
needs: [ test-mac-osx, test-windows ]
needs: [test-mac-osx]
name: Make Python source distribution
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- name: Set the version
run: |
if [ -n "${{ inputs.version }}" ]; then
version="${{ inputs.version }}"
else
version="${GITHUB_REF_NAME#v}"
fi
sed -i "s|^version = \".*\"|version = \"$version\"|" pyproject.toml
grep -n '^version' pyproject.toml
- name: Build SDist
run: pipx run build --sdist

- uses: actions/upload-artifact@v3
- uses: actions/upload-artifact@v4
with:
name: sdist
path: dist/*.tar.gz
upload_pypi:
needs: [ build_wheels, build_sdist ]
needs: [build_wheels, build_sdist]
runs-on: ubuntu-latest
if: github.event_name == 'release' && github.event.action == 'published'
if: >-
github.event_name == 'release' ||
(github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v'))
steps:
- uses: actions/download-artifact@v3
- uses: actions/download-artifact@v4
with:
name: artifact
path: dist
merge-multiple: true

- uses: pypa/gh-action-pypi-publish@v1.5.0
- uses: pypa/gh-action-pypi-publish@v1.12.4
with:
user: __token__
password: ${{ secrets.pypi_password }}
Loading