{"id":49257,"library":"rxjs-grpc","title":"rxjs-grpc","description":"Typesafe gRPC client and server library using RxJS observables in TypeScript. Version 0.2.7 is the latest stable release; the library generates TypeScript interfaces from protobuf definitions and allows implementing gRPC services that return RxJS Observables. It supports both client and server code generation. Requires rxjs (^6.0.0 || ^7.0.0) and the grpc package as peer dependencies. Key differentiator: strongly-typed gRPC with reactive patterns via RxJS, unlike the callback/promise-based @grpc/grpc-js.","status":"active","version":"0.2.7","language":"javascript","source_language":"en","source_url":"https://github.com/kondi/rxjs-grpc","tags":["javascript","typescript"],"install":[{"cmd":"npm install rxjs-grpc","lang":"bash","label":"npm"},{"cmd":"yarn add rxjs-grpc","lang":"bash","label":"yarn"},{"cmd":"pnpm add rxjs-grpc","lang":"bash","label":"pnpm"}],"dependencies":[{"reason":"Required peer dependency for Observable types and operators.","package":"rxjs","optional":false},{"reason":"Required peer dependency for gRPC functionality.","package":"grpc","optional":false}],"imports":[{"note":"CommonJS require works but TypeScript ESM import is preferred.","wrong":"const { serverBuilder } = require('rxjs-grpc')","symbol":"serverBuilder","correct":"import { serverBuilder } from 'rxjs-grpc'"},{"note":"Do not import from subpaths; the module exports at the top level.","wrong":"import { clientFactory } from 'rxjs-grpc/src'","symbol":"clientFactory","correct":"import { clientFactory } from 'rxjs-grpc'"},{"note":"No named export GrpcClient; use clientFactory and then instantiate the client class.","wrong":"","symbol":"GrpcClient (or similar)","correct":"import { clientFactory } from 'rxjs-grpc'"},{"note":"Types are not exported separately; use typeof serverBuilder or infer from the generated namespace.","wrong":"","symbol":"ServerBuilder type","correct":"import { serverBuilder } from 'rxjs-grpc'"}],"quickstart":{"code":"// Create a protobuf file 'greeter.proto':\n// syntax = \"proto3\";\n// package greeter;\n// service Greeter { rpc SayHello (HelloRequest) returns (HelloReply) {} }\n// message HelloRequest { string name = 1; }\n// message HelloReply { string message = 1; }\n\n// Generate TypeScript interfaces:\n// npx rxjs-grpc -o grpc-namespaces.ts greeter.proto\n\n// Implementation (server):\nimport { of } from 'rxjs';\nimport { serverBuilder } from 'rxjs-grpc';\nimport { greeter } from './grpc-namespaces';\n\nconst server = serverBuilder<greeter.ServerBuilder>('greeter.proto', 'greeter');\nserver.addGreeter({\n  sayHello(request: greeter.HelloRequest) {\n    return of({ message: 'Hello ' + request.name });\n  }\n});\nserver.start('0.0.0.0:50051');\n\n// Client:\nimport { clientFactory } from 'rxjs-grpc';\nimport { greeter } from './grpc-namespaces';\n\nconst Services = clientFactory<greeter.ClientFactory>('greeter.proto', 'greeter');\nconst services = new Services('localhost:50051');\nconst greeterClient = services.getGreeter();\ngreeterClient.sayHello({ name: 'world' }).forEach(response => {\n  console.log(`Greeting: ${response.message}`);\n});","lang":"typescript","description":"Complete example of generating TypeScript interfaces, implementing a gRPC server with Observable responses, and calling the service from a client."},"warnings":[{"fix":"Ensure the proto file has a 'package' statement and pass that exact name as second argument to serverBuilder/clientFactory.","message":"The generated namespace name must match the proto package; otherwise TypeScript generics fail.","severity":"gotcha","affected_versions":">=0.0.0"},{"fix":"Stay on grpc package; monitor rxjs-grpc for future updates to support @grpc/grpc-js.","message":"The underlying 'grpc' package is deprecated; consider using '@grpc/grpc-js'. However, rxjs-grpc does not support '@grpc/grpc-js'.","severity":"deprecated","affected_versions":">=0.0.0"},{"fix":"Use CLI as shown; do not attempt to import code generation functions.","message":"The code generator rxjs-grpc is a CLI tool invoked via npx or ./node_modules/.bin/rxjs-grpc; it is not a programmatic API.","severity":"gotcha","affected_versions":">=0.0.0"},{"fix":"Wrap return values in rxjs.of() or from().","message":"Server methods must return Observables (or Promises); returning raw objects causes TypeScript errors.","severity":"gotcha","affected_versions":">=0.0.0"},{"fix":"Regenerate TypeScript interfaces with the new CLI after upgrading.","message":"In version 0.2.x, the generated interfaces changed; the namespace structure may differ from 0.1.x.","severity":"breaking","affected_versions":">=0.2.0 <0.3.0"}],"env_vars":null,"search_vec":"'0.2.7':16 '6.0.0':49 '7.0.0':50 'allow':31 'callback/promise-based':71 'client':6,42 'code':45 'definit':29 'depend':57 'differenti':59 'generat':24,46 'grpc':3,5,33,53,63 'grpc/grpc-js':72 'implement':32 'interfac':26 'javascript':73 'key':58 'latest':19 'librari':9,23 'observ':12,38 'packag':54 'pattern':66 'peer':56 'protobuf':28 'reactiv':65 'releas':21 'requir':47 'return':36 'rxjs':2,11,37,48,68 'rxjs-grpc':1 'server':8,44 'servic':34 'stabl':20 'strong':61 'strongly-typ':60 'support':40 'type':62 'typesaf':4 'typescript':14,25,74 'unlik':69 'use':10 'version':15 'via':67","created_at":"2026-06-07T17:00:51.075126+00:00","updated_at":"2026-06-07T17:00:51.075126+00:00","problems":[{"fix":"Install TypeScript: npm install --save-dev typescript","cause":"TypeScript is not installed or not in node_modules.","error":"Error: Cannot find module 'typescript'"},{"fix":"Use import { serverBuilder } from 'rxjs-grpc'","cause":"Wrong import: using default import instead of named import.","error":"TypeError: serverBuilder is not a function"},{"fix":"Wrap the return value: sayHello(request) { return of({ message: 'Hello' }); }","cause":"Server method returns a plain object instead of Observable.","error":"error TS2345: Argument of type '{ sayHello: (request: any) => { message: string; }; }' is not assignable to parameter of type 'Greeter'"},{"fix":"Start the server first; ensure address format is 'host:port' (e.g., '0.0.0.0:50051').","cause":"gRPC server not running or wrong address.","error":"Error: 14 UNAVAILABLE: Name resolution failed for target localhost:50051"}],"ecosystem":"npm","meta_description":null,"install_score":null,"quickstart_score":null,"quickstart_tag":null,"pypi_latest":null,"cli_name":null,"cli_version":null,"type":"library","homepage":"https://github.com/kondi/rxjs-grpc#readme","github":"https://github.com/kondi/rxjs-grpc","docs":null,"changelog":null,"pypi":null,"npm":"rxjs-grpc","openapi_spec":null,"status_page":null,"smithery":null,"categories":["devops"],"base_url":null,"auth_type":null,"provenance":{"verified_status":null,"verified_at":null,"last_verified":"2026-06-07","next_check":"2026-09-05","install_tag":null}}