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.5.tar.gz (83.1 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.5-py3-none-win_amd64.whl (964.3 kB view details)

Uploaded Python 3Windows x86-64

crozier-0.0.5-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.1 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ x86-64

crozier-0.0.5-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.0 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ ARM64

crozier-0.0.5-py3-none-macosx_11_0_arm64.whl (946.1 kB view details)

Uploaded Python 3macOS 11.0+ ARM64

crozier-0.0.5-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.5.tar.gz.

File metadata

  • Download URL: crozier-0.0.5.tar.gz
  • Upload date:
  • Size: 83.1 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.5.tar.gz
Algorithm Hash digest
SHA256 2ed78b2e36317fabfc4fbb6ae9f5d42168f941c19a634df3238f0c833b9b6d29
MD5 6a439ab66377f88fa8317c6d657db36a
BLAKE2b-256 1b27f22d64242269a1031b475a797a4e6037d3eb054fafa8cef9200d87fedc2a

See more details on using hashes here.

File details

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

File metadata

  • Download URL: crozier-0.0.5-py3-none-win_amd64.whl
  • Upload date:
  • Size: 964.3 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.5-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 f5d0c5b90f1d50d8491eb902487adabc9424bc95698b04f87e7f6db1f4dc31dd
MD5 cf7530cdea32ce5d71e23810eff16661
BLAKE2b-256 d6da5f4ba492ede81b5b444a381a8c7791d7f667f7d57e9e5f94722ba1473924

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crozier-0.0.5-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 4f5ef15b1617c1772d6a96afea9c37bc26a72c4ff7717ed26e1d8f2703234404
MD5 8b523d3271e9e434c3615eb3a3358ce2
BLAKE2b-256 dffc2a919a69ba89524ba138c2b1aa3ff5e9e077d653a25db10281ca75657fbd

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crozier-0.0.5-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 323e1a95dd36769491b5c2d32515aed1694b32c7dde4c2cb60bfa22b98ce3160
MD5 8f8cc8d67df76e7ffa139e6f6c30a117
BLAKE2b-256 2e71580c3f384716561af4b035f174e96fd3ab13043c39fca5cc9906bbffca90

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crozier-0.0.5-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 a587c1bfd635c4c45994d9572304885d8a9d0a2e405949bf4b6f4f8d981d1e78
MD5 4265a33d7c90bd15675fbbfdd00bc9c5
BLAKE2b-256 81a5a8534af66e062a47e266bcf26797b9ee6adb37c9efa97fd623029dcf98a1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crozier-0.0.5-py3-none-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 2a774f3b6117b0b5c7da98eccce5018c40c2877b217598ff88dc0d661bd3eac0
MD5 29e7c1688b969a80846f40cc471bd54f
BLAKE2b-256 ee67fb4483b4fc454f6cf8e739acd5e67174949f97be5312930e3d6d29754c5a

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