Ecosystem Overview
beachcomber has client SDKs for seven languages plus a POSIX shell polyfill. Each SDK is a binding over the shared libbeachcomber C ABI rather than a hand-rolled wire-protocol client: Go uses purego (vendored), Python uses stdlib ctypes, Ruby uses stdlib fiddle, Lua uses LuaJIT ffi (with a subprocess fallback for PUC Lua), and Node.js uses koffi as an optional peer dependency (falling back to a comb subprocess when it isn't installed). All are published to their native package registries.
Install
| SDK | Registry | Install |
|---|---|---|
| Rust | crates.io | cargo add libbeachcomber |
| Python | PyPI | pip install libbeachcomber |
| Node.js | npm | npm install libbeachcomber |
| Go | Go module | go get github.com/NavistAu/beachcomber/sdks/go |
| Lua | LuaRocks | luarocks install libbeachcomber |
| Ruby | RubyGems | gem install libbeachcomber |
| C | GitHub Release | Source tarball, .deb, .rpm, or AUR |
| Shell / POSIX | — | See the Polyfill |
The Rust SDK ships as libbeachcomber on crates.io, matching the other language SDKs' libbeachcomber naming on their native registries.
When to use an SDK vs the CLI
Shelling out to comb g. is fine for one-off queries from shell scripts, prompts, and status bars. For anything that queries more than a handful of keys per second, or needs to stream updates, use a language SDK:
- Persistent connections — open a Unix socket once, reuse it for every query (avoids per-call socket setup).
- Connection context — set a working directory once with
set_context; subsequent path-scopedgetcalls don't need to repeat the path. - Typed results — scalar/object dispatch in idiomatic types for each language.
- Lower latency — skip
exec/forkoverhead; SDKgetis ~15 µs vs ~34 µs for the CLI.
Feature matrix
All SDKs cover the common read path as well as put and watch.
| SDK | get | refresh | context / session | status | put | watch |
|---|---|---|---|---|---|---|
| Rust | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| Python | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| Node.js | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| Go | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| Lua | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| Ruby | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| C | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
Need a language that isn't listed? The protocol is newline-delimited JSON over a Unix socket — any language that can open a socket can be a client in a few dozen lines.