Skip to main content

Ultra-fast OpenAPI-to-SDK code generator that matches Fern's output, byte for byte.

Project description

crozier

An ultra-fast, memory-efficient OpenAPI-to-SDK code generator written in Rust + minijinja. crozier reproduces Fern's generated SDKs byte-for-byte (with generator-identifying comments aside), driven by nothing but an OpenAPI document and a couple of naming flags — no per-project config, no generators written in the target language.

Python is the only target today; more will follow.

Status: early. crozier generates the Python type layer (pydantic models, enums, unions/aliases) plus version.py/py.typed, and byte-matches Fern's output for those files. See docs/matching.md for exactly what is matched and the roadmap.

Install

From PyPI (fastest — a prebuilt binary, no Rust toolchain): crozier ships as platform wheels that wrap the compiled binary and expose it as a console script, so any Python installer puts it on your PATH in seconds:

pip install crozier      # or: pipx install crozier
uvx crozier --help       # run once without installing

Platforms without a prebuilt wheel fall back to the source distribution, which builds from Rust (a toolchain is needed there).

From crates.io:

cargo install crozier --locked

From the install script (prebuilt binary from GitHub Releases, verified):

curl -fsSL https://raw.githubusercontent.com/nickderobertis/crozier/main/scripts/install.sh | sh

It detects your platform, downloads the matching archive, and verifies it against a trust root independent of where it was downloaded — a Sigstore build-provenance attestation when a verifier (cosign, pip install sigstore, or gh) is present, else the canonical SHA-256 checksum. Pin a version or install location with sh -s -- --version v0.1.0 --to ~/.local/bin.

From source (latest main):

cargo install --git https://github.com/nickderobertis/crozier --locked

From a release archive (manual): each release publishes per-platform archives named crozier-<tag>-<target>.tar.gz with a matching .sha256 and a .sigstore.json provenance bundle, for targets x86_64/aarch64 Linux, x86_64/aarch64 macOS, and x86_64 Windows. Download the archive for your platform from the Releases page, verify the checksum (or the attestation), and put the crozier binary on your PATH.

Usage

crozier generate \
  --spec path/to/openapi.yml \
  --output ./generated \
  --package-name my_api \
  --project-name my-api
  • --spec — the OpenAPI 3.x document (.yml, .yaml, or .json).
  • --output — directory to write the SDK into.
  • --package-name — the Python import package (the directory under src/). Defaults to a snake_case of the API title.
  • --project-name — the distribution name recorded in version.py. Defaults to the package name.

crozier exits 0 on success (with a one-line summary on stderr) and 1 on any error, printing the exact problem and a suggested fix.

Development

The command surface is a small set of just recipes:

just bootstrap   # set up from a clean clone (toolchain + dev tools)
just check       # full gate: fmt, clippy -D warnings, tests + e2e + coverage, deny, machete, doc
just test        # fast tests with coverage enforced (95%)
just test-e2e    # drive the compiled binary and byte-compare against fixtures
just format      # rustfmt in place
just upgrade     # cargo update, then re-run the gate

See AGENTS.md for the durable contributor guide and docs/matching.md for the byte-matching strategy.

License and attribution

crozier is licensed under Apache-2.0. It is an independent, clean-room implementation — it reproduces Fern's generated output format (the project's explicit goal) and does not copy Fern's generator source.

The test fixtures under tests/fixtures/ are Fern's own output and OpenAPI test specs, used under Apache-2.0 with attribution and a statement of changes; see NOTICE and licenses/fern-APACHE-2.0.txt.

Project details


Download files

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

Source Distribution

crozier-0.0.4.tar.gz (70.4 kB view details)

Uploaded Source

Built Distributions

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

crozier-0.0.4-py3-none-win_amd64.whl (923.7 kB view details)

Uploaded Python 3Windows x86-64

crozier-0.0.4-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.0 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ x86-64

crozier-0.0.4-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (977.2 kB view details)

Uploaded Python 3manylinux: glibc 2.17+ ARM64

crozier-0.0.4-py3-none-macosx_11_0_arm64.whl (907.8 kB view details)

Uploaded Python 3macOS 11.0+ ARM64

crozier-0.0.4-py3-none-macosx_10_12_x86_64.whl (1.0 MB view details)

Uploaded Python 3macOS 10.12+ x86-64

File details

Details for the file crozier-0.0.4.tar.gz.

File metadata

  • Download URL: crozier-0.0.4.tar.gz
  • Upload date:
  • Size: 70.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for crozier-0.0.4.tar.gz
Algorithm Hash digest
SHA256 68482a6f3c013948f85e098b77d81a5b2d95818ab1efae4240fc8a85d7357287
MD5 05ff3ff83f9c0cd640fcfa512627151e
BLAKE2b-256 fc4eb51da2f06682ba2b3df0d100770275129bf41bac1617b4cd83709be47f6a

See more details on using hashes here.

File details

Details for the file crozier-0.0.4-py3-none-win_amd64.whl.

File metadata

  • Download URL: crozier-0.0.4-py3-none-win_amd64.whl
  • Upload date:
  • Size: 923.7 kB
  • Tags: Python 3, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for crozier-0.0.4-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 e1701e8f8daaccaae2714caa604607556b869636a77a4b4c07e2f5552b6cef2a
MD5 57132f81ad1d6f0b9df6824be856185c
BLAKE2b-256 d1479d7189439910e820a9d5105aa9b06fd548f6dec2fabc8ea97e833efb707f

See more details on using hashes here.

File details

Details for the file crozier-0.0.4-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for crozier-0.0.4-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 56b8913582b7ee55a26bf211f88cd7af30c30a82a9a7acc7050769324cceffcc
MD5 ab8427a4abae4919cb146bfc6de9ab33
BLAKE2b-256 b1e4e8bf3c46b73dc7ab98ffd13fc1e46592752698a4716d51531a1d340329d5

See more details on using hashes here.

File details

Details for the file crozier-0.0.4-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for crozier-0.0.4-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 f06baefcb1e2b318589f56a9e16a38ed1d30b7e7adcabe9b9972c07f9f440ccb
MD5 0f3d69e5bca42ac684a5ea87c344546e
BLAKE2b-256 a4daa9172e58095843a20ae16577f6fed923f58006b4d718948c40bb3a765b3f

See more details on using hashes here.

File details

Details for the file crozier-0.0.4-py3-none-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for crozier-0.0.4-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 2894b9e5c7149f0616159d3e5d3eb90ed02815abc97bf0f0937554756940b694
MD5 eef678f3fb88ffac341265f7a687b8e6
BLAKE2b-256 7a1af37ba27c0e1bc6dbed7c7922f4e51a2984355c3ae59f4372f666c726ebf9

See more details on using hashes here.

File details

Details for the file crozier-0.0.4-py3-none-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for crozier-0.0.4-py3-none-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 96c6ea121f07b04e20c15546844c5df655e26f9e855fc002694e9e0c411cd8dd
MD5 d976dd34c5d0fe9b8a1df9ddcae3d35c
BLAKE2b-256 cf7e007a3617ac3ea24467f8afade189060570d3fd3b838021384bf7422d8b76

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page