This document defines the client delivery strategy for sikuli-go gRPC APIs across Python, Node.js, and Lua.
proto/sikuli/v1/sikuli.proto.| Client | Recommended stack | Codegen approach | Maturity |
|---|---|---|---|
| Python | grpcio, grpcio-tools, protobuf |
generate stubs directly from .proto |
High |
| Node.js | @grpc/grpc-js, @grpc/proto-loader, generated JS/TS stubs |
generate JS/TS stubs from .proto |
High |
| Lua | grpcurl + generated descriptor (protoset) |
direct gRPC method wrapper via CLI transport | Medium |
packages/client-python/sikuligo/client.pypackages/client-python/examples/scripts/clients/generate-python-stubs.shpackages/client-node/src/client.tspackages/client-node/examples/scripts/clients/generate-node-stubs.shpackages/client-lua/sikuli_go_client.luapackages/client-lua/examples/scripts/clients/generate-lua-descriptor.shRecommended for first external integration.
grpcio, grpcio-tools, protobuf.Typical wrapper concerns:
Recommended for service-to-service integration and web tooling.
@grpc/grpc-js transport.Typical wrapper concerns:
Node package runtime binary selection is owned by the SDK launcher/runtime layer.
process.platform + process.arch.@sikuligo/bin-* package.Repository references:
packages/client-node/src/binary.tspackages/client-node/src/launcher.tspackages/client-node/packages/bin-*/package.jsonLua has more runtime variance; this implementation uses direct gRPC method invocation via grpcurl.
protoset) from proto/sikuli/v1/sikuli.proto.sikuli.v1.SikuliService/<Method> from Lua through grpcurl.v1 RPC names used by Python/Node.Status: ✅ Implemented
proto/sikuli/v1/sikuli.proto.scripts/clients/.Status: ✅ Implemented (baseline wrapper and examples)
packages/client-python/generated/.packages/client-python/sikuligo/ for deadlines, metadata/auth, and error mapping.packages/client-python/examples/ (find.py, ocr.py, input.py, app.py).cmd/sikuli-go (next step).Status: ✅ Implemented (baseline wrapper and examples)
packages/client-node/generated/.packages/client-node/src/.packages/client-node/examples/ (find.mjs, ocr.mjs, input.mjs, app.mjs).cmd/sikuli-go (next step).Status: ✅ Implemented (grpcurl method path)
grpcurl transport with generated descriptor set for direct gRPC method calls.packages/client-lua/ with the same high-level methods.packages/client-lua/examples/.Status: 🟡 In progress
SIKULI_GRPC_ADDR, auth values when enabled)../scripts/clients/set-version.sh <X.Y.Z>./scripts/clients/set-version-from-build.shpackages/client-python/pyproject.tomlpackages/client-node/package.jsonpackages/client-node/packages/bin-*/package.json.github/workflows/client-release.ymlscripts/clients/release-python-client.sh, scripts/clients/release-node-client.sh, scripts/clients/release-node-binaries.sh.github/workflows/client-release.ymlStatus: 🟡 Planned
For each client, ship:
client-release.yml computes client versions from CI build metadata before publishing.
BUILD_NUMBER: defaults to GitHub run_number.VERSION_MAJOR: optional override for major (defaults to current major).VERSION_MINOR: optional override for minor (defaults to current minor).PATCH_MODE: build or fixed-minus-build.PATCH_FIXED: required only when PATCH_MODE=fixed-minus-build.Examples:
PATCH_MODE=build with build 412 and VERSION_MAJOR=0, VERSION_MINOR=2 -> 0.2.412PATCH_MODE=fixed-minus-build, PATCH_FIXED=10000, build 412, VERSION_MAJOR=1, VERSION_MINOR=0 -> 1.0.9588