Client libraries for Periapsis in five
languages. Extracted from the periapsis monorepo on 2026-09-02 with history intact;
git log here goes back to the first SDK commit in July.
| Tree | Package | What it is |
|---|---|---|
go/magicseam |
github.com/apsis-io/sdk/go/magicseam |
Magic-seam (ADR-0028) provider/consumer for native Go: MSK1 and the mTLS QUIC transport (ADR-0043). |
ts/periapsis |
@apsis-io/periapsis-sdk |
The periapsis:* WASI interfaces (identity, config, log, metrics, status, checkpoint, exec, magic-seam) for WASM components built with dwarf. |
ts/magicseam |
@apsis-io/magicseam |
Magic-seam for non-WASM TypeScript (Node/Bun). Not for use inside a component — that's ts/periapsis/magic.ts. |
rust/seamwire |
apsis-seamwire |
The wire vocabulary: opcodes, capability tokens, negotiation. std-only, deliberately. |
rust/perseid |
apsis-perseid |
The Perseid vocabulary for Rust guests: apiserver paths, the aperture expression language, resume conditions. std-only. |
c/magicseam |
— | Magic-seam over mTLS QUIC (ngtcp2 + OpenSSL). |
c/periapsis |
— | The periapsis:* host interfaces via wit-bindgen; carries its own wit/. |
zig/magicseam |
magicseam |
Magic-seam for Zig 0.16+. |
The Rust crates are published as apsis-seamwire and apsis-perseid because
crates.io has no scopes and a bare seamwire is a global claim. Both set
[lib] name, so use seamwire:: and use perseid:: are unchanged at every
call site. Depend on them by the package name and the spelling still works:
seamwire = { package = "apsis-seamwire", path = "../sdk/rust/seamwire" }Most of this repo tests standalone — go test ./..., cargo test, bun test,
make test, zig build test all pass against nothing but this tree.
Three checks are different, because they assert this SDK agrees with trail,
the reference implementation, and trail lives in periapsis. In the monorepo they
found it with ../../..; there is no correct number of .. any more. They read
PERIAPSIS_SRC instead:
PERIAPSIS_SRC=/path/to/periapsis go test ./... # go/magicseam wire-drift pair
PERIAPSIS_SRC=/path/to/periapsis c/magicseam/interop_test.shUnset, the Go check skips and says so; the C one exits non-zero and says so. Neither reports a pass it did not earn. Set-but-wrong is a hard failure in both — asking for the check and silently not getting it is the failure mode they exist to prevent.
The rust/seamwire half of the drift check moved with this repo, so it needs
nothing: it is read from rust/seamwire/src/lib.rs directly.
sync-consumer.sh <tree> <dest> snapshots one tree into a consumer's repo:
sync-consumer.sh ts/periapsis sdk/ts/periapsis
sync-consumer.sh c/magicseam sdk/c/magicseamIt is for the two ecosystems that cannot pin a version — npm/bun cannot resolve a
private git subdirectory, and C has no package manager at all. It refuses
go/ and rust/, which are reachable by version and whose copies would be a
second source of truth no lockfile pins.