Private beta

Write it once.
Ship it six ways.

Alpha lifts your SDK into an IR, generates five idiomatic SDKs and an MCP server, then diffs all six against the source at the wire.

Request access
The Alpha console showing six generated target tabs for Go, TypeScript, Python, Java, C sharp and MCP server, each with a passing dot, the Go toolchain gates passed, alongside the generated Go client file tree and an import block containing only Go standard library packages.

The Alpha console on 127.0.0.1:4400. Six targets, one IR, nothing leaving your machine.

Lift, don't transpile

The IR carries auth, pagination, retries and errors, so each generator writes what a senior engineer would write.

func (c *Client) ListWidgets(ctx context.Context, params *ListWidgetsParams) ([]Widget, error) {
	path := "/v1/widgets"
	q := url.Values{}
	if params != nil && params.Limit != nil {
		q.Set("limit", strconv.FormatInt(*params.Limit, 10))
	}
	var cursor *paginationCursor
	if params != nil && params.After != nil {
		cursor = (*paginationCursor)(params.After)
	}
	all := []Widget{}
	pages := 0
	for {
		pages++

out/ui-jobs/muu8p8lwwcdxz/go/client.go

One operation, list_widgets, lowered five times from one sdk.ir.json in one build.
Zero LLM calls on this build. One code unit shipped as a loud stub.

Your generator got acquired

Fern and Stainless were both acquired in 2026. Alpha lifts the SDKs they generated, by watching them run.

webflow 105 operations, from Fern. lumaai 13 and arcadepy 19, from Stainless. Run of record, 2026-10-04.
Wire-identical against each SDK's own traffic: 10/10 scenarios for all three, on Go, TypeScript and Java.
node tests/corpus/run.mjs --only webflow

Five targets cannot drift apart

One IR, five lowerings. Every generated client is diffed against the source, and against every other target.

15
pairs compared, all wire-identical
The Alpha console wire conformance panel reading 15 of 15 pairs wire-identical: five pairs against the source SDK and ten between generated SDKs, each pair 3 of 3 scenarios wire-identical.

petstore, 15 pairs, 3 scenarios per pair. The source SDK against each of five targets, plus every generated pair. Adding the sixth surface takes the same run to 28.
On AWS Lambda, Go, TypeScript and Python each go 5 of 5 wire-identical against real boto3. AWS's own SDK is the oracle.

A wrong-shaped body is an error, not a null

Every client refuses a response that does not match the model, with one named error per language.

Go *json.UnmarshalTypeError · Java DecodeException · TypeScript and Python DecodeError · C# FormatException.
A missing or explicitly null required member is tolerated in all five, and decodes to the zero or absent value.

Shipped · wire-verified

The sixth surface is for agents

An MCP server from the same semantic model, shipped through the same bar: one tool per operation, wire-diffed like the rest, over both its transports.

Idiomatic on the surface, identical on the wire. That now holds for all six surfaces: parity is exact equality on canonical requests, so it is transitive: every surface proven against your source SDK is proven against every other.

petstore, eight runs. The source, five languages, the MCP server over stdio and HTTP: 28 pairs, all wire-identical, per committed scenario. The two transports are byte-identical to each other. Slack: 311 tools, 311 docs resources, every refusal receipted.

Rename, describe or hide any tool in config, and the choice survives every regeneration. The server never starts on ambient AWS credentials: you name the source.

We failed this test in public

0
operations lifted by reading the source

We pointed our extractor at seven real OSS Python SDKs. Reading their source lifted zero operations from all seven.

229
lifted by watching the SDK run, across all seven

Then we fixed it

So we stopped reading the code and started watching it run. Same seven SDKs: 229 operations.

All seven match the real SDK on a call with real arguments. Four match on every committed scenario; todoist, posthog and resend have gaps the report names. Run of record, 2026-10-04.

Seven open-source Python SDKs listed with their element-lift percentage and their operations-lifted count, which reads zero for every one of them.

The seven-zeros columns of docs/OSS-CONVERSIONS.md. We published this before we published the fix.

Your options today

Hand-write every SDK
APIMatic prices one at about $23k to build and $29k a year to maintain. Per language.
Spec-first generators
Needs an accurate spec. Alpha reads one if you have it, and never requires it.
Source-to-source transpilers
Python in Go syntax. Wrong errors, wrong concurrency, no context.Context.
Raw LLM translation
Impressive on one file. Unverifiable at SDK scale, different on every run.
PASS

Alpha: lift, lower, verify

Reads your source, or watches it run. Lowers to five languages and an MCP server. Diffs every surface at the wire.

alpha recordalpha regenalpha publish

Records real traffic, then diffs every regeneration against the committed IR.

Complete packages, not code dumps

Zero runtime dependencies in all five languages. Read the go.mod yourself.

The Alpha fidelity report showing one element the tool refused to lift, marked opaque, with the reason it was refused and the exact file and line it came from.

The fidelity report names what did not lift, with a file and a line. This one is from the petstore example.

out/slack-go/go.mod
module example.com/slacksdkweb

go 1.23

One test per operation

Generated alongside the client, in Go, TypeScript, Python and Java.

Docs that survived the trip

Docstrings land as godoc, TSDoc, Python docstrings and javadoc. Every package ships a README.

The hard parts come generated

What a hand-written SDK gets wrong in year two ships on day one.

Auth
Bearer, API keys, Basic, OAuth2 client credentials and AWS SigV4, sent natively. If a target cannot send a scheme, generation refuses.
Credentials
Sent only to the origin you called. A redirect that leaves it never carries them.
Streaming
Server-sent events arrive as they are sent, in Go, TypeScript and Python.
Network
Proxy, private CA, mTLS and per-call deadlines, with the same option names in Go, TypeScript, Python and Java.
AWS
SigV4 signatures match real botocore, 39 of 39. The query, ec2 and rest-xml protocols generate too.

C# sends all of these except SigV4. Java and C# refuse server-sent events rather than buffer them.

Your edits survive the next release

Already maintaining SDKs by hand? Alpha will not overwrite an edit it can see. It stops, or merges it forward.

$ alpha regen --config alpha.config.json --deterministic
refusing: handEdit
  1. Move the change into an overlay: copy the file to overlays/go/<path> and edit it there.
  3. Never silently overwritten: before this guard existed, this run would have rewritten these files and the only trace would have been the PR diff.

$ alpha regen --config alpha.config.json --deterministic --api-only --merge
track: patchCarried
  1. Nothing is required this run: the edit was re-applied on top of the new generation and your output has it.

Real output after a three-line edit to the generated client.go, trimmed.

Refused, not overwritten

A hand edit to a generated file stops the run and names the file, the lines and the remedy.

Or merged forward

With --merge, a three-way merge carries it onto the new generation. Conflicts go to the review packet, never into your tree.

Your v1 as the oracle

alpha verify --source-sdk drives your hand-written Go or Java v1 against the generated v2, over the same recorded traffic.

Reading an existing hand-written Go or Java SDK is a managed bring-up today, not self-serve.

They're asking for the next SDK.

Stop budgeting a year per language. Early access gets a white-glove conversion of your first SDK.

We use this only to contact you about early access. No newsletter, no sharing with third parties.

PASS ✓ You're on the list.
We onboard in small batches. You'll hear from us.
fidelity reportparity reportworking repo