<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/the-state-of-grpc-in-the-browser-6aicgkq7c" -->

---
title: The state of gRPC in the browser | daily.dev
description: gRPC-Web brings gRPC's performance and type-safety benefits to browser-based frontend development, since browsers cannot implement the raw HTTP/2 gRPC spec...
canonical: https://daily.dev/posts/the-state-of-grpc-in-the-browser-6aicgkq7c
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: The state of gRPC in the browser | daily.dev
og:description: gRPC-Web brings gRPC's performance and type-safety benefits to browser-based frontend development, since browsers cannot implement the raw HTTP/2 gRPC spec...
og:url: https://daily.dev/posts/the-state-of-grpc-in-the-browser-6aicgkq7c
og:image: https://api.daily.dev/og/posts/6AicGKq7C.png
og:image:alt: The state of gRPC in the browser
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# The state of gRPC in the browser

**[gRPC Blog](https://daily.dev/sources/grpc-blog)** · 7 min read · 0 upvotes · 0 comments

## Summary

gRPC-Web brings gRPC's performance and type-safety benefits to browser-based frontend development, since browsers cannot implement the raw HTTP/2 gRPC spec directly. Two independent implementations emerged in 2016 from Google and Improbable, each with slightly different clients (grpc-web and @improbable-eng/grpc-web) and proxies (Envoy vs Go-based). After the Google client reached GA in October 2018, the two teams agreed to promote the Google client and Envoy proxy as the preferred path for new users, while the Improbable implementation remains an experimental alternative. A migration guide was planned to help existing Improbable users move to the Google client, and a roadmap includes better JSON-like encoding, framework integrations, Fetch API transport, and bi-directional streaming support.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://grpc.io/blog/state-of-grpc-web>

## Questions this post answers

### Should I use the Google grpc-web client or the Improbable @improbable-eng/grpc-web client for a new project?

Start with the Google client, since the two teams agreed to promote it and the Envoy proxy as the preferred solution for new users following the client's GA announcement in October 2018. It has strict API compatibility guarantees and is built on the Google Closure library used in Gmail and Google Maps. The Improbable client remains a maintained alternative, useful if you need Fetch API memory efficiency or experimental websocket-based client-side and bi-directional streaming.

_daily.dev surfaces comparisons like this for developers deciding between gRPC-Web client implementations._

### Does gRPC-Web support client-side and bi-directional streaming in the browser?

No, neither the Google nor Improbable gRPC-Web clients fully support client-side or bi-directional streaming in production. The gRPC-Web spec only mandates this once WHATWG Streams are implemented in browsers. Improbable offers an experimental websocket transport for it, but this is outside the spec and not recommended for production use.

_Track evolving browser streaming support with daily.dev before betting production gRPC-Web architecture on it._

### Why can't the standard HTTP/2 gRPC protocol be used directly in a web browser?

Browsers lack any API offering fine-grained enough control over requests to implement the HTTP/2 gRPC spec directly, including the inability to force HTTP/2 or access raw HTTP/2 frames. gRPC-Web solves this by having the browser send normal HTTP requests via Fetch or XHR, with a mandatory proxy translating between gRPC-Web requests and gRPC HTTP/2 responses on the server side.

_daily.dev helps frontend engineers keep up with protocol workarounds like gRPC-Web's proxy architecture._

## Similar posts on daily.dev

- [gRPC-Web Failed the Web · Buf](https://daily.dev/posts/grpc-web-failed-the-web-buf-yxi6aoslo) · Buf Blog · 51 upvotes · 8 comments
- [gRPC deep dive: from service definition to wire format](https://daily.dev/posts/grpc-deep-dive-from-service-definition-to-wire-format-mykdq3gjn) · Hacker News · 0 upvotes · 0 comments
- [gRPC-Rust Roadmap](https://daily.dev/posts/grpc-rust-roadmap-jhgiaf4vu) · gRPC Blog · 69 upvotes · 6 comments
- [gRPC vs REST Is the Wrong Question · Buf](https://daily.dev/posts/grpc-vs-rest-is-the-wrong-question-buf-xe2qehlxz) · Buf Blog · 109 upvotes · 4 comments

---

Tags: [#webdev](https://daily.dev/tags/webdev), [#grpc](https://daily.dev/tags/grpc), [#envoy](https://daily.dev/tags/envoy)

[View this post on daily.dev](https://daily.dev/posts/the-state-of-grpc-in-the-browser-6aicgkq7c)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"The state of gRPC in the browser","url":"https://daily.dev/posts/the-state-of-grpc-in-the-browser-6aicgkq7c","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/the-state-of-grpc-in-the-browser-6aicgkq7c"},"datePublished":"2026-08-23T07:20:21.241Z","dateModified":"2026-08-23T07:21:34.844Z","description":"gRPC-Web brings gRPC's performance and type-safety benefits to browser-based frontend development, since browsers cannot implement the raw HTTP/2 gRPC spec...","image":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/10aae04dfd3ba4523d83e4087201877a?_a=AQAEuop","thumbnailUrl":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/10aae04dfd3ba4523d83e4087201877a?_a=AQAEuop","isAccessibleForFree":true,"articleSection":"gRPC Blog","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"gRPC Blog","logo":"https://media.daily.dev/image/upload/s--asedGCAx--/f_auto,q_auto/v1787469607/logos/grpc-blog?_a=BAMAMicg0","url":"https://daily.dev/sources/grpc-blog"},"commentCount":0,"discussionUrl":"https://daily.dev/posts/the-state-of-grpc-in-the-browser-6aicgkq7c","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":0},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":0}],"keywords":"webdev,grpc,envoy","timeRequired":"PT7M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"gRPC Blog","item":"https://daily.dev/sources/grpc-blog"},{"@type":"ListItem","position":3,"name":"The state of gRPC in the browser"}]}
{"@context":"https://schema.org","@type":"FAQPage","@id":"https://daily.dev/posts/the-state-of-grpc-in-the-browser-6aicgkq7c#faq","mainEntity":[{"@type":"Question","name":"Should I use the Google grpc-web client or the Improbable @improbable-eng/grpc-web client for a new project?","acceptedAnswer":{"@type":"Answer","text":"Start with the Google client, since the two teams agreed to promote it and the Envoy proxy as the preferred solution for new users following the client's GA announcement in October 2018. It has strict API compatibility guarantees and is built on the Google Closure library used in Gmail and Google Maps. The Improbable client remains a maintained alternative, useful if you need Fetch API memory efficiency or experimental websocket-based client-side and bi-directional streaming. daily.dev surfaces comparisons like this for developers deciding between gRPC-Web client implementations."}},{"@type":"Question","name":"Does gRPC-Web support client-side and bi-directional streaming in the browser?","acceptedAnswer":{"@type":"Answer","text":"No, neither the Google nor Improbable gRPC-Web clients fully support client-side or bi-directional streaming in production. The gRPC-Web spec only mandates this once WHATWG Streams are implemented in browsers. Improbable offers an experimental websocket transport for it, but this is outside the spec and not recommended for production use. Track evolving browser streaming support with daily.dev before betting production gRPC-Web architecture on it."}},{"@type":"Question","name":"Why can't the standard HTTP/2 gRPC protocol be used directly in a web browser?","acceptedAnswer":{"@type":"Answer","text":"Browsers lack any API offering fine-grained enough control over requests to implement the HTTP/2 gRPC spec directly, including the inability to force HTTP/2 or access raw HTTP/2 frames. gRPC-Web solves this by having the browser send normal HTTP requests via Fetch or XHR, with a mandatory proxy translating between gRPC-Web requests and gRPC HTTP/2 responses on the server side. daily.dev helps frontend engineers keep up with protocol workarounds like gRPC-Web's proxy architecture."}}]}
```

