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. Seedocs/matching.mdfor 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 undersrc/). Defaults to asnake_caseof the API title.--project-name— the distribution name recorded inversion.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
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b940141955310373e5353ca755f175f6a79b7523918610530a9f8a1683b1abe0
|
|
| MD5 |
ef7a3bdeff69baf7cd9dda1117fa7dee
|
|
| BLAKE2b-256 |
e07408e9f68cd60fae63f40c39cc6a70944b0b1a2842ce0ab305dce06f646285
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0c2a0e7a18f2bd2a8ed2177b6aceab9b399caed7a63bbbf5452d96d39bf7d262
|
|
| MD5 |
e8f972d3159cd8690db64a6d35387f8d
|
|
| BLAKE2b-256 |
4aed6ecb2aa8c41b56ce4d20f2b83039cbe6553dc4edd800a4bab615d31efff9
|
File details
Details for the file crozier-0.0.9-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: crozier-0.0.9-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 1.2 MB
- Tags: Python 3, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3983d5e5cdd8416679b229507a9a83d78d4a1a330f56c9c855f23aec0dd3b6e2
|
|
| MD5 |
d95ae92d4d618b1cee69c80ac2022081
|
|
| BLAKE2b-256 |
c8bd480e4fe478ba2dcd8c2330d24c52ae764339181b574ef4ce63c0f779d52a
|
File details
Details for the file crozier-0.0.9-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.
File metadata
- Download URL: crozier-0.0.9-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
- Upload date:
- Size: 1.1 MB
- Tags: Python 3, manylinux: glibc 2.17+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e0b1628efba7561c13b8f83261785f188b401bd730def42e845cf2c723c66956
|
|
| MD5 |
043b3e5cf5981cda5cfca58c95bba40a
|
|
| BLAKE2b-256 |
5218ce07f7ba454ff30b8b6c82ae0e94e39378f1b41735108adda960e32417fc
|
File details
Details for the file crozier-0.0.9-py3-none-macosx_11_0_arm64.whl.
File metadata
- Download URL: crozier-0.0.9-py3-none-macosx_11_0_arm64.whl
- Upload date:
- Size: 1.0 MB
- Tags: Python 3, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8982bb7bd5aebebd9b47e8c72dca8a8df652a1680d94b9c0a279d4464fca8b3b
|
|
| MD5 |
7393947227455ecaa78298f3174c4219
|
|
| BLAKE2b-256 |
2ebdfaba06ad7d96ed0c02c4ab58e949c39e67ebad41e94aaa8642d5293207c5
|
File details
Details for the file crozier-0.0.9-py3-none-macosx_10_12_x86_64.whl.
File metadata
- Download URL: crozier-0.0.9-py3-none-macosx_10_12_x86_64.whl
- Upload date:
- Size: 1.2 MB
- Tags: Python 3, macOS 10.12+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9eb5e3fd09015dbfe4cace7d44d32a375d495649239d5ce3466235da25f12b40
|
|
| MD5 |
1d695f312300d4f1013250fce61a2eb9
|
|
| BLAKE2b-256 |
c0e58399a9e2d8ba166dc83904a498aa6daa82f9b388485a2eed326af3025f67
|