{"id":48098,"library":"grpc-web-service-generator","title":"gRPC-Web Service Generator","description":"A CLI tool and runtime wrapper for generating and using gRPC-Web client services from proto files. Current version 0.2.3, updated occasionally. Key differentiator: simplifies gRPC-Web setup by generating a GrpcService class with interceptor and access token support, handling proto package names across versions. Compared to raw grpc-web, it reduces boilerplate for common patterns like auth tokens and error retries.","status":"active","version":"0.2.3","language":"javascript","source_language":"en","source_url":"https://github.com/quarrant/grpc-web-service-generator","tags":["javascript","grpc","grpc-web"],"install":[{"cmd":"npm install grpc-web-service-generator","lang":"bash","label":"npm"},{"cmd":"yarn add grpc-web-service-generator","lang":"bash","label":"yarn"},{"cmd":"pnpm add grpc-web-service-generator","lang":"bash","label":"pnpm"}],"dependencies":[{"reason":"Core gRPC-Web runtime for making RPC calls","package":"grpc-web","optional":false},{"reason":"Protobuf message serialization/deserialization","package":"google-protobuf","optional":false}],"imports":[{"note":"Generated file, not from the npm package. ESM-style import required for correct module resolution.","wrong":"const GrpcService = require('./GrpcService');","symbol":"GrpcService","correct":"import { GrpcService } from './GrpcService';"},{"note":"Type/interface for RPC options when customizing calls.","wrong":null,"symbol":"GrpcWebClientRpcOptions","correct":"import { GrpcWebClientRpcOptions } from 'grpc-web-service-generator';"}],"quickstart":{"code":"// 1. Generate service code\n// yarn grpc-web-service-generator --proto-file=./proto/rpc.proto --output-dir=./services/GrpcService\n\n// 2. Use generated service in client\nimport { GrpcService } from './services/GrpcService';\n\nconst grpcService = new GrpcService('http://localhost:8080');\n\n// Set auth token (optional)\ngrpcService.setAccessToken('my-token');\n\n// Call RPC (syntax depends on version)\n// Version >= 0.1.7: package name prefix\n// Version <= 0.1.6: direct service name\ngrpcService.RpcPackage.TodoService.AddTodo({}).then(response => {\n  console.log(response);\n}).catch(error => {\n  console.error(error);\n});\n\n// Add error interceptor\ngrpcService.interceptors.errors.push((e) => {\n  if (e === 'INVALID_TOKEN') {\n    // Refresh token and retry\n    return updateAccessToken();\n  }\n  return Promise.resolve();\n});","lang":"typescript","description":"Shows generating service code from proto and using GrpcService with token, call, and error interceptor."},"warnings":[{"fix":"Access services via grpcService.<PackageName>.<ServiceName> after upgrading.","message":"Version <= 0.1.6: GrpcService services accessible directly without package name. Version >= 0.1.7: Package name required (e.g., grpcService.RpcPackage.TodoService).","severity":"breaking","affected_versions":"<0.1.7"},{"fix":"Ensure import path matches --output-dir value (e.g., import from './services/GrpcService').","message":"Generated GrpcService file is output to the specified --output-dir; the import path must match that directory structure.","severity":"gotcha","affected_versions":"all"},{"fix":"Use webpack 4 or configure module rules for CommonJS packages.","message":"grpc-web v1.x uses CommonJS, with grpc-web-service-generator not fully compatible with ESM bundlers like webpack 5; may require configuration.","severity":"gotcha","affected_versions":"all"}],"env_vars":null,"search_vec":"'0.2.3':26 'access':44 'across':51 'auth':66 'boilerpl':61 'class':40 'cli':7 'client':19 'common':63 'compar':53 'current':24 'differenti':30 'error':69 'file':23 'generat':5,13,37 'grpc':2,17,33,57,72,74 'grpc-web':1,16,32,56,73 'grpcservic':39 'handl':47 'interceptor':42 'javascript':71 'key':29 'like':65 'name':50 'occasion':28 'packag':49 'pattern':64 'proto':22,48 'raw':55 'reduc':60 'retri':70 'runtim':10 'servic':4,20 'setup':35 'simplifi':31 'support':46 'token':45,67 'tool':8 'updat':27 'use':15 'version':25,52 'web':3,18,34,58,75 'wrapper':11","created_at":"2026-06-07T16:54:54.533901+00:00","updated_at":"2026-06-07T16:54:54.533901+00:00","problems":[{"fix":"Confirm --output-dir and adjust import to match (e.g., import { GrpcService } from './services/GrpcService').","cause":"Import path does not match the generated output directory.","error":"Cannot find module './GrpcService'"},{"fix":"Add package name prefix: grpcService.RpcPackage.TodoService.AddTodo(...).","cause":"Version mismatch: using version >= 0.1.7 but expecting direct service access.","error":"grpcService.RpcPackage is 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/quarrant/grpc-web-service-generator#readme","github":"https://github.com/quarrant/grpc-web-service-generator","docs":null,"changelog":null,"pypi":null,"npm":"grpc-web-service-generator","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}}