SDK

Three languages, one spec.

All SDKs wrap the same REST API and share a canonical run format. Python is the reference; Node and Go parity is enforced by a shared conformance suite.

Python
benchlist-py

pipx install benchlist. The reference — used by the CLI runner.

pip install benchlist
Node.js
@benchlist/sdk

Zero-dependency. Works in Bun, Deno, Node 20+.

npm i @benchlist/sdk
Go
benchlist-go

For attestor operators. Ships Aligned SDK shim.

go get github.com/benchlist/go

Python quickstart

from benchlist import Client

pm = Client()

# Fetch top 5 verified LongMemEval runs
runs = pm.runs(benchmark="longmemeval", verified=True, limit=5)
for r in runs:
    print(f"{r.service_id:20} {r.score:.2f}  {r.verification.aligned_batch_id}")

# Verify a specific proof against Aligned
valid = pm.verify("run-rem-lme-001")
assert valid.onchain_block > 0

# Subscribe to new verifications (SSE stream)
for event in pm.feed():
    print(event.run_id, event.score, event.batch_id)

Node quickstart

import { Client } from '@benchlist/sdk';

const pm = new Client();

// All memory services, sorted by top verified score
const services = await pm.services({ category: 'memory' });
for (const s of services) {
  const top = await pm.topRun({ serviceId: s.id, benchmarkId: 'longmemeval' });
  console.log(s.name, top?.score, top?.verification.alignedBatchId);
}

Go quickstart (attestor)

package main

import (
    "context"
    "github.com/benchlist/go/pm"
    "github.com/benchlist/go/pm/attestor"
)

func main() {
    a := attestor.New(pm.Config{
        PrivateKey: os.Getenv("ATTESTOR_KEY"),
        Network:    "ethereum",
    })
    run, _ := a.Run(context.Background(), "mbpp", "my-service", pm.RunOpts{N: 3})
    commitment := a.Commit(run)
    proof, _ := a.Prove(commitment, attestor.SystemSP1)
    batch, _ := a.Submit(proof)
    fmt.Println("batch:", batch.ID, "block:", batch.OnchainBlock)
}
Source

All three SDKs are MIT-licensed and tracked by @benchlist on GitHub.