Skip to content

Holohub gRPC Plugins for Holoscan SDK#

Authors: Holoscan Team (NVIDIA)
Supported platforms: x86_64, aarch64
Language: C++, Python
Last modified: March 9, 2026
Latest version: 1.0
Minimum Holoscan SDK version: 2.6.0
Tested Holoscan SDK versions: 2.6.0
Contribution metric: Level 1 - Highly Reliable

Overview#

This directory contains the Holohub gRPC plugins for Holoscan SDK, including:

  • client: gRPC client and Holoscan Operators for sending, receiving, and streaming data to a gRPC server.
  • server: gRPC server and Holoscan Operators for handling requests from a gRPC client and transmitting data back to the client.
  • protos: Protocol buffers definitions of Holoscan SDK.
  • common: Tensor <-> protobuf converters and Holoscan Resources to handle incoming and outgoing data.

Please refer to the gRPC h.264 Endoscopy Tool Tracking application for additional details.

The Python GrpcService permits plaintext only on loopback addresses and defaults to 127.0.0.1. Remote listeners require PEM private_key, certificate_chain, and root_certificates (the trusted client CA) arguments to initialize, along with a literal host IP address. Configured TLS always requires a trusted client certificate. Python EntityClientService accepts a credentials argument from grpc.ssl_channel_credentials for authenticated TLS connections and rejects remote plaintext targets. See the Python demo's mutual TLS setup for configuration and testing instructions.

API Reference#

C++#

holoscan::ops::ApplicationFactory#

A factory class for creating and managing instances of HoloscanGrpcApplications.

Methods#
Method Description
ApplicationFactory(const ApplicationFactory &)=delete
ApplicationFactory & operator=(const ApplicationFactory &)=delete
void register_application(const std::string &service_name, create_application_instance_func func) Register an application creation function with a service name.
std::shared_ptr<HoloscanGrpcApplication> create_application_instance(const std::string &service_name, std::queue< std::shared_ptr< nvidia::gxf::Entity > > &incoming_request_queue, std::queue< std::shared_ptr< EntityResponse > > &outgoing_response_queue) Create an instance of HoloscanGrpcApplication.
void destroy_application_instance(std::shared_ptr< HoloscanGrpcApplication > application_instance) Destroy an instance of HoloscanGrpcApplication.
std::shared_ptr<ApplicationFactory> get_instance() Get the singleton instance of ApplicationFactory.

holoscan::ops::ApplicationFactory::ApplicationFactoryDeleter#

A custom deleter for ApplicationFactory.

Methods#
Method Description
void operator()(ApplicationFactory *factory)

holoscan::ops::AsynchronousConditionQueue#

Inherits from: holoscan::Resource

This class is a Holoscan Resource that is responsible for storing a queue of data entities.

Methods#
Method Description
AsynchronousConditionQueue(std::shared_ptr< AsynchronousCondition > request_available_condition)
void push(DataT entity)
DataT pop()
bool empty()

holoscan::ops::ConditionVariableQueue#

Inherits from: holoscan::Resource

Methods#
Method Description
ConditionVariableQueue()
ConditionVariableQueue(std::queue< DataT > &queue)
void push(DataT value)
DataT pop()
bool empty()

holoscan::ops::EntityClient#

A client class for handling gRPC communication with an entity server.

Methods#
Method Description
EntityClient(const std::string &server_address, const uint32_t rpc_timeout, std::shared_ptr< ConditionVariableQueue< std::shared_ptr< EntityRequest > > > request_queue, std::shared_ptr< AsynchronousConditionQueue< std::shared_ptr< nvidia::gxf::Entity > > > response_queue)
void EntityStream(on_new_response_available_callback response_cb, on_rpc_completed_callback rpc_completed_cb)

holoscan::ops::EntityClient::EntityStreamInternal#

Inherits from: grpc::ClientBidiReactor< EntityRequest, EntityResponse >

Methods#
Method Description
EntityStreamInternal(EntityClient *client, on_new_response_available_callback response_cb, on_rpc_completed_callback rpc_completed_cb, uint32_t rpc_timeout)
void OnWriteDone(bool ok) override
void OnReadDone(bool ok) override
void OnDone(const grpc::Status &status) override
Status Await()

holoscan::ops::EntityClientService#

A service class for handling gRPC client operations.

Methods#
Method Description
EntityClientService(const std::string &server_address, const uint32_t rpc_timeout, const bool interrupt, std::shared_ptr< ConditionVariableQueue< std::shared_ptr< EntityRequest > > > request_queue, std::shared_ptr< AsynchronousConditionQueue< std::shared_ptr< nvidia::gxf::Entity > > > response_queue, std::shared_ptr< GrpcClientRequestOp > grpc_request_operator)
void start_entity_stream() Starts the entity stream RPC operation.
void stop_entity_stream() Stops the entity stream RPC operation.

holoscan::ops::HoloscanEntityServiceImpl::EntityStreamInternal#

Inherits from: grpc::ServerBidiReactor< EntityRequest, EntityResponse >

Methods#
Method Description
EntityStreamInternal(HoloscanEntityServiceImpl *server, std::shared_ptr< HoloscanGrpcApplication > app, on_entity_stream_rpc_complete entity_stream_rpc_complete)
void OnWriteDone(bool ok) override
void OnReadDone(bool ok) override
void OnDone() override

holoscan::ops::HoloscanEntityServiceImpl#

Inherits from: Entity::CallbackService

Implementation of the gRPC Entity Service for Holoscan.

Methods#
Method Description
HoloscanEntityServiceImpl(on_new_entity_stream_rpc new_entity_stream_rpc, on_entity_stream_rpc_complete entity_stream_rpc_complete)
grpc::ServerBidiReactor<EntityRequest, EntityResponse> * EntityStream(CallbackServerContext *context) override Handles the bidirectional streaming of entity requests and responses.

holoscan::ops::GrpcClientRequestOp#

Inherits from: holoscan::Operator

Methods#
Method Description
void setup(OperatorSpec &spec) override
void compute(InputContext &op_input, OutputContext &op_output, ExecutionContext &context) override
std::shared_ptr<Allocator> allocator()
Executor & executor()
const cudaStream_t get_cuda_stream()

holoscan::ops::GrpcClientResponseOp#

Inherits from: holoscan::Operator

A Holoscan Operator class for passing data received from gRPC server to downstream operators.

Methods#
Method Description
void start() override
void stop() override
void initialize() override
void setup(OperatorSpec &spec) override
void compute(InputContext &op_input, OutputContext &op_output, ExecutionContext &context) override

holoscan::ops::GrpcServerRequestOp#

Inherits from: holoscan::Operator

A Holoscan Operator class for handling incoming gRPC requests.

Methods#
Method Description
void setup(OperatorSpec &spec) override
void compute(InputContext &op_input, OutputContext &op_output, ExecutionContext &context) override
std::shared_ptr<UnboundedAllocator> allocator()
const uint32_t rpc_timeout()
const cudaStream_t get_cuda_stream()

holoscan::ops::GrpcServerResponseOp#

Inherits from: holoscan::Operator

A Holoscan Operator class for handling outgoing results.

Methods#
Method Description
void setup(OperatorSpec &spec) override
void compute(InputContext &op_input, OutputContext &op_output, ExecutionContext &context) override

holoscan::ops::HoloscanGrpcApplication#

Inherits from: holoscan::Application

A class that represents a gRPC application for Holoscan.

Methods#
Method Description
HoloscanGrpcApplication(std::queue< std::shared_ptr< nvidia::gxf::Entity > > &incoming_request_queue, std::queue< std::shared_ptr< EntityResponse > > &outgoing_response_queue)
void compose() override Composes the gRPC application by setting up necessary components and configurations.
void set_scheduler(const std::string &config_name) Sets the scheduler configuration for the Holoscan application.
void set_data_path(const std::string path) Sets the data path.
void enqueue_request(const EntityRequest &request) Enqueues an EntityRequest for processing.
void enqueue_response(std::shared_ptr< EntityResponse > response) Enqueues an EntityResponse to be sent to the client.
bool is_response_available() Checks if a response is available.
std::shared_ptr<EntityResponse> dequeue_response() Dequeues a response from the internal queue.
const uint32_t rpc_timeout() Retrieves the RPC call timeout value.
void start_streaming() Starts the streaming process.
void stop_streaming() Stops the streaming process.
std::shared_ptr<GrpcServerRequestOp> get_grpc_request_op() const Retrieves the gRPC server request operator.
std::shared_ptr<GrpcServerResponseOp> get_grpc_response_op() const Retrieves the gRPC server response operator.
std::shared_ptr<ConditionVariableQueue<std::shared_ptr<nvidia::gxf::Entity>>> get_request_queue() const Retrieves the request queue.
std::shared_ptr<ConditionVariableQueue<std::shared_ptr<EntityResponse>>> get_response_queue() const Retrieves the response queue.
std::shared_ptr<BooleanCondition> get_streaming_enabled() const Retrieves the current state of the streaming enabled condition.
std::string get_data_path() const Retrieves the data path.

holoscan::ops::TensorProto#

Methods#
Method Description
void tensor_to_entity_request(const nvidia::gxf::Entity &gxf_entity, std::shared_ptr< EntityRequest > request, const cudaStream_t cuda_stream) Converts a GXF entity to an EntityRequest.
void tensor_to_entity_response(const nvidia::gxf::Entity &gxf_entity, std::shared_ptr< EntityResponse > response, const cudaStream_t cuda_stream) Converts a GXF entity to an EntityResponse.
void entity_request_to_tensor(const EntityRequest *entity_request, nvidia::gxf::Entity &gxf_entity, nvidia::gxf::Handle< nvidia::gxf::Allocator > gxf_allocator, const cudaStream_t cuda_stream) Converts an EntityRequest to a GXF entity.
void entity_response_to_tensor(const EntityResponse &entity_request, nvidia::gxf::Entity &gxf_entity, nvidia::gxf::Handle< nvidia::gxf::Allocator > gxf_allocator, const cudaStream_t cuda_stream) Converts an EntityResponse to a GXF entity.