juliaio/grpcclient.jl/grpcclient-jl-dev
Claude Code and agent skill by juliaio/grpcclient.jl
- community
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-devSKILL.md
Developing gRPCClient.jl
Repository map
| Path | Contents | |
|---|---|---|
src/gRPCClient.jl | Module entry: exception types, GRPC_* status constants, includes, exports, __init__ | |
src/Curl.jl | The libcurl transport: gRPCCURL, gRPCRequest, callbacks, socket watchers, concurrency semaphore, deadline watchdog, grpc_cancel | |
src/gRPC.jl | Public handle lifecycle, gRPCServiceClient, request framing, the generic grpc_async_await | |
src/Unary.jl | Unary methods and gRPCAsyncChannelResponse | |
src/Streaming.jl | Streaming methods and the request and response pump tasks | |
src/CallHandles.jl | The current API: gRPCChannel, the four call-handle types, and their put!/take!/fetch/wait/iterate/close/detach methods | |
src/ProtoBuf.jl | The 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.proto | One 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.jl | Separate 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:
Use --check --diff in place of --inplace to verify without writing. Runic takes no configuration. CONTRIBUTING.md states this for human contributors.
Test server
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
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
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
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
@asyncand underThreads.@spawn, because the two exercise differentstickypaths - 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 examplegrpc_timeout_header_valand theGRPC_*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
| File | Read it when | |
|---|---|---|
references/internals.md | Touching the transport, the request lifecycle, locking, the semaphore, the watchdog, or the streaming pumps | |
references/benchmarking.md | Measuring 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
- SKILL.md in the repositoryCheckingskills/grpcclient-jl-dev/SKILL.md
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
[](https://verified-skill.com/skills/juliaio/grpcclient.jl/grpcclient-jl-dev)