[ANN] gRPCServer.jl - A Native gRPC Server Implementation for Julia

Hi everyone! :waving_hand:

I’m excited to share a new native Julia gRPC server library I’m working on: gRPCServer.jl.

:link: Repository: https://github.com/s-celles/gRPCServer.jl
(Currently unregistered — and still in development — feedback welcome!)

:brain: What is gRPCServer.jl?

gRPCServer.jl is a server‑side gRPC framework written in pure Julia. It makes it easy to serve gRPC APIs from Julia applications using Protocol Buffers for message serialization (via ProtoBuf.jl). This fills an important gap — while client‑side gRPC support exists in packages like gRPCClient.jl, the server story has been relatively underdeveloped. (Julia Packages)

Key features include:

  • :check_mark: All RPC Patterns — Unary, server streaming, client streaming, bidirectional streaming
  • :check_mark: Type‑safe dispatch leveraging Julia’s type system
  • :check_mark: High performance – type‑stable handlers with minimal allocations
  • :check_mark: TLS/mTLS support for secure communication (to be implemented)
  • :check_mark: Reflection & health checks
  • :check_mark: Interceptors for logging, auth, metrics, etc.
  • :check_mark: Julia‑idiomatic interfaces and extensive docstrings

:wrench: Quick Example

Here’s how to define and run a simple gRPC server:

using ProtoBuf, gRPCServer

include("generated/helloworld.jl")
using .helloworld

function say_hello(ctx::ServerContext, req::HelloRequest)::HelloReply
    HelloReply(message="Hello, $(req.name)!")
end

struct GreeterService end

function gRPCServer.service_descriptor(::GreeterService)
    ServiceDescriptor(
        "helloworld.Greeter",
        Dict(
            "SayHello" => MethodDescriptor("SayHello", MethodType.UNARY,
                                           "helloworld.HelloRequest",
                                           "helloworld.HelloReply",
                                           say_hello)
        ),
        nothing
    )
end

server = GRPCServer("127.0.0.1", 50051)
register!(server, GreeterService())
run(server)

You can then test it locally:

grpcurl -plaintext -d '{"name":"Julia"}' localhost:50051 helloworld.Greeter/SayHello

:package: Why This Package?

Many Julia tools and ecosystems lack a complete gRPC server solution. While there are client libraries (e.g., gRPCClient.jl for making requests), the server side has been largely missing or experimental until now. This package aims to provide:

  • A gRPC server for Julia
  • Secure and extensible infrastructure for RPC
  • A foundation for building distributed and service‑oriented Julia applications

:light_bulb: Requirements

  • Julia 1.10+
  • ProtoBuf.jl for protocol buffers support (Julia Packages)

:megaphone: Feedback, Collaboration & Registration

This package is currently unregistered, and I’d love to get early user feedback, feature requests, and collaborators! If you find this useful or want to help polish it for registration on the General registry — please comment below.

:link: Repository: https://github.com/s-celles/gRPCServer.jl

Thanks, and happy coding! :raising_hands:


5 Likes