# @grpc/proto-loader

> gRPC utility library for loading .proto files

Latest version **0.8.1** (published 2026-05-07) · Apache-2.0 license · 0 weekly downloads

## Install

```sh
npm install @grpc/proto-loader
pnpm add @grpc/proto-loader
yarn add @grpc/proto-loader
bun add @grpc/proto-loader
```

Provides the command `proto-loader-gen-types`.

## Health

**Score 60/100 (C)** — status: active.

Positive: has types; no vulnerabilities; high maintenance score; high quality score.

Warnings: low downloads; no esm support; pre 1.0.

## Facts

| | |
|---|---|
| Version | 0.8.1 |
| Published | 2026-05-07 |
| First published | 2018-04-30 |
| Weekly downloads | 0 |
| License | Apache-2.0 |
| TypeScript types | bundled |
| Module format | CommonJS |
| Node | >=6 |
| Dependencies | 4 |
| Unpacked size | 119.3 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 4841 |
| Author | Google Inc. |
| Maintainers | murgatroid99, grpc-packages, nicolasnoble |

## Links

- npm: https://www.npmjs.com/package/@grpc/proto-loader
- Repository: https://github.com/grpc/grpc-node
- Homepage: https://grpc.io/
- Issues: https://github.com/grpc/grpc-node/issues
- npm.io page: https://npm.io/package/@grpc/proto-loader

## Dependencies (4)

- [long](https://npm.io/package/long.md) ^5.0.0
- [yargs](https://npm.io/package/yargs.md) ^17.7.2
- [protobufjs](https://npm.io/package/protobufjs.md) ^7.5.5
- [lodash.camelcase](https://npm.io/package/lodash.camelcase.md) ^4.3.0

## Recent versions

- 0.8.1 (latest) — 2026-05-07
- 0.7.9-pre.1 (prerelease) — 2023-07-28
- 0.6.0-pre18 (generator-draft) — 2021-03-31
- 0.8.0 — 2025-07-21
- 0.7.15 — 2025-04-18
- 0.7.14 — 2025-04-17
- 0.7.13 — 2024-05-01
- 0.7.12 — 2024-03-28
- 0.7.11 — 2024-03-26
- 0.7.10 — 2023-09-18
- 0.7.9 — 2023-08-23
- 0.7.8 — 2023-07-11
- 0.7.7 — 2023-05-03
- 0.7.6 — 2023-03-22
- 0.7.5 — 2023-02-13
- … 46 more at https://npm.io/package/@grpc/proto-loader/versions

## README

# gRPC Protobuf Loader

A utility package for loading `.proto` files for use with gRPC, using the latest Protobuf.js package.
Please refer to [protobuf.js' documentation](https://github.com/dcodeIO/protobuf.js/blob/master/README.md)
to understands its features and limitations.

## Installation

```sh
npm install @grpc/proto-loader
```

## Usage

```js
const protoLoader = require('@grpc/proto-loader');
const grpcLibrary = require('grpc');
// OR
const grpcLibrary = require('@grpc/grpc-js');

protoLoader.load(protoFileName, options).then(packageDefinition => {
  const packageObject = grpcLibrary.loadPackageDefinition(packageDefinition);
});
// OR
const packageDefinition = protoLoader.loadSync(protoFileName, options);
const packageObject = grpcLibrary.loadPackageDefinition(packageDefinition);
```

The options parameter is an object that can have the following optional properties:

| Field name | Valid values | Description
|------------|--------------|------------
| `keepCase` | `true` or `false` | Preserve field names. The default is to change them to camel case.
| `longs` | `String` or `Number` | The type to use to represent `long` values. Defaults to a `Long` object type.
| `enums` | `String` | The type to use to represent `enum` values. Defaults to the numeric value.
| `bytes` | `Array` or `String` | The type to use to represent `bytes` values. Defaults to `Buffer`.
| `defaults` | `true` or `false` | Set default values on output objects. Defaults to `false`.
| `arrays` | `true` or `false` | Set empty arrays for missing array values even if `defaults` is `false` Defaults to `false`.
| `objects` | `true` or `false` | Set empty objects for missing object values even if `defaults` is `false` Defaults to `false`.
| `oneofs` | `true` or `false` | Set virtual oneof properties to the present field's name. Defaults to `false`.
| `json` | `true` or `false` | Represent `Infinity` and `NaN` as strings in `float` fields, and automatically decode `google.protobuf.Any` values. Defaults to `false`
| `includeDirs` | An array of strings | A list of search paths for imported `.proto` files.

The following options object closely approximates the existing behavior of `grpc.load`:

```js
const options = {
  keepCase: true,
  longs: String,
  enums: String,
  defaults: true,
  oneofs: true
}
```

## Generating TypeScript types

The `proto-loader-gen-types` script distributed with this package can be used to generate TypeScript type information for the objects loaded at runtime. More information about how to use it can be found in [the *@grpc/proto-loader TypeScript Type Generator CLI Tool* proposal document](https://github.com/grpc/proposal/blob/master/L70-node-proto-loader-type-generator.md). The arguments mostly match the `load` function's options; the full usage information is as follows:

```console
proto-loader-gen-types.js [options] filenames...

Options:
      --help                 Show help                                 [boolean]
      --version              Show version number                       [boolean]
      --keepCase             Preserve the case of field names
                                                      [boolean] [default: false]
      --longs                The type that should be used to output 64 bit
                             integer values. Can be String, Number
                                                      [string] [default: "Long"]
      --enums                The type that should be used to output enum fields.
                             Can be String          [string] [default: "number"]
      --bytes                The type that should be used to output bytes
                             fields. Can be String, Array
                                                    [string] [default: "Buffer"]
      --defaults             Output default values for omitted fields
                                                      [boolean] [default: false]
      --arrays               Output default values for omitted repeated fields
                             even if --defaults is not set
                                                      [boolean] [default: false]
      --objects              Output default values for omitted message fields
                             even if --defaults is not set
                                                      [boolean] [default: false]
      --oneofs               Output virtual oneof fields set to the present
                             field's name             [boolean] [default: false]
      --json                 Represent Infinity and NaN as strings in float
                             fields. Also decode google.protobuf.Any
                             automatically            [boolean] [default: false]
      --includeComments      Generate doc comments from comments in the original
                             files                    [boolean] [default: false]
  -I, --includeDirs          Directories to search for included files    [array]
  -O, --outDir               Directory in which to output files
                                                             [string] [required]
      --grpcLib              The gRPC implementation library that these types
                             will be used with. If not provided, some types will
                             not be generated                           [string]
      --inputTemplate        Template for mapping input or "permissive" type
                             names                      [string] [default: "%s"]
      --outputTemplate       Template for mapping output or "restricted" type
                             names              [string] [default: "%s__Output"]
      --inputBranded         Output property for branded type for  "permissive"
                             types with fullName of the Message as its value
                                                      [boolean] [default: false]
      --outputBranded        Output property for branded type for  "restricted"
                             types with fullName of the Message as its value
                                                      [boolean] [default: false]
      --targetFileExtension  File extension for generated files.
                                                       [string] [default: ".ts"]
      --importFileExtension  File extension for import specifiers in generated
                             code.                        [string] [default: ""]
```

### Example Usage

Generate the types:

```sh
$(npm bin)/proto-loader-gen-types --longs=String --enums=String --defaults --oneofs --grpcLib=@grpc/grpc-js --outDir=proto/ proto/*.proto
```

Consume the types:

```ts
import * as grpc from '@grpc/grpc-js';
import * as protoLoader from '@grpc/proto-loader';
import type { ProtoGrpcType } from './proto/example.ts';
import type { ExampleHandlers } from './proto/example_package/Example.ts';

const exampleServer: ExampleHandlers = {
  // server handlers implementation...
};

const packageDefinition = protoLoader.loadSync('./proto/example.proto');
const proto = (grpc.loadPackageDefinition(
  packageDefinition
) as unknown) as ProtoGrpcType;

const server = new grpc.Server();
server.addService(proto.example_package.Example.service, exampleServer);
```

---
_Source: https://npm.io/package/@grpc/proto-loader · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
