Comparison

openapi-to-rust vs Progenitor

Both are opinionated Rust generators. Progenitor is an established client generator aligned with Dropshot-produced OpenAPI 3.0.x documents; openapi-to-rust grew around complex third-party specifications and a combined client, SSE, and Axum workflow.

Last reviewed July 28, 2026

On This Page
  1. Short answer
  2. Scope comparison
  3. Build benchmark
  4. Project strengths
  5. Which should you choose?
  6. Sources
Independent projects, different goals

openapi-to-rust is not affiliated with Oxide Computer Company or Progenitor. Progenitor is named here to help Rust teams choose by use case, not to imply that one project should serve every OpenAPI workflow.

The short answer

Start with Progenitor when your API is produced by Dropshot, you want its procedural-macro or build-script integration, or its pagination streams, generated CLI, and typed httpmock helpers match your workflow. Oxide describes Dropshot-generated APIs as Progenitor’s primary target.

Start with openapi-to-rust when you consume modern third-party specifications, need OpenAPI 3.1 schema forms, generate SSE clients or selected Axum operations, or want checked-in source generation outside the downstream Cargo build.

Neither recommendation replaces a compile test. Run both against the unions, parameters, authentication, and response bodies that make your document difficult.

Different centers of gravity

This table compares documented project scope as reviewed on July 28, 2026. “Not a documented project goal” is intentionally different from “unsupported.”

On narrower screens, scroll horizontally to compare both generators.

Rust generator comparison: openapi-to-rust 0.11.0 and Progenitor 0.14.0
Dimensionopenapi-to-rustProgenitor
Primary scopeRust models, Reqwest clients, SSE clients, Axum servers, and operation registriesOpinionated async Rust client generation
Primary API environmentLarge third-party and service-provider specificationsDropshot-generated APIs, while accepting other compatible documents
Documented OpenAPI input3.0 and 3.1; experimental 3.2 parsing3.0.x
Client interfaceFlat typed methods; opt-in builders above a configurable thresholdPositional or builder style
Generation workflowCLI, Rust library, or browser; normal CLI flow writes ordinary Rust before compilationProcedural macro, build.rs, or a generated static crate
Generated serverSelected Axum operations with shared models, routing, typed responses, and request validationNot a documented project goal; Progenitor describes itself as a client generator
Streaming focusSSE parsing, typed events, reconnection, and Axum SSE responsesStreams for paginated interfaces; WebSocket channel support is also documented
Generated support toolsOperation registry and browser-downloadable crate; no equivalent generated Clap or httpmock surfaceGenerated Clap CLI and strongly typed httpmock helpers through the generator API
Schema adaptationOverlay files, type strategies, aliases, extensible-enum settings, and per-format mappingType patches, replacements, conversions, additional derives, and x-rust-type crate policies
Project posturePre-1.0, Rust-only generator tested against a maintained real-world corpusEstablished pre-1.0 generator maintained by Oxide and used for its API ecosystem

What the build benchmark actually shows

We measured each project’s normal client workflow against the same synthetic OpenAPI 3.0.3 document with 120 operations and 120 models. Results below are median wall times on an Apple M4 Max using Rust and Cargo 1.97.0. Dependencies were downloaded before timing.

Observed median wall time; lower is better
ScenarioAhead-of-time sourceProgenitor macroObserved result
Clean cargo check5.91 s8.04 s26.5% lower in this run
No-op cargo check0.08 s0.08 sNo meaningful difference
Rust source touched0.445 s0.58 s23.3% lower in this run
Schema changed + checked0.54 s0.64 s15.6% lower in this run

The clean result includes each client’s current dependency graph—Reqwest 0.12 for openapi-to-rust and 0.13 for Progenitor—so it does not isolate procedural-macro overhead. The fixture is synthetic, and the generated clients are not feature-equivalent. Treat these numbers as evidence that ahead-of-time generation can reduce build overhead in this setup, not as a universal speed guarantee.

Review the reproducible harness, raw samples, and full methodology before quoting the result.

Where each project is particularly compelling

Progenitor’s strengths

  • Established alignment with Dropshot and Oxide’s API conventions.
  • Macro, build-script, and static-crate integration choices.
  • First-class pagination streams and request/response hooks.
  • Generated CLI and typed mocking helpers.
  • Fine-grained generated-type replacement and patching.

openapi-to-rust’s strengths

  • OpenAPI 3.1 forms found in modern third-party documents.
  • One shared model surface for selected clients and Axum servers.
  • SSE-specific clients, reconnection, and server responses.
  • Operation selection, model pruning, and overlay-based repair.
  • Inspectable, checkable source generated before downstream builds.

Which should you choose?

Choose based on your specification and delivery model. Progenitor is a strong default for a Dropshot-centered client ecosystem and for teams that value compile-integrated generation or its testing tools. openapi-to-rust is aimed at teams consuming varied external contracts or generating both sides of a Rust boundary.

Pin both versions, generate against the same document, and compile the result. Then inspect the five hardest operations rather than counting table rows. A minimized fixture is stronger evidence than either project’s marketing copy.

Primary sources

Last source review: July 28, 2026. If a claim is stale or incomplete, please report it with a primary source or minimized fixture.