{"id":48027,"library":"grpc-graphql-server","title":"gRPC GraphQL Server","description":"Generates a GraphQL schema from gRPC Protobuf definitions and creates a server. v1.2.1 (latest). Supports both gRPC and GraphQL endpoints from a single service definition. Uses @grpc/proto-loader and apollo-server-express. Allows per-service configuration of mutations vs queries. Requires manual setup of proto file paths and gRPC implementation classes.","status":"active","version":"1.2.1","language":"javascript","source_language":"en","source_url":"https://github.com/single9/node-grpc-graphql-server","tags":["javascript","gRPC","GraphQL"],"install":[{"cmd":"npm install grpc-graphql-server","lang":"bash","label":"npm"},{"cmd":"yarn add grpc-graphql-server","lang":"bash","label":"yarn"},{"cmd":"pnpm add grpc-graphql-server","lang":"bash","label":"pnpm"}],"dependencies":[{"reason":"HTTP server framework required for GraphQL endpoint","package":"express","optional":false},{"reason":"Loads .proto files for gRPC service definitions","package":"@grpc/proto-loader","optional":false},{"reason":"GraphQL server middleware for Express","package":"apollo-server-express","optional":false},{"reason":"Schema stitching utilities for GraphQL","package":"@graphql-tools/schema","optional":false}],"imports":[{"note":"Named export; default export does not exist.","wrong":"const RPCServer = require('grpc-graphql-server')","symbol":"RPCServer","correct":"const { RPCServer } = require('grpc-graphql-server')"},{"note":"Named export; also accessible via destructuring.","wrong":"const RPCClient = require('grpc-graphql-server').RPCClient","symbol":"RPCClient","correct":"const { RPCClient } = require('grpc-graphql-server')"},{"note":"Helper function to initialize RPCClient with config.","wrong":"const initRPCClient = require('grpc-graphql-server').initRPCClient","symbol":"initRPCClient","correct":"const { initRPCClient } = require('grpc-graphql-server')"}],"quickstart":{"code":"const express = require('express');\nconst { RPCServer } = require('grpc-graphql-server');\nconst app = express();\n\nclass Hello {\n  SayHello(call, callback) {\n    const message = 'Hello ' + call.request.name;\n    if (typeof callback === 'function') {\n      return callback(null, { message });\n    }\n    return Promise.resolve({ message });\n  }\n}\n\nconst rpcServer = new RPCServer({\n  graphql: true,\n  grpc: {\n    packages: [{\n      name: 'helloworld',\n      services: [{\n        name: 'Greeter',\n        implementation: new Hello(),\n        mutate: false,\n      }],\n    }],\n  },\n});\n\nif (rpcServer.gqlServer) {\n  rpcServer.gqlServer.applyMiddleware({ app });\n}\n\napp.listen(3000, () => console.log('Server started on http://localhost:3000'));","lang":"javascript","description":"Sets up an Express server with a gRPC backend and auto-generated GraphQL schema on /graphql."},"warnings":[{"fix":"Add `graphql: true` to the RPCServer constructor options.","message":"GraphQL endpoint is not enabled by default; must set `graphql: true` in RPCServer options.","severity":"gotcha","affected_versions":">=1.0.0"},{"fix":"Check `if (rpcServer.gqlServer)` before using it.","message":"The `rpcServer.gqlServer` property is undefined if graphql is not enabled or not ready; check before calling applyMiddleware.","severity":"gotcha","affected_versions":">=1.0.0"},{"fix":"Set the `protoFile` option explicitly in RPCServer or ensure the proto file is in the expected directory.","message":"Proto file location defaults to `/conf/rpc` relative to project root; misconfiguration leads to file not found errors.","severity":"gotcha","affected_versions":">=1.0.0"},{"fix":"Use destructured imports: `const { RPCServer } = require('grpc-graphql-server');`","message":"Package structure changed from v0.x to v1.x; exports moved from default to named exports.","severity":"breaking","affected_versions":">=1.0.0"}],"env_vars":null,"search_vec":"'allow':36 'apollo':33 'apollo-server-express':32 'class':55 'configur':40 'creat':13 'definit':11,28 'endpoint':23 'express':35 'file':50 'generat':4 'graphql':2,6,22,58 'grpc':1,9,20,53,57 'grpc/proto-loader':30 'implement':54 'javascript':56 'latest':17 'manual':46 'mutat':42 'path':51 'per':38 'per-servic':37 'proto':49 'protobuf':10 'queri':44 'requir':45 'schema':7 'server':3,15,34 'servic':27,39 'setup':47 'singl':26 'support':18 'use':29 'v1.2.1':16 'vs':43","created_at":"2026-06-07T16:54:33.287383+00:00","updated_at":"2026-06-07T16:54:33.287383+00:00","problems":[{"fix":"Ensure `graphql: true` is in options and that you check `if (rpcServer.gqlServer)` before calling applyMiddleware.","cause":"rpcServer.gqlServer is undefined because graphql: true was not set or server not started.","error":"TypeError: Cannot read properties of undefined (reading 'applyMiddleware')"},{"fix":"Set `protoFile` in options or place the .proto file under `conf/rpc/`.","cause":"Proto file not found in default directory /conf/rpc.","error":"Error: ENOENT: no such file or directory, open '.../conf/rpc/hello.proto'"},{"fix":"Instantiate with `new RPCServer(options);`","cause":"Using RPCServer without `new` keyword.","error":"TypeError: Class constructor cannot be invoked without 'new'"}],"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/single9/node-grpc-graphql-server","github":"https://github.com/single9/node-grpc-graphql-server","docs":null,"changelog":null,"pypi":null,"npm":"grpc-graphql-server","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}}