grpc-pharo

Description

Pure-Pharo unary gRPC client with HTTP/2 transport

Details

Source
GitHub
Dialect
pharo (25% confidence)
Created
July 29, 2026
Updated
July 29, 2026

README excerpt

# grpc-pharo

`grpc-pharo` is a pure-Pharo gRPC client library.

Current scope:

- client-side only
- unary RPC only
- protobuf payloads
- HTTP/2 transport
- request framing
- response parsing
- metadata headers
- trailers handling
- `grpc-status` / `grpc-message`
- deadline / timeout header support
- optional gzip request framing support

This project exists to provide a small, reusable gRPC transport for Pharo
without depending on native `libgrpc` bindings.

## Status

This is early but real software.

It is already good enough to back OpenTelemetry OTLP/gRPC trace export and
related unary gRPC integrations. It is not yet a full general-purpose gRPC
implementation.

Not supported yet:

- server support
- client / server / bidi streaming
- resolver / load balancer / service config machinery
- generated stubs

## Packages

- `GRPC-Core`: request, response, metadata, status, endpoint, transport, unary call
- `GRPC-HTTP2`: pure-Pharo HTTP/2 transport and HPACK support
- `GRPC-Tests`: focused unit tests

## Loading

```smalltalk
Metacello new
  baseline: 'GRPC';
  repository: 'github://Gabriel-Darbord/grpc-pharo:main/src';
  load.
```

To load tests too:

```smalltalk
Metacello new
  baseline: 'GRPC';
  repository: 'github://Gabriel-Darbord/grpc-pharo:main/src';
  load: 'all'.
```

## Example

```smalltalk
| endpoint request channel response |
endpoint := GRPCEndpoint fromString: 'http://127.0.0.1:4317'.
request := GRPCRequest
  service: 'opentelemetry.proto.collector.trace.v1.TraceService'
  method: 'Export'
  payload: #[ ].
channel := GRPCChannel
  endpoint: endpoint
  transport: GRPCHTTP2Transport new.
response := channel executeUnaryRequest: request.
response status isOk.
```
← Back to results