SDK generator comparisons

Speakeasy and Voxgig, compared

A commercial generator with a Terraform provider target, an MCP server target, and, since September 2026, an open-source generator whose output is AGPL unless you hold a commercial license.

Published by Voxgig, which makes one of the two tools compared here. Facts checked against the first-party sources linked below. Corrections go to info@voxgig.com. Every page in this section follows the same scope and method.

Status

On 17 September 2026 Speakeasy and Google published the Speakeasy generator as open source under AGPL-3.0, at github.com/speakeasy-api/openapi-generation. Google wrote that the provider behind its Gemini SDKs was acquired and abruptly announced its shutdown in May 2026, and that the open-source release now generates those SDKs. Speakeasy's own site leads with an AI control plane for enterprises; SDK generation continues as a product with a free account tier and quoted enterprise pricing.

What Speakeasy is#

Speakeasy is a commercial SDK generation company. You run a single CLI binary locally or in CI, authenticated against a workspace, and it produces SDKs into repositories you own. Since 17 September 2026 the generator behind that CLI is open source under AGPL-3.0. Speakeasy describes the repository as the development home for the generator and its templates, and points end users back to the CLI for everyday generation.

The SDK targets are C#, Go, Java, PHP, Python, Ruby, TypeScript and Unity. Beside them the generator produces Terraform providers, CLI applications, Postman collections and MCP servers in TypeScript, plus documentation, code samples and test suites.

Its design position is that OpenAPI is the source of truth and there should be no second definition format. Where the spec is not shaped the way you want the SDK shaped, you write an OpenAPI Overlay. An Overlay is an OpenAPI Initiative specification for a document of targeted edits applied over another document. Generation settings live in a gen.yaml, the pipeline in a workflow.yaml, and the usual deployment is a GitHub Action that regenerates and opens a pull request when the spec changes.

The license of the generated code is an election you make before generation runs. Under the free election the output is AGPL-3.0-only, and the generator writes a LICENSE and a NOTICE covering Speakeasy-authored material into it. With a commercial license token the SDK is yours to license on your own terms, and Speakeasy's documentation says SDKs generated through its platform are MIT by default. A free account generates one SDK of up to 50 API methods, a new account gets a fourteen-day trial of the business tier, and the pricing page lists one enterprise plan, priced on request.

What Speakeasy does that Voxgig does not#

Capabilities Speakeasy has that Voxgig does not, in enough detail to evaluate them.

Terraform provider generation

This is the headline, and it deserves to be. If your API provisions anything, your larger customers want a Terraform provider. Hand-writing one is a specialized job most API teams have nobody for: resource and data-source schemas, plan and apply semantics, import, state upgrades, drift. Speakeasy generates one from the same description as the SDK. Voxgig does not generate a provider at all. If you need one, that alone is a complete reason to choose Speakeasy.

OpenAPI Overlays instead of a private config format

Most tools solve the my spec does not describe the library I want problem with a proprietary config file. Speakeasy uses Overlay, which is a published OpenAPI Initiative specification. The practical difference is that your customizations are a standard document other tools can read, and they stay useful if you leave. It is the better-behaved answer to that problem, and it is useful to understand even if you never buy the product.

An open-source generator whose output license you elect

The AGPL release changes what Speakeasy is. You can read the generator, fork it and run it from source with no account. If you change it and offer it as a service, the AGPL obliges you to publish the changes. The part to read twice is the output. Under the free election the SDK it generates is AGPL-3.0-only, with a LICENSE and NOTICE written in for Speakeasy's material. Only a commercial license token makes the SDK yours to license as you choose. For an API provider handing a library to customers, that election is the price of the product, and it is a clearer price than a seat count. Voxgig's generator is MIT and its output carries whatever license your repository does, with no election and no token in the pipeline.

Zod validation, on by default, in the TypeScript SDKs

Their TypeScript output validates responses at runtime with Zod rather than casting the JSON and hoping. When a server returns a field the spec did not promise, or omits one it did, you get an error at the boundary instead of a missing value three frames away. Voxgig's validate feature checks requests, and optionally responses, against the model's own field types, but it is opt-in and emits no schema. Speakeasy's validation is on by default, typed with Zod, and costs a runtime dependency, which is the trade they have chosen to make.

One standalone binary

The CLI ships as a single binary rather than a Node or JVM dependency chain. That makes it usable in locked-down and air-gapped build environments, where most Node-based tooling, Voxgig included, needs work first. Running the open-source generator from source is a different matter: it needs Go, Node, npm, Docker and each target's own toolchain, which is why Speakeasy points end users at the CLI.

The public OpenAPI writing

Their documentation on OpenAPI itself, linting rules, spec hygiene, the parts of the specification that generators actually choke on, is a genuine public good, widely cited, and useful whether or not you ever pay them. It is not a product feature, but it is a common route by which teams find the tool.

Side by side#

No partial ticks and no asterisks. If a tool has a feature, the table says it has it. Where a row would need a paragraph to be true, it is a paragraph somewhere else on this page instead of a row here.

SpeakeasyVoxgig
LicenseGenerator AGPL-3.0. Generated SDKs AGPL-3.0-only under the free election, yours under a commercial licenseGenerator MIT. Generated SDKs are yours
CostFree under AGPL. A free account for one SDK of up to 50 methods, then a quoted enterprise planFree
Account neededNo for AGPL output from source. Yes for the CLI and for a commercial licenseNo
Language targets8, including Unity23 language targets, 20 bundled plus Dart, Haskell and Lean from the langpack
Terraform providerYesNo
MCP serverYes, in TypeScriptYes
CLI and REPL over your APIA CLI. No REPLBoth
CustomizationOpenAPI Overlays, gen.yaml, custom code regionsModel, templates, components, features, targets, packages, all in your repo
SupportCommercial, with an SLA on paid plansCommunity, or a paid API Experience engagement

One API, two SDKs#

Novu publishes an SDK made with Speakeasy from version 3.19.0 of its definition. Voxgig built one from version 3.19.2, as Novu served it on 28 September 2026, and both were run against a mock of 3.19.2 on the same four steps: list, load, create, and remove. Voxgig's features are in the build and stay off until a client switches them on; the rows describe them switched on. Last measured 29 September 2026.

Speakeasy

@novu/api 3.19.1

The TypeScript SDK Novu publishes on npm, generated with Speakeasy from version 3.19.0 of the same definition.

Voxgig

voxgig-sdk/novu-sdk

Built on 29 September 2026 from version 3.19.2 of the same definition: eight targets from one run. A repository to build from, not a published package.

The definition: Novu's SDK definition, api.novu.co/openapi.sdk.yaml at version 3.19.2: OpenAPI 3.0.0, 102 paths, 149 operations, MIT. Its source.

What each SDK does

SpeakeasyVoxgig
Operations callable149 methods, generated from version 3.19.0148 of 149. The workflow PATCH has no method
Mock scenario2 of 4 steps right. Load and create failed Zod validation on the mock's placeholder values, which is a limit of the mock4 of 4 right
Response validationZod, on every responseNot in this build. The opt-in validate feature checks payloads against the model's field types
RetriesBackoff from 1 to 30 seconds on 408, 409, 429 and 5xx, for up to an hourOn 408, 425, 429, 500, 502, 503 and 504, honoring Retry-After
TimeoutsClient-wide and per call, with none by default30 seconds per attempt by default
PaginationCursor arguments passed by hand. A page iterator is defined but no method uses itPage and cursor state carried between calls in ctrl.paging, with no iterator
Idempotency keysGenerated for every request by a custom hook, and kept across its retriesGenerated for every mutating call, and kept across its retries
Rate limits429 retried, honoring Retry-AfterA client-side token bucket, and Retry-After honored on 429
LoggingA debug logger that logs method, URL, headers and bodyRequest and response logging, with auth headers redacted
Offline test modeNoneA mock transport seeded with your data, which the generated tests run on
MetricsNonePer-operation counts and timings, with no OpenTelemetry
CancellationAn AbortSignal per call, combined with the timeoutA signal stops stream() between items. Only the timeout aborts a request in flight
HooksBefore-request, error and response hooks on the HTTP clientCustom features that hook every stage of a call
ErrorsClasses chosen per operation by status and schema, all extending NovuErrorOne error class per SDK, carrying the HTTP status and a notFound flag

What the code is

SpeakeasyVoxgig
Package@novu/api on npmNot published. You build it from the repository
TypeScript package size9.26 MB in 3,908 files3.63 MB in 480 files
Runtime dependencies1: zodNone
Languages from this buildTypeScriptTypeScript, Python, PHP, Go, Ruby and Lua, plus a Go CLI and a Go MCP server
ShapeNamespaces by resource, such as novu.workflows and novu.subscribers, with a function per operation beside them59 entities. Subscriber lists, loads, creates, and removes subscribers, but several entities are still named after response schemas, such as ListTopicSubscriptionsResponseDto for a topic's subscriptions
TypesA type and a Zod schema per component, for requests and responsesAn interface per entity, from the response schema. Create takes the response type, so a TypeScript create needs a cast
TestsNot run here: the comparison used the published package548 generated TypeScript tests pass, as do the generated Go, Python, Ruby, Lua, and PHP suites

The same calls in each, in TypeScript. Both samples type-check under strict mode against the SDK they name.

@novu/api 3.19.1
import { Novu } from '@novu/api'

const novu = new Novu({ secretKey: process.env.NOVU_SECRET_KEY })

const { result: page } = await novu.workflows.list({})
const { result: workflow } = await novu.workflows.get('onboarding')
const { result: created } = await novu.workflows.create({
  name: 'Onboarding',
  workflowId: 'onboarding',
  steps: [],
})
await novu.workflows.delete('onboarding')
voxgig-sdk/novu-sdk
import { NovuSDK } from '@voxgig-sdk/novu-sdk'

const client = new NovuSDK({ apikey: process.env.NOVU_APIKEY })

const workflows = await client.Workflow().list()
const workflow = await client.Workflow().load({ id: 'onboarding' })
// WorkflowCreateData is the response schema, so without the cast TypeScript
// asks for id, createdAt and the other fields the server assigns.
const created = await client.Workflow().create({
  name: 'Onboarding',
  workflowId: 'onboarding',
  steps: [],
} as any)
await client.Workflow().remove({ id: 'onboarding' })

What building and running both found

  • Speakeasy's load and create failed on the mock because its Zod validation rejected placeholder values, such as the word string in a date-time field. Against the live API that validation is a strength, and the failure belongs to the mock.
  • Voxgig has no method for PATCH /v2/workflows/{workflowId}. apidef models a PATCH beside a PUT as a sixth operation, and sdkgen generates five (voxgig/sdkgen#211).
  • Voxgig's create types are the response schemas. Creating a workflow in TypeScript takes a cast, or an id and timestamps the server would assign (voxgig/sdkgen#215).
  • Speakeasy keeps a resource together: novu.subscribers.search, create, retrieve and delete. Voxgig's Subscriber entity does the same for subscribers, but some entities are still named after response schemas, such as ListTopicSubscriptionsResponseDto (voxgig/apidef#97).
  • Novu declares an idempotency-key header on its writes. sdkgen sent it as a query parameter until 4.32.0, which sends every header parameter as a header, so the Voxgig SDK, built on 4.32.1, sends it where Novu expects it.

The full scorecard, with the evidence for every row

Which one to choose#

Choose Speakeasy when

  • You need a Terraform provider. Nothing else on this page makes the decision as quickly.
  • You want a vendor: a support contract, a roadmap, and somebody to escalate to at two in the morning.
  • You want Zod-typed response validation in TypeScript, on by default rather than switched on per client.
  • You want your spec customizations in a standards-track format rather than a vendor's config file.
  • The AGPL election suits you, because the SDK stays inside your organization, or you will buy the commercial license and want to be able to read the generator you pay for.

Choose Voxgig when

  • You want the generated SDK under MIT or any license you choose, with no election at generation time and no license token in the pipeline.
  • You want many languages under one free license. A per-SDK commercial license suits a large team shipping two SDKs better than a small team shipping seven, because the cost scales with the count.
  • You want the Agent Skills and REPL surfaces as well as the SDK, the CLI and the MCP Server.
  • You need to generate with no account and no network as a normal condition. The AGPL path allows it; the CLI authenticates each run against a workspace.

Limits of this comparison#

  • The open-source release was eleven days old on the checked date, and Speakeasy's own site had not described it beyond the repository README. The README and Google's post are the sources, and Speakeasy may publish more.
  • The SDK pair is one API of 149 operations, compared in TypeScript against a mock of its definition. It is evidence about those two SDKs rather than a benchmark of either generator, because nothing larger has been run.
  • Speakeasy publishes its own comparison of this field, linked below. It predates the open-source release and, like this page, is published by a vendor in the field.
  • What AGPL-3.0-only output means for the users of an SDK is a question for your lawyer. The election is stated as the repository describes it.

Corrections go to info@voxgig.com or an issue on the generator repository. A correction changes the page and moves its checked date; corrections from Speakeasy's own team carry the most weight.

Speakeasy documentation#

First-party sources for the claims on this page. Where they disagree with it, they are the authority.

The other comparisons#

  • OpenAPI GeneratorThe community generator most APIs have shipped an SDK from at least once.
  • FernSDKs and a documentation site from one definition. Part of Postman since January 2026.
  • StainlessThe generator behind many of the best-known AI SDKs. Its hosted product is winding down.
  • Cloudflare ForgeCloudflare's open-source generation pipeline, published on 28 September 2026.
  • APIMaticThe longest-running commercial generator here, and the only one that converts between description formats.
  • liblabSDK generation shaped as a release pipeline. Part of Postman since November 2025.
  • KiotaMicrosoft's client generator, built so you do not need a separate SDK per API.
  • Hey APIThe TypeScript ecosystem's generator, with a Python generator in early development.

All comparisons, the ground rules, and the wider field

Read the generated code#

The generator is MIT and open, and the catalog holds 600+ generated SDKs readable without installing anything.

Voxgig SDK GeneratorTalk to Voxgig

Get the Voxgig dispatch

Short notes on building SDKs, CLIs, MCP Servers, and REPLs for API-first teams, plus the occasional Fireside episode pick.

By signing up you agree to our Terms of use.