# waymaker-client Official client libraries for [waymaker](https://git.awesomike.com/dev/waymaker) — the distributed coordination service (locks, streams, KV, collections, sketches, cache, object store) over gRPC. Three clients, one wire contract, **versioned in lockstep with the waymaker server**: | Language | Path | Package | |------------|---------|---------| | Rust | `rust/` | `waymaker-client` (crate) | | Go | `go/` | `git.awesomike.com/pub/waymaker-client/go` (module) | | TypeScript | `ts/` | `@waymaker/client` (npm) | The `.proto` files in `proto/` are **vendored copies**; the waymaker server repo is the source of truth. `scripts/sync-protos.sh` refreshes them and keeps `VERSION` aligned with the server. ## Versioning Every release is tagged at the **same version as the waymaker server** it targets (see `VERSION`). A client tagged `v0.1.27` speaks the wire contract of waymaker `v0.1.27`. The gRPC wire format is backward-compatible across patch releases (enum integer values are stable), so a client one patch behind a server generally interoperates — but match versions for new surface. ## Layout ``` proto/ vendored .proto (source of truth: waymaker repo) rust/ Rust client crate (hand-written ergonomic wrappers + generated stubs) go/ Go client module ts/ TypeScript client (npm) scripts/ sync-protos.sh + codegen scripts (gen-go/gen-ts) VERSION lockstep version with the waymaker server ``` ## Regenerating ```bash # refresh protos from a local waymaker checkout, then regenerate all stubs WAYMAKER_REPO=../waymaker ./scripts/sync-protos.sh ./scripts/gen-go.sh ./scripts/gen-ts.sh # Rust regenerates from proto/ automatically via build.rs on `cargo build`. ``` ## Quickstart - **Rust** — see [`rust/README.md`](rust/README.md). Leader election with the fence-watch / auto-reacquire `Lock`. - **Go** — see [`go/README.md`](go/README.md). - **TypeScript** — see [`ts/README.md`](ts/README.md).