The hot path to Claude is one HTTPS POST, one JSON body, and a stream of six Server-Sent Event types. Every SDK wraps that in thousands of lines, and the wrapping costs you: in cold start, in memory, and in the milliseconds between the model finishing a thought and your code acting on it. Every client on this page writes the path by hand in a single file, with no SDK, and the same harness measures what each one adds.

The numbers come from a mock that replays a recorded exchange with its original timing, so they are about the client and not the network, and you can reproduce them without an API key.

Leaderboard

The API took about 1.5 seconds to answer the recorded exchange. These are the milliseconds each client added, fastest first. Cold start is process spawn to the first request arriving at the mock. Turnaround is the first reply finishing to the second request arriving: parse the stream, run the tool, send the next request. Client total adds the tail after the last reply, so it is every millisecond the mock was not streaming. Medians over the runs, from timestamps the mock recorded, with nothing subtracted. Lines are non-blank, non-comment lines of the one source file.

#ClientOn the pathCold startTurnaroundPeak RSSShipArtefactRuntimeLinesToolchainPost
1rust3.16 ms1.14 ms0.73 ms3 MB3.3 MB1.4 MB2.0 MB184rustc 1.99.1 (58cf8f9c3 2026-10-13)queued
2zig3.67 ms1.39 ms0.99 ms2 MB488.3 KB488.3 KB0179zig 0.17.0queued
3go4.79 ms1.72 ms1.16 ms6 MB5.8 MB5.8 MB0156go version go1.27.2 linux/arm64queued
4csharp7.09 ms3.01 ms1.4 ms7 MB7.8 MB5.4 MB2.4 MB102dotnet SDK 10.0.402queued
5bash35.3 ms6.98 ms19.09 ms11 MB23.7 MB3.7 KB23.7 MB75GNU bash, version 5.2.37(1)-release (aarch64-unknown-linux-gnu)queued

Apple M4 Max under Docker, linux/arm64. Download the data (CSV). A row marked queued has a post written and dated.

The spec

Every client must do all of this, and the bench checks each point rather than trusting the code.

  1. Read the key from ANTHROPIC_API_KEY and the base URL from ANTHROPIC_BASE_URL. Nothing else from the environment.
  2. Read the prompt from stdin.
  3. POST /v1/messages with x-api-key, anthropic-version: 2023-06-01 and content-type: application/json, and a body with model, max_tokens, stream: true, messages and tools.
  4. Print each text_delta as it arrives. The bench checks the first visible byte reached stdout before the stream finished, so buffering the reply, or flushing only on newlines, fails.
  5. Declare one tool, local_time. When the stream ends with stop_reason: "tool_use", assemble the input_json_delta fragments, run the tool, send the tool_result back with the assistant turn echoed, and stream that reply too.
  6. On a non-2xx response, print the body's error.message to stderr and exit non-zero.
  7. One source file. HTTP and TLS from the platform where it has them. Where it does not, one named library, which counts towards size.

The posts

The first post publishes on Thursday 22 October 2026. Until then the repo is the post.