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.6.tar.gz (84.5 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.6-py3-none-win_amd64.whl (967.8 kB view details)

Uploaded Python 3Windows x86-64

crozier-0.0.6-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.6-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.0 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ ARM64

crozier-0.0.6-py3-none-macosx_11_0_arm64.whl (948.1 kB view details)

Uploaded Python 3macOS 11.0+ ARM64

crozier-0.0.6-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.6.tar.gz.

File metadata

  • Download URL: crozier-0.0.6.tar.gz
  • Upload date:
  • Size: 84.5 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.6.tar.gz
Algorithm Hash digest
SHA256 cca692be356e2f9b4a3bf511cbf1122602745db7bfb2f5b29d1c6cc0270ad126
MD5 884a19d9d00163f69e53a87271dce64c
BLAKE2b-256 c2aae3197bf0e4c307a698fb3366b3a213663a491c7a4b81202b7292bdc34163

See more details on using hashes here.

File details

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

File metadata

  • Download URL: crozier-0.0.6-py3-none-win_amd64.whl
  • Upload date:
  • Size: 967.8 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.6-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 15b0ca9bcc69dfaea638bce467f741666ae3f8b263452670dbb9106d829748bb
MD5 c072a0edc67e31409dc266dc423398fb
BLAKE2b-256 670305eec13283d033f16a91277bc38044f52e32159bc8e057ce77b18b5838b0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crozier-0.0.6-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 01bad1536e414ec1f5dd1c2ec15a7406b8adb70e357690ee3aa27ba5cc8e7987
MD5 8ea72580895b2daf9bb289dbd1755c50
BLAKE2b-256 fb059aba4ae5a2ccc5d4443155e083e21257fbfa63cb7baead9bdb44efa5d2ad

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crozier-0.0.6-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 6c3e56af611a745c90ee5010cbdf531d895e0956e373644a6b507b3d2c702d45
MD5 914944e9c7643ce56e5ce2a4dbfd67cb
BLAKE2b-256 2e238e9ac9e2b9835fd960c5f81b71456653a88d31f1b808856aa6c24adfb229

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crozier-0.0.6-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ae9f587d9f89776e72681d837eab6f05c2df8d11374b32387cc10c6397a2cf4f
MD5 7b9bdf20b42c7f6f61684321a51704b1
BLAKE2b-256 81d1b7c2d3eac657b643f570f6df63e6c2367929d614b1b0d08594c6b75719cd

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crozier-0.0.6-py3-none-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 e85848032c1c862805838de32f313cd5e9b81373f2fcd3b59da1699c233cfa6b
MD5 847b869689cb1cf1febd1ec61fea3939
BLAKE2b-256 2a1ac0313e309a58ce23df356e2ac9d412f82a5046cc9d3369c04185210e8aaf

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