Connect-RPC Has a Free API: gRPC That Works in Browsers Without a Proxy
gRPC is great for backend-to-backend. But in browsers? You need grpc-web, Envoy proxy, and prayers. Connect-RPC just works. What Is Connect-RPC? Connect-RPC (from the Buf team) is a set of librarie...

Source: DEV Community
gRPC is great for backend-to-backend. But in browsers? You need grpc-web, Envoy proxy, and prayers. Connect-RPC just works. What Is Connect-RPC? Connect-RPC (from the Buf team) is a set of libraries for building browser and gRPC-compatible APIs. Define your service once with Protobuf, get clients for browsers AND gRPC — no proxy needed. // user/v1/user.proto syntax = "proto3"; package user.v1; service UserService { rpc GetUser(GetUserRequest) returns (GetUserResponse) {} rpc ListUsers(ListUsersRequest) returns (ListUsersResponse) {} } message GetUserRequest { string id = 1; } message GetUserResponse { User user = 1; } message User { string id = 1; string name = 2; string email = 3; } Go Server func (s *UserServer) GetUser(ctx context.Context, req *connect.Request[userv1.GetUserRequest]) (*connect.Response[userv1.GetUserResponse], error) { user, err := s.db.FindUser(req.Msg.Id) if err != nil { return nil, connect.NewError(connect.CodeNotFound, err) } return connect.NewResponse(&user