Install & Compatibility
Where this runs
No compatibility data collected yet for this library.
Code
Verified usage
Verified import paths — ran on the pinned version, not inferred.
Service
✓ import { Service } from 'typescript-grpc'
✗ const Service = require('typescript-grpc').Service
ESM-only; named export for decorating service classes.
Method
✓ import { Method } from 'typescript-grpc'
✗ import Service from 'typescript-grpc'
Method is a named export, not a default export.
generateProto
✓ import { generateProto } from 'typescript-grpc'
✗ import { GenerateProto } from 'typescript-grpc'
CamelCase; generates a .proto file and returns the path.
Sets up a gRPC server using decorators for service and message definitions, auto-generates .proto, and starts listening on port 50051.
import { Type, Field, Message } from 'protobufjs';
import { Service, Method, generateProto, wrapServiceMethods } from 'typescript-grpc';
import { load } from '@grpc/proto-loader';
import { Server, ServerCredentials, ServiceDefinition } from 'grpc';
@Type.d()
class HelloReply extends Message<HelloReply> {
@Field.d(1, 'string')
message: string;
}
@Type.d()
class HelloRequest extends Message<HelloRequest> {
@Field.d(1, 'string')
name: string;
}
@Service()
class Greeter {
@Method({
requestType: 'HelloRequest',
requestStream: false,
responseType: 'HelloReply',
responseStream: false,
})
async sayHello(req: HelloRequest): Promise<HelloReply> {
return new HelloReply({ message: `Hello ${req.name}` });
}
}
async function main() {
const service = new Greeter();
const protoPath = await generateProto('greeter');
const packageDef = await load(protoPath, { keepCase: true });
const server = new Server();
server.addService(packageDef.Greeter as ServiceDefinition<any>, wrapServiceMethods(service));
server.bind('0.0.0.0:50051', ServerCredentials.createInsecure());
server.start();
console.log('Server started');
}
main();
Errors
Common errors & fixes
Error: Cannot find module 'protobufjs'
Missing required peer dependency 'protobufjs'
fixnpm install protobufjs
TypeError: Class extends value undefined is not a constructor or null
Missing protobufjs import for Message class when using @Type.d decorator
fixAdd 'import { Message } from 'protobufjs'' before using @Type.d SyntaxError: Unexpected token @
TypeScript decorators not enabled in tsconfig or using plain JavaScript
fixEnable 'experimentalDecorators' and 'emitDecoratorMetadata' in tsconfig.json, or use TypeScript compiler.
Audit
Dependencies
@grpc/proto-loaderrequiredRequired to load generated .proto files
grpcrequiredCore gRPC library for server/client
protobufjsrequiredRequired for Type decorators and Message base class