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

Uploaded Python 3Windows x86-64

crozier-0.0.9-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.9-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.1 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ ARM64

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

Uploaded Python 3macOS 11.0+ ARM64

crozier-0.0.9-py3-none-macosx_10_12_x86_64.whl (1.2 MB view details)

Uploaded Python 3macOS 10.12+ x86-64

File details

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

File metadata

  • Download URL: crozier-0.0.9.tar.gz
  • Upload date:
  • Size: 107.3 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.9.tar.gz
Algorithm Hash digest
SHA256 b940141955310373e5353ca755f175f6a79b7523918610530a9f8a1683b1abe0
MD5 ef7a3bdeff69baf7cd9dda1117fa7dee
BLAKE2b-256 e07408e9f68cd60fae63f40c39cc6a70944b0b1a2842ce0ab305dce06f646285

See more details on using hashes here.

File details

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

File metadata

  • Download URL: crozier-0.0.9-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.9-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 0c2a0e7a18f2bd2a8ed2177b6aceab9b399caed7a63bbbf5452d96d39bf7d262
MD5 e8f972d3159cd8690db64a6d35387f8d
BLAKE2b-256 4aed6ecb2aa8c41b56ce4d20f2b83039cbe6553dc4edd800a4bab615d31efff9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crozier-0.0.9-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 3983d5e5cdd8416679b229507a9a83d78d4a1a330f56c9c855f23aec0dd3b6e2
MD5 d95ae92d4d618b1cee69c80ac2022081
BLAKE2b-256 c8bd480e4fe478ba2dcd8c2330d24c52ae764339181b574ef4ce63c0f779d52a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crozier-0.0.9-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 e0b1628efba7561c13b8f83261785f188b401bd730def42e845cf2c723c66956
MD5 043b3e5cf5981cda5cfca58c95bba40a
BLAKE2b-256 5218ce07f7ba454ff30b8b6c82ae0e94e39378f1b41735108adda960e32417fc

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crozier-0.0.9-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 8982bb7bd5aebebd9b47e8c72dca8a8df652a1680d94b9c0a279d4464fca8b3b
MD5 7393947227455ecaa78298f3174c4219
BLAKE2b-256 2ebdfaba06ad7d96ed0c02c4ab58e949c39e67ebad41e94aaa8642d5293207c5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crozier-0.0.9-py3-none-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 9eb5e3fd09015dbfe4cace7d44d32a375d495649239d5ce3466235da25f12b40
MD5 1d695f312300d4f1013250fce61a2eb9
BLAKE2b-256 c0e58399a9e2d8ba166dc83904a498aa6daa82f9b388485a2eed326af3025f67

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