Skip to content
skyl

Acknowledgements

What skyl is built on, and what it learned from.

skyl's core module has zero external dependencies, which makes the list of things it stands on shorter than most — but not empty, and worth naming.

The standard library#

The core module is net/http and encoding/json, and very little else. The SSE reader, the backoff implementation and the HTTP layer are hand-written because dependencies are a tax — but they are hand-written on top of a standard library good enough to make that a reasonable decision rather than a heroic one.

errors.Is, errors.As and multi-error Unwrap in particular do a great deal of work in skyl's error model.

Direct dependencies, in the modules that have them#

ModuleDepends onFor
provider/anthropicanthropic-sdk-goAnthropic's official Go SDK
gatewaygo-chi/chiRouting and middleware
otelOpenTelemetry GoTraces and metrics

Each lives in its own module precisely so that nobody who does not want it pays for it.

Conventions it follows#

Ideas it borrowed#

The functional options pattern, which is Go community folklore by now but worth naming.

The closed interface — an interface with an unexported marker method — which is how Part turns a class of runtime bug into a compile error.

Full jitter backoff, from the AWS Architecture Blog's analysis of why fixed exponential backoff synchronises a fleet rather than spreading it.

Table-driven tests with named cases, from the standard library's own suites.

Providers#

skyl exists because Anthropic, OpenAI, Google and a long tail of others built APIs worth talking to. It documents their differences bluntly — that is what a compatibility layer is for — but the differences exist because each of them made real design decisions, not arbitrary ones.

License#

skyl is Apache 2.0. Attributions are recorded in NOTICE, and each module carries its own LICENSE.

Edit this page on GitHub