Private beta
Alpha lifts your SDK into an IR, generates five idiomatic SDKs, then diffs them against the source at the wire.
Request access
The Alpha console on 127.0.0.1:4400. Five targets, one IR, nothing leaving your machine.
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 *string
if params != nil && params.After != nil {
cursor = params.After
}
all := []Widget{}
for {
if cursor != nil {
q.Set("after", *cursor)
}
var env listWidgetsEnvelope
out/ui-jobs/mte0nfsfre8wq/go/client.go
/**
* List all widgets, following cursor pagination transparently.
*/
async listWidgets(params?: ListWidgetsParams, request?: RequestOptions): Promise<Widget[]> {
const query = new URLSearchParams();
if (params?.limit !== undefined) query.set("limit", String(params.limit));
const headers: Record<string, string> = {};
let cursor = params?.after;
const all: Widget[] = [];
for (;;) {
if (cursor !== undefined) query.set("after", String(cursor));
const env = (await this.#do("GET", "/v1/widgets", query, headers, undefined, undefined, request)) as { "data"?: Widget[]; "next_cursor"?: string | null };
all.push(...(env["data"] ?? []));
const next = env["next_cursor"];
if (next === undefined || next === null || next === "") return all;
cursor = next;
}
}
out/ui-jobs/mte0nfsfre8wq/typescript/client.ts
def list_widgets(self, *, limit: typing.Optional[int] = None, after: typing.Optional[str] = None, request_timeout: typing.Optional[float] = None) -> typing.List[Widget]:
"""List all widgets, following cursor pagination transparently."""
_p_path = "/v1/widgets"
_p_query: typing.List[typing.Tuple[str, str]] = []
if limit is not None:
_p_query.append(("limit", str(limit)))
_p_headers: typing.Dict[str, str] = {}
_cursor = after
_all_items: typing.List[Widget] = []
while True:
_p_page_query = list(_p_query)
if _cursor is not None:
_p_page_query.append(("after", str(_cursor)))
_p_env = self._do("GET", _p_path, _p_page_query, _p_headers, None) or {}
_all_items.extend(_p_env.get("data") or [])
_next = _p_env.get("next_cursor")
out/ui-jobs/mte0nfsfre8wq/python/petstore/client.py
public List<Widget> listWidgets(ListWidgetsParams params, Duration requestTimeout) {
String __path = "/v1/widgets";
List<String[]> __q = new ArrayList<>();
if (params.limit() != null) {
__q.add(new String[] { "limit", String.valueOf(params.limit()) });
}
Map<String, String> __h = new LinkedHashMap<>();
byte[] __payload = null;
String __cursor = params == null ? null : params.after();
List<Widget> __all = new ArrayList<>();
while (true) {
List<String[]> __pageQ = new ArrayList<>(__q);
if (__cursor != null) __pageQ.add(new String[] { "after", __cursor });
Reply __r = __send("GET", __path, __pageQ, __h, __payload, false, requestTimeout);
__check(__r);
Object __doc = Json.parse(__r.body);
List<Widget> __items = Codec.list(Json.field(__doc, "data"), (Object __e) -> Widget.fromJson(__e));
if (__items != null) __all.addAll(__items);
out/ui-jobs/mte0nfsfre8wq/java/src/main/java/petstore/PetstoreClient.java
/// <summary>
/// List all widgets, following cursor pagination transparently.
/// </summary>
public async Task<IReadOnlyList<Widget>?> ListWidgetsAsync(ListWidgetsParams? @params = null, CancellationToken cancellationToken = default)
{
@params ??= new ListWidgetsParams();
var __h = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
var __q = new List<KeyValuePair<string, string>>();
if (@params.Limit != null) __q.Add(new KeyValuePair<string, string>("limit", AlphaRt.Wire.Scalar(@params.Limit)));
if (!string.IsNullOrEmpty(_token)) __h["Authorization"] = "Bearer " + _token;
string __path = "/v1/widgets";
string __url = _baseUrl + __path + AlphaRt.Wire.QueryString(__q);
out/ui-jobs/mte0nfsfre8wq/csharp/src/PetstoreClient.cs
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.
One IR, five lowerings. Every generated client is diffed against the source, and against every other target.
petstore, 15 pairs, 3 scenarios per pair. The source SDK against each of five targets, plus every generated pair.
On AWS Lambda, 5 of 5 scenarios go wire-identical against real boto3. AWS's own SDK is the oracle.
An MCP server from the same semantic model as your SDKs, held to the same bar as the five languages above. It will ship when its conformance driver does, wire-diffed like the rest.
Idiomatic on the surface, identical on the wire. That holds today for the five shipped targets: parity is exact equality on canonical requests, so it is transitive, and every target proven against your source SDK is proven against every other.
We pointed our extractor at seven real OSS Python SDKs. Reading their source lifted zero operations from all seven.
So we stopped reading the code and started watching it run. Same seven SDKs: 246 operations.
Four of the seven now match the real SDK on every committed scenario. Todoist, posthog and resend do not, and the report itemizes every gap that remains in each.
The seven-zeros columns of docs/OSS-CONVERSIONS.md. We published this before we published the fix.
context.Context.Reads your source, or watches it run. Lowers to five languages. Diffs the result at the wire.
Records real traffic, classifies the change, versions from the diff that just ran.
Zero runtime dependencies in all five languages. Read the go.mod yourself.
The fidelity report names what did not lift, with a file and a line. This one is from the petstore example.
module example.com/slacksdkweb go 1.23
Generated alongside the client, in Go, TypeScript and Python.
Docstrings land as godoc, TSDoc and javadoc. Every package ships a README.
Stop budgeting a year per language. Early access gets a white-glove conversion of your first SDK.