npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2025 – Pkg Stats / Ryan Hefner

@novapo/n8n-nodes-grpc

v1.0.17

Published

n8n custom nodes for executing gRPC calls with dynamic proto parsing

Readme

n8n-nodes-grpc

Execute gRPC calls in n8n workflows with dynamic protobuf support.

Features

  • Dynamic Proto Parsing - Load proto definitions directly in n8n
  • Multi-file Support - Handle imports between multiple proto files
  • Google Well-Known Types - Built-in support for Any, Timestamp, Struct, etc.
  • Flexible Configuration - Use credentials or define inline
  • Streaming Support - Server streaming RPC methods
  • TLS/SSL - Secure connections support
  • Custom Metadata - Add headers to gRPC calls

Installation

npm install @novapo/n8n-nodes-grpc

In n8n, go to SettingsCommunity Nodes and install @novapo/n8n-nodes-grpc.

Quick Start

1. Add gRPC Node

Add the gRPC node to your workflow.

2. Configure Connection

Option A: Using Credentials

  • Toggle Use Credentials ON
  • Create/select gRPC credentials with:
    • Host (e.g., api.example.com:443)
    • Proto definitions
    • TLS settings
    • Metadata

Option B: Inline Configuration

  • Toggle Use Credentials OFF
  • Fill in Connection Settings, Metadata, and Protobuf Definitions directly

3. Define Proto Files

Single File

syntax = "proto3";
package myservice;

service Greeter {
  rpc SayHello(HelloRequest) returns (HelloReply);
}

message HelloRequest {
  string name = 1;
}

message HelloReply {
  string message = 1;
}

Multiple Files

Use delimiters to separate files:

[[=============== common.proto ===============]]
syntax = "proto3";
package common;

message Status {
  int32 code = 1;
  string message = 2;
}

[[=============== service.proto ===============]]
syntax = "proto3";
package myservice;

import "common.proto";

service MyService {
  rpc GetStatus(Request) returns (common.Status);
}

4. Select Service & Method

Choose from auto-discovered services and methods.

5. Build Request

JSON format:

{
  "name": "World"
}

Using google.protobuf.Any

For Any type fields, use @type to specify the message type:

{
  "requestId": "123",
  "configData": {
    "@type": "type.googleapis.com/mypackage.MyMessage",
    "field_name": "value",
    "nested_field": 123
  }
}

Important:

  • Top-level fields: camelCase (requestId, configData)
  • Fields inside @type: snake_case (as defined in proto)

Configuration Options

Connection Settings

  • Host: hostname:port (e.g., localhost:50051)
  • Use TLS: Enable for secure connections

Metadata

Add custom headers:

Key: Authorization
Value: Bearer token123

Options

  • Timeout: Request timeout in milliseconds
  • Response Format: JSON or Raw

Examples

Basic Unary Call

{
  "userId": "user-123",
  "action": "GET_PROFILE"
}

With Nested Messages

{
  "user": {
    "id": "123",
    "name": "John",
    "email": "[email protected]"
  },
  "preferences": {
    "theme": "dark",
    "notifications": true
  }
}

With Repeated Fields

{
  "taskIds": ["task-1", "task-2", "task-3"],
  "filters": [
    {"field": "status", "value": "active"},
    {"field": "priority", "value": "high"}
  ]
}

Supported Features

| Feature | Status | |---------|--------| | Unary RPC | ✅ | | Server Streaming | ✅ | | Client Streaming | ❌ | | Bidirectional Streaming | ❌ | | TLS/SSL | ✅ | | Custom Metadata | ✅ | | google.protobuf.Any | ✅ | | google.protobuf.Timestamp | ✅ | | google.protobuf.Struct | ✅ | | Enums | ✅ | | Nested Messages | ✅ | | Repeated Fields | ✅ |

Troubleshooting

"Service not found"

  • Verify proto syntax is correct
  • Check service name matches proto definition

"Type not found" (Any type)

  • Ensure @type URL is correct: type.googleapis.com/package.MessageType
  • Verify the message type exists in your proto files

"Enum error"

  • Use exact enum name from proto (e.g., RUNNING not running)

Import errors

  • Use file delimiter syntax for multiple files
  • Ensure imported file is defined before import

License

MIT

Links