DEV Community


Posted on

Building a gRPC Server with NestJS and Buf: A Comprehensive Showcase


If you're familiar with NestJS and gRPC, you may have already referred to the official documentation on implementing gRPC in NestJS. While Protoc is a standard tool, as you delve deeper into customization, its complexity increases.

This is where Buf comes in. Buf offers a simpler alternative to Protoc for generating SDKs, documentation, and more. Despite its simplicity, I noticed a lack of sample projects or showcases integrating Buf with NestJS.

Therefore, I took it upon myself to create one.

Overview of repository

This repository ( is a NestJS and Buf usage example for protobuf server implementation.
It will help you to understand about

  • directory structure
  • explains requirements
  • installation process
  • how to run the application

Project Structure

├── Dockerfile
├── docker-compose.yml
├── nest-cli.json
├── proto // proto files
├── src
│   ├── posts // User posts resource
│   ├── proto // TypeScript SDK generated from proto file
│   ├── users // Users resource
│   │   ├── users.controller.ts
│   │   ├── users.module.ts
│   │   ├── users.service.ts
│   ├── app.module.ts
│   ├── main.ts
├── tsconfig.json
Enter fullscreen mode Exit fullscreen mode

Installation and Setup


  • docker & docker compose cli
  • Node.js v18

Please note that I developed this project using an M1 Mac.

To get started, clone repository.

git clone
Enter fullscreen mode Exit fullscreen mode

Next, install the node_modules

npm ci
Enter fullscreen mode Exit fullscreen mode

Generate TypeScript SDK from protobuf files

npm run proto:gen
Enter fullscreen mode Exit fullscreen mode

Finally bring up docker container.

docker compose app
Enter fullscreen mode Exit fullscreen mode

Try accessing gRPC via http:localhost/5000.


With this repository, you now have the ability to create new gRPC projects with NestJS using Buf. However, I'm concerned that the TypeScript SDK generated into src/proto may not be optimal. Please feel free to share any alternative options or ideas you may have regarding this.

Thank you for reading until the end.


Top comments (0)