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

TestPythonC++GoJavagrapesy
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

TestPythonC++GoJavagrapesy
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:

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:

Client many connections
profile

Server profile:

Server many connections
profile

Many calls

Client opens a single connection and does many RPCs.

Client profile:

Client many connections
profile

Server profile:

Server many connections
profile

Many messages

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

Client profile:

Client many connections
profile

Server profile:

Server many connections
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