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.8.tar.gz (99.8 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.8-py3-none-win_amd64.whl (1.1 MB view details)

Uploaded Python 3Windows x86-64

crozier-0.0.8-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.2 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ x86-64

crozier-0.0.8-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.1 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ ARM64

crozier-0.0.8-py3-none-macosx_11_0_arm64.whl (1.0 MB view details)

Uploaded Python 3macOS 11.0+ ARM64

crozier-0.0.8-py3-none-macosx_10_12_x86_64.whl (1.1 MB view details)

Uploaded Python 3macOS 10.12+ x86-64

File details

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

File metadata

  • Download URL: crozier-0.0.8.tar.gz
  • Upload date:
  • Size: 99.8 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.8.tar.gz
Algorithm Hash digest
SHA256 c3ab62645c248cba5bf5e6826d1c7b7ce8f1a625027a6cbd068133db359a94e3
MD5 d4371cfed76c7f1f3cc7f6b664f3887c
BLAKE2b-256 66252e8c44aa7322b5716c03d4649bfa5eb9050370b903b624a405f649d5f68a

See more details on using hashes here.

File details

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

File metadata

  • Download URL: crozier-0.0.8-py3-none-win_amd64.whl
  • Upload date:
  • Size: 1.1 MB
  • 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.8-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 ed68fb1b00b6c7aa2431635e01946e3a5308239697686991aa7c6652c23f698f
MD5 6fca9a688ebf23fb1540d806ed52e0ee
BLAKE2b-256 e5a45fa90979edcdd6d23631f913ccb135d57d2492f1c3fdc3853822809b8f6d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crozier-0.0.8-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 83df535768da8a57bb3aeba6ddb52f7b4786ddd3db6057dc459da709517a42ca
MD5 beeb5774edad7652112f1ee3d8b4a4c4
BLAKE2b-256 a1431f9c251d5b92fdc4e3faa7139f7fa91a369ced0b12fc48211e078ffdc9c7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crozier-0.0.8-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 7c7898ceb2af4ac07cb895060995be63cf37526a408a12267b2ecef49ae4d026
MD5 50d8b7cbec66b32df1e57c212b7349d0
BLAKE2b-256 ce702c105d8ffbb547234e9abe543a0acfbc61e25df3c2203264c72d0618bf87

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crozier-0.0.8-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b0bc36a83494c27b73edd1779ec162af2001c9525dde8153389878cad99bdd4f
MD5 0a6592decc84f1be9ad65ba5fe26b9f9
BLAKE2b-256 cacd6c091e7b6513a5298a0b0a088a760f8e1fd76daa5fa06a0e98fba262c32a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crozier-0.0.8-py3-none-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 f5ea3a7d1266c6eb07033a08af928fb59a77900cf19fbfe6124f53cda47c78cc
MD5 b8c472fa5712c5ee1b1932c7a20e1ae3
BLAKE2b-256 05f3b24d7de2c24bfe0d117b758b7883db154b1974b213da3f19233e5d32ca8c

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