# Pure JavaScript gRPC Client

## Installation

Node 12 is recommended. The exact set of compatible Node versions can be found in the `engines` field of the `package.json` file.

```sh
npm install @grpc/grpc-js
```

## Features

 - Clients
 - Automatic reconnection
 - Servers
 - Streaming
 - Metadata
 - Partial compression support: clients can decompress response messages
 - Pick first and round robin load balancing policies
 - Client Interceptors
 - Connection Keepalives
 - HTTP Connect support (proxies)

This library does not directly handle `.proto` files. To use `.proto` files with this library we recommend using the `@grpc/proto-loader` package.

 ## Migrating from [`grpc`](https://www.npmjs.com/package/grpc)

 `@grpc/grpc-js` is almost a drop-in replacement for `grpc`, but you may need to make a few code changes to use it:

 - If you are currently loading `.proto` files using `grpc.load`, that function is not available in this library. You should instead load your `.proto` files using `@grpc/proto-loader` and load the resulting package definition objects into `@grpc/grpc-js` using `grpc.loadPackageDefinition`.
 - If you are currently loading packages generated by `grpc-tools`, you should instead generate your files using the `--generate_package_definitions` option in `grpc-tools`, then load the object exported by the generated file into `@grpc/grpc-js` using `grpc.loadPackageDefinition`.
 - If you have a server and you are using `Server#bind` to bind ports, you will need to use `Server#bindAsync` instead.

## Some Notes on API Guarantees

The public API of this library follows semantic versioning, with some caveats:

 - Some methods are prefixed with an underscore. These methods are internal and should not be considered part of the public API.
 - The class `Call` is only exposed due to limitations of TypeScript. It should not be considered part of the public API.
 - In general, any API that is exposed by this library but is not exposed by the `grpc` library is likely an error and should not be considered part of the public API.
