juliaio/grpcclient.jl/grpcclient-jl-dev

Claude Code and agent skill by juliaio/grpcclient.jl

Trust tier 3
  • community
Source check pending

Checking that the SKILL.md file is still in the repository.

Work on the gRPCClient.jl package itself. Covers running the Go test server, running and extending the test suite, regenerating test stubs with protoc.sh, building the docs, benchmarking and stress testing with gRPCClientUtils, and navigating the libcurl transport in src/Curl.jl. Use when editing files in this repository (src/Curl.jl, src/gRPC.jl, src/Unary.jl, src/Streaming.jl, src/CallHandles.jl, src/ProtoBuf.jl, test/runtests.jl) or debugging the client's transport, deadline watchdog, or streaming pumps. For calling a gRPC service as a user of the package, use the grpcclient-jl skill instead.

Install

npx vskill@latest install juliaio/grpcclient.jl/grpcclient-jl-dev

SKILL.md

Developing gRPCClient.jl

Repository map

PathContents
src/gRPCClient.jlModule entry: exception types, GRPC_* status constants, includes, exports, __init__
src/Curl.jlThe libcurl transport: gRPCCURL, gRPCRequest, callbacks, socket watchers, concurrency semaphore, deadline watchdog, grpc_cancel
src/gRPC.jlPublic handle lifecycle, gRPCServiceClient, request framing, the generic grpc_async_await
src/Unary.jlUnary methods and gRPCAsyncChannelResponse
src/Streaming.jlStreaming methods and the request and response pump tasks
src/CallHandles.jlThe current API: gRPCChannel, the four call-handle types, and their put!/take!/fetch/wait/iterate/close/detach methods
src/ProtoBuf.jlThe ProtoBuf.jl codegen hook; emits both the service-module API and the legacy *_Client constructors, gated by grpc_register_service_codegen(; legacy, servicemodule)
test/proto/test.protoOne service with all four RPC variants
test/gen/Checked-in generated stubs used by the suite
test/go/The Go reference server every test and benchmark runs against
test/python/Generated Python stubs, regenerated alongside the Julia ones
utils/gRPCClientUtils.jlSeparate package for benchmarks, stress workloads, and memory profiling

Formatting

The repository is formatted with Runic.jl, and contributed code is expected to be run through it before a pull request goes up:

] app add Runic # once, Julia 1.12 or newer
bash
runic --inplace . # from the repository root

Use --check --diff in place of --inplace to verify without writing. Runic takes no configuration. CONTRIBUTING.md states this for human contributors.

Test server

bash
cd test/go
go build -o grpc_test_server
./grpc_test_server # listens on :8001

The server accepts the bearer token test-secret-token, mirrored by _TEST_BEARER_TOKEN in test/runtests.jl. Requests carrying an authorization header must present exactly that value; requests without one are unaffected.

Running tests

bash
# Server already running on localhost:8001
julia --project test/runtests.jl
# Let the suite start and stop the Go server itself, which is what CI does
JULIA_GRPCCLIENT_TEST_START_SERVER=go julia --project test/runtests.jl
# Point at a server elsewhere
GRPC_TEST_SERVER_HOST=myhost GRPC_TEST_SERVER_PORT=9000 julia --project test/runtests.jl

JULIA_GRPCCLIENT_TEST_START_SERVER accepts go or false; any other value is an error. With go, the suite runs ./go/grpc_test_server from the test directory, so build it first, and reads its output until the startup line appears, giving up after 10 seconds. Host and port default to localhost and 8001.

CI covers Julia 1.10, 1.12, and nightly across Linux, Windows, macOS 15 x64, and macOS aarch64, with a 5 minute timeout on the test job. The workflow only triggers on changes under src/, test/, Project.toml, or the workflow file, so documentation and utils changes skip the matrix.

Regenerating stubs

bash
cd test
bash protoc.sh

This regenerates the Python stubs in test/python/ with grpc_tools.protoc through uv, then regenerates test/gen/ by running protojl("proto/test.proto", ".", "gen") in a fresh Julia process. Changes to src/ProtoBuf.jl are only visible in the checked-in stubs after running it, and the Code Generation testset asserts on the generated text. Its Codegen: New API subset regenerates into a temp dir under each grpc_register_service_codegen combination and asserts on the # gRPCClient.jl BEGIN/END markers, the version guard, the baremodule TestService, the per-RPC method counts (3 for a unary-request RPC, 2 for a streaming-request one), the type-alias consts, the typeof(RPC) trait methods, and the generated docstrings' request/response type tables.

Docs

bash
julia --project=docs -e 'using Pkg; Pkg.develop(PackageSpec(path=pwd())); Pkg.instantiate()'
julia --project=docs docs/make.jl

docs/src/index.md uses @docs blocks that name method signatures explicitly, so renaming or re-signing a public method breaks the docs build. Documenter is strict about docstrings it cannot resolve, which is the usual cause of a red docs job after an API change.

Test suite conventions

The suite is one top-level @testset "gRPCClient.jl" with nested sets per area. Points worth matching when adding tests:

  • Concurrency is covered twice over, under @async and under Threads.@spawn, because the two exercise different sticky paths
  • Failure paths are exercised directly, including deadline expiry, cancellation of a never-ready connection, oversized messages, shutdown during concurrent requests, and exceptions raised inside the streaming pumps
  • Internal names used by tests are imported explicitly at the top of test/runtests.jl, for example grpc_timeout_header_val and the GRPC_* constants, since the constants are not exported
  • Tests that need a connection which never becomes ready open a listening socket that accepts TCP without completing the HTTP/2 handshake, which is the scenario the deadline watchdog exists for

Reference files

FileRead it when
references/internals.mdTouching the transport, the request lifecycle, locking, the semaphore, the watchdog, or the streaming pumps
references/benchmarking.mdMeasuring throughput, allocations, or latency, or running stress and profiling workloads

Security

  • Security scanPassed, 90 of 100Pattern checks on the skill's files.
  • Model reviewPassed

Quality evaluation

  • Task evaluationNot runNo evaluation yet. Run one in Skill Studio.

Source

Popularity

Repository stars
63
Repository forks
12
7-day trend score
21

Stars and forks are for the whole GitHub repository, not this skill alone. Not refreshed yet.

Works with

Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.

  • Claude Code
  • Cursor
  • GitHub Copilot
  • Windsurf
  • Codex
  • Gemini CLI
  • Cline
  • Amp
  • Roo Code
  • Goose
  • Continue
  • Kilo Code
  • Junie
  • Trae
  • OpenHands
  • Qwen Code
  • AI Agent
  • Tabnine Chat
  • Sourcegraph Cody
  • Amazon Q
  • Firebase Genkit
  • Sweep
  • Devin
  • Phind
  • Mentat
  • Claude Desktop
  • Aider
  • GPT Pilot
  • Plandex
  • bolt.new
  • v0
  • Replit Agent
  • Anse
  • TypingMind
  • BetterChatGPT
  • LibreChat
  • Warp AI
  • Pieces
  • Fig AI
Embed badge
vskill VERIFIED badge
[![vskill VERIFIED](https://verified-skill.com/api/v1/skills/juliaio/grpcclient.jl/grpcclient-jl-dev/badge)](https://verified-skill.com/skills/juliaio/grpcclient.jl/grpcclient-jl-dev)

Something wrong with this skill or its page? Tell us.