npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@lankajs/plugin-grpc

v5.0.0

Published

plugin: The framing, the trailers and the status codes — with the message codec left to whoever generated it.

Readme

@lankajs/plugin-grpc

⬡ plugin · gRPC-Web: unary calls and server streams

The framing, the trailers and the status codes — with the message codec left to whoever generated it.

A core capability core does not implement itself. Registered with use(), then called by core. peerDependencies: lanka is mandatory.

Runs in: the browser, node and React Native — everywhere.

How to use it: GUIDE.md — the user guide, with examples. How to change it: SKILL.md.

Extension point

Plugs into:

use(plugin) · host.apiBaseUrl

Contents

  • ILankaGrpcCodec — the seam: encode a request, decode a response
  • LankaGrpcRequest — gRPC-Web framing, trailers, grpc-status as a tagged failure
  • ALankaGrpcGateway / createLankaGrpcGatewayunary, both styles
  • LankaGrpcStreamTransport — a server stream read as named events

The package does not know protobuf, and must not

A message codec belongs to whatever generated the message types — protobuf-es, ts-proto, a hand-written one. Shipping a runtime for one of them would pick the consumer's code generator for them and add a dependency to everyone who chose differently. ILankaGrpcCodec is two functions, and createLankaGrpcJsonCodec() is the one this package ships — for a server speaking +json, and for a test that wants to read what went over the wire.

What is here is the part everyone rewrites

The length-prefixed framing, the trailers frame, and the mapping from grpc-status to a failure the application can branch on. Sixteen status codes become five kinds: CANCELLED is aborted and is not shown, DEADLINE_EXCEEDED is timeout, UNAVAILABLE is network and invites a retry, UNIMPLEMENTED and INTERNAL are http, and everything else is domain with the status name as the code. Without the mapping a cancelled call and a failed one look the same, and the user is shown an error for leaving the screen.

grpc-status arrives in two places

In the trailers frame at the end of the body, and — for a call that failed before any message — in the HTTP headers. Both are read, headers first: a trailers-only response has no body to find them in, and a reader that only knows one of the two reports a schema failure for what is an ordinary permission denial.

Streaming needs no second protocol

A server stream is the same framing arriving over time, so LankaGrpcStreamTransport is an ILankaServerEventTransport like every other: eventTypeOf says which named event a decoded message is, and a bridge cannot tell it from SSE.


Repository map: ../../README.md