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.2.tar.gz (59.2 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.2-py3-none-win_amd64.whl (899.3 kB view details)

Uploaded Python 3Windows x86-64

crozier-0.0.2-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.2-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (955.1 kB view details)

Uploaded Python 3manylinux: glibc 2.17+ ARM64

crozier-0.0.2-py3-none-macosx_11_0_arm64.whl (886.6 kB view details)

Uploaded Python 3macOS 11.0+ ARM64

crozier-0.0.2-py3-none-macosx_10_12_x86_64.whl (984.9 kB view details)

Uploaded Python 3macOS 10.12+ x86-64

File details

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

File metadata

  • Download URL: crozier-0.0.2.tar.gz
  • Upload date:
  • Size: 59.2 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.2.tar.gz
Algorithm Hash digest
SHA256 f29c96133be1796e9e62e04f83b154e3fdea537af8b2bd482ac464cfb2a41702
MD5 5d79dae65a78c4aba2db2a6fcbdb1e16
BLAKE2b-256 d436e17b4bc2b76a72684796bdd9e78362113a63fc371a0dfd21cf8ce0133668

See more details on using hashes here.

File details

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

File metadata

  • Download URL: crozier-0.0.2-py3-none-win_amd64.whl
  • Upload date:
  • Size: 899.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.2-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 bed1aa1e49aaa43b76e785db62615d1f2ed7b2d4ab0cfd708e9c0b382a1c8526
MD5 940dd7d4ac181dca70a7f61cab331769
BLAKE2b-256 0c3426e745181f46c4fb3cdd9edf423be313460d0e0e08fc180dafbc60ac673c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crozier-0.0.2-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 4217eeebc95347ac58893aa84df63bb165c274d1117cc5096cd3f5336484d93b
MD5 10f07dd8e0d1fe1afe6b46c1833f49c1
BLAKE2b-256 d6a63d43c12359c81b8a4fcf67dee02ef688ad3128db3e821f80d566f05addf3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crozier-0.0.2-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 9438a0c1501be08f5eb76cd8b79ab4ab329322e578a29609772ae86eda7b450a
MD5 0decd61708bf558bf2b23eaa8f89522e
BLAKE2b-256 df41a7f3deae7de5b16fa60e817e47b3bfb7cefaa4130388956eb1942199daf4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crozier-0.0.2-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 1cb4d235f032004cd9a716d855842f955ba11a394eada05d636bccb1c4fb504e
MD5 a0b62f5de5fec244f5bde5dc51187378
BLAKE2b-256 940126b119b0096dce4931ce36172e5071199b6a3f3d82c635aae42776ab008b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crozier-0.0.2-py3-none-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 f7c7e121e7065923418cf40ac6a43bb832626884f26b6d0f76de53f6c9d7e410
MD5 20c78a38e33868feb7d7b9fc02332ff2
BLAKE2b-256 6ed74d16f55a0b0bafa98320a8d0c6ee80865fd104233a15a10ab27350f70db3

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