{"id":48077,"library":"grpc-server-register","title":"grpc-server-register","description":"A Node.js library for registering gRPC servers with etcd for service discovery. Version 1.0.4 is the latest release; it wraps the etcd3 and grpc packages to provide a simple registry/unregister API. Key differentiator: opinionated integration with etcd3 for service naming, supporting multiple etcd endpoints. The package uses callbacks and does not ship TypeScript definitions.","status":"active","version":"1.0.4","language":"javascript","source_language":"en","source_url":"https://github.com/qixin1991/grpc-server-register","tags":["javascript"],"install":[{"cmd":"npm install grpc-server-register","lang":"bash","label":"npm"},{"cmd":"yarn add grpc-server-register","lang":"bash","label":"yarn"},{"cmd":"pnpm add grpc-server-register","lang":"bash","label":"pnpm"}],"dependencies":[{"reason":"Client library for etcd, used for service registration","package":"etcd3","optional":false},{"reason":"gRPC JavaScript library, required for server setup","package":"grpc","optional":false}],"imports":[{"note":"Package is CJS-only, no ESM support.","wrong":"import { registry } from 'grpc-server-register';","symbol":"registry","correct":"const { registry } = require('grpc-server-register');"},{"note":"CJS-only export","wrong":"import { unregistry } from 'grpc-server-register';","symbol":"unregistry","correct":"const { unregistry } = require('grpc-server-register');"},{"note":"Exports an object with registry and unregistry functions; no default export.","wrong":"const register = require('grpc-server-register').default;","symbol":"default import","correct":"const register = require('grpc-server-register');"}],"quickstart":{"code":"const { registry, unregistry } = require('grpc-server-register');\nconst path = require('path');\nconst grpc = require('grpc');\nconst PROTO_PATH = path.join(__dirname, 'hw.proto');\nconst rpc_proto = grpc.load(PROTO_PATH).rpc;\n\nfunction sayHello(call, callback) {\n  callback(null, { message: 'Hello from Node' });\n}\n\nasync function main() {\n  await registry('etcd3_naming', 'hello_service', '0.0.0.0', 50051, 'localhost:2379', 10, 15);\n  const server = new grpc.Server();\n  server.addService(rpc_proto.Greeter.service, { sayHello });\n  server.bind('0.0.0.0:50051', grpc.ServerCredentials.createInsecure());\n  server.start();\n  console.log('Server running on port 50051');\n}\n\nprocess.on('SIGINT', () => unregistry());\nmain().catch(console.error);","lang":"javascript","description":"Registers a gRPC server with etcd using the library, starts the server, and unregisters on shutdown."},"warnings":[{"fix":"Install the peer dependency: npm install etcd3 grpc","message":"etcd3 library is required as a dependency but not installed automatically","severity":"breaking","affected_versions":">=1.0.0"},{"fix":"Double-check parameter order: prefix, serviceName, ip, port, endpoints, ttl, timeout","message":"The registry function signature expects a long list of positional arguments (7 params) - easy to misorder","severity":"gotcha","affected_versions":">=1.0.0"},{"fix":"Migrate to @grpc/grpc-js for modern gRPC support; this library may not work with it.","message":"The grpc npm package is deprecated in favor of @grpc/grpc-js","severity":"deprecated","affected_versions":">=1.0.0"},{"fix":"Always use await or catch on the returned promise.","message":"Calling registry() without awaiting can cause unhandled promise rejections if it throws","severity":"gotcha","affected_versions":">=1.0.0"},{"fix":"For multiple services, manage separate registry instances manually.","message":"The unregistry function does not accept arguments and will unregister only the most recent registry call","severity":"gotcha","affected_versions":">=1.0.0"}],"env_vars":null,"search_vec":"'1.0.4':18 'api':35 'callback':52 'definit':58 'differenti':37 'discoveri':16 'endpoint':48 'etcd':13,47 'etcd3':26,41 'grpc':2,10,28 'grpc-server-regist':1 'integr':39 'javascript':59 'key':36 'latest':21 'librari':7 'multipl':46 'name':44 'node.js':6 'opinion':38 'packag':29,50 'provid':31 'regist':4,9 'registry/unregister':34 'releas':22 'server':3,11 'servic':15,43 'ship':56 'simpl':33 'support':45 'typescript':57 'use':51 'version':17 'wrap':24","created_at":"2026-06-07T16:54:48.991032+00:00","updated_at":"2026-06-07T16:54:48.991032+00:00","problems":[{"fix":"Use const register = require('grpc-server-register'); then register.registry(...)","cause":"Incorrect import: using default import syntax for a CJS module","error":"TypeError: register.registry is not a function"},{"fix":"Ensure etcd is accessible at the provided endpoints; check network connectivity.","cause":"etcd server is not running or endpoints are misconfigured","error":"Error: connect ECONNREFUSED 127.0.0.1:2379"},{"fix":"Run npm install etcd3","cause":"Peer dependency etcd3 is not installed","error":"Cannot find module 'etcd3'"},{"fix":"Verify PROTO_PATH points to valid .proto file and that the service is correctly defined.","cause":"gRPC proto loading failed or service definition not found","error":"UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'service' of undefined"}],"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/qixin1991/grpc-server-register#readme","github":"https://github.com/qixin1991/grpc-server-register","docs":null,"changelog":null,"pypi":null,"npm":"grpc-server-register","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}}