grapesy: industrial strength [gRPC][grpc:website] library for Haskell
June 3, 2026 ยท View on GitHub
Haskell library providing gRPC client and server.
Interoperability matrix
The gRPC framework comes with a test suite that tests interoperability
between implementations as well compliance to the gRPC
specification. As the table below shows, grapesy passes all of these tests,
apart from the Open Request Cost Aggregation (ORCA) tests, which is not yet
supported by grapesy.
Legend and version information
Legend:
- โ passed
- โ failed
- โ not supported by the reference (or reference does not conform to the gRPC specification)
- ๐ซ not supported by
grapesy
We last tested against version v1.81.0 (released May 29, 2026).
grapesy server versus reference client
| Test | Python | C++ | Go | Java | grapesy |
|---|---|---|---|---|---|
cancel_after_begin | โ | โ | โ | โ | โ |
cancel_after_first_response | โ | โ | โ | โ | โ |
client_compressed_streaming | โ | โ | โ | โ | โ |
client_compressed_unary | โ | โ | โ | โ | โ |
client_streaming | โ | โ | โ | โ | โ |
custom_metadata | โ | โ | โ | โ | โ |
empty_stream | โ | โ | โ | โ | โ |
empty_unary | โ | โ | โ | โ | โ |
large_unary | โ | โ | โ | โ | โ |
orca_oob | ๐ซ | ๐ซ | ๐ซ | ๐ซ | ๐ซ |
orca_per_rpc | ๐ซ | ๐ซ | ๐ซ | ๐ซ | ๐ซ |
ping_pong | โ | โ | โ | โ | โ |
server_compressed_streaming | โ | โ | โ | โ | โ |
server_compressed_unary | โ | โ | โ | โ | โ |
server_streaming | โ | โ | โ | โ | โ |
special_status_message | โ | โ | โ | โ | โ |
status_code_and_message | โ | โ | โ | โ | โ |
timeout_on_sleeping_server | โ | โ | โ | โ | โ |
unimplemented_method | โ | โ | โ | โ | โ |
unimplemented_service | โ | โ | โ | โ | โ |
grapesy client versus reference server
| Test | Python | C++ | Go | Java | grapesy |
|---|---|---|---|---|---|
cancel_after_begin | โ | โ | โ | โ | โ |
cancel_after_first_response | โ | โ | โ | โ | โ |
client_compressed_streaming | โ | โ | โ | โ | โ |
client_compressed_unary | โ | โ | โ | โ | โ |
client_streaming | โ | โ | โ | โ | โ |
custom_metadata | โ | โ | โ | โ | โ |
empty_stream | โ | โ | โ | โ | โ |
empty_unary | โ | โ | โ | โ | โ |
large_unary | โ | โ | โ | โ | โ |
orca_oob | ๐ซ | ๐ซ | ๐ซ | ๐ซ | ๐ซ |
orca_per_rpc | ๐ซ | ๐ซ | ๐ซ | ๐ซ | ๐ซ |
ping_pong | โ | โ | โ | โ | โ |
server_compressed_streaming | โ | โ | โ | โ | โ |
server_compressed_unary | โ | โ | โ | โ | โ |
server_streaming | โ | โ | โ | โ | โ |
special_status_message | โ | โ | โ | โ | โ |
status_code_and_message | โ | โ | โ | โ | โ |
timeout_on_sleeping_server | โ | โ | โ | โ | โ |
unimplemented_method | โ | โ | โ | โ | โ |
unimplemented_service | โ | โ | โ | โ | โ |
Unsupported tests
There are additional tests that are not supported by grapesy, but since these
are not supported by any of the reference implementations that we tested, we
did not consider them any further. The full list is:
cacheable_unarychannel_soakcompute_engine_channel_credentialscompute_engine_credsconcurrent_large_unarygoogle_default_credentialsjwt_token_credslong_lived_channeloauth2_auth_tokenper_rpc_credsrpc_soak
Memory profiles
Screenshots of the "Area Chart" display of the
eventlog2html output for
selected RPC communication patterns.
Many connections
Client opens many connections and does a single non-streaming RPC.
Client profile:

Server profile:

Many calls
Client opens a single connection and does many RPCs.
Client profile:

Server profile:

Many messages
Client opens a single connection and does a single RPC that sends many messages.
Client profile:

Server profile:

Benchmarks
| Run type | Linux (RPCs/s) | OSX (RPCs/s) | ||
| Grapesy | Java | Grapesy | Java | |
| sequential protobuf | 4654.500 | 7169.283 | 2919.783 | 1907.350 |
| concurrent protobuf | 3326.283 | 10908.650 | 5032.950 | 4571.750 |
| sequential json | 2371.233 | 2427.900 | 909.417 | 1574.817 |
| concurrent json | 3019.733 | 6143.567 | 1151.017 | 3563.867 |