gRPC Library for Node - pure JS implementation
npm install @grpc/grpc-jsNode 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
Documentation specifically for the @grpc/grpc-js package is currently not available. However, documentation is available for the grpc package, and the two packages contain mostly the same interface. There are a few notable differences, however, and these differences are noted in the "Migrating from grpc" section below.
- Clients
- Automatic reconnection
- Servers
- Streaming
- Metadata
- Partial compression support: clients can compress and decompress messages, and servers can decompress request messages
- Pick first and round robin load balancing policies
- Client Interceptors
- Connection Keepalives
- HTTP Connect support (proxies)
If you need a feature from the grpc package that is not provided by the @grpc/grpc-js, please file a feature request with that information.
This library does not directly handle .proto files. To use .proto files with this library we recommend using the @grpc/proto-loader package.
@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.grpc-tools
- If you are currently loading packages generated by , you should instead generate your files using the generate_package_definition option in grpc-tools, then load the object exported by the generated file into @grpc/grpc-js using grpc.loadPackageDefinition.Server#bind
- If you have a server and you are using to bind ports, you will need to use Server#bindAsync instead.grpc
- If you are using any channel options supported in but not supported in @grpc/grpc-js, you may need to adjust your code to handle the different behavior. Refer to the list of supported options below.grpc
- Refer to the detailed package comparison for more details on the differences between and @grpc/grpc-js.
are not supported in @grpc/grpc-js. The channel arguments supported by @grpc/grpc-js are:
- grpc.ssl_target_name_override
- grpc.primary_user_agent
- grpc.secondary_user_agent
- grpc.default_authority
- grpc.keepalive_time_ms
- grpc.keepalive_timeout_ms
- grpc.keepalive_permit_without_calls
- grpc.service_config
- grpc.max_concurrent_streams
- grpc.initial_reconnect_backoff_ms
- grpc.max_reconnect_backoff_ms
- grpc.use_local_subchannel_pool
- grpc.max_send_message_length
- grpc.max_receive_message_length
- grpc.enable_http_proxy
- grpc.default_compression_algorithm
- grpc.enable_channelz
- grpc.dns_min_time_between_resolutions_ms
- grpc.enable_retries
- grpc.max_connection_age_ms
- grpc.max_connection_age_grace_ms
- grpc.max_connection_idle_ms
- grpc.per_rpc_retry_buffer_size
- grpc.retry_buffer_size
- grpc.service_config_disable_resolution
- grpc.client_idle_timeout_ms
- grpc-node.max_session_memory
- grpc-node.tls_enable_trace
- grpc-node.retry_max_attempts_limit
- grpc-node.flow_control_window
- channelOverride
- channelFactoryOverrideSome 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.
- The grpc.experimental` namespace contains APIs that have not stabilized. Any API in that namespace may break in any minor version update.