# Protobuf Decoder

> Pawit Pornkitprasan's React web application for decoding Protocol Buffers data without the original .proto files, offered as a hosted page or run locally, with all decoding done in the browser. Pasted hex or base64 input, or an uploaded file, is split into a table of byte ranges, field numbers, wire types and contents: varints are shown as unsigned, two's-complement and zigzag integers, fixed32 and fixed64 values as integers and floating-point numbers, and length-delimited fields as nested messages when they parse cleanly, otherwise as UTF-8 strings or bytes. It skips a leading gRPC message header and can optionally split a stream of varint length-delimited messages.

- Type: Tool
- Targets: Protocol
- Category: Protocol analysis tools
- Relationship: Foundation tool
- Sources reviewed: 2026-10-27
- Added to the catalog: 2026-11-03
- Original resource: <https://github.com/pawitp/protobuf-decoder>
- Primary source: <https://github.com/pawitp/protobuf-decoder/blob/7d0b5edecbbbd38c1230ba9301359cc27e373c23/README.md>
- Catalog page: <https://awesomerea.org/resources/pawitp-protobuf-decoder/>
- Record JSON: <https://awesomerea.org/resources/pawitp-protobuf-decoder/record.json>
- Chinese version: [简体中文](https://awesomerea.org/zh/resources/pawitp-protobuf-decoder/index.md)

## Requirements & limits

- No releases or tags; package.json declares a private 0.1.0 package. The reviewed master commit of 2026-10-17 is a Dependabot dependency bump, and the most recent functional changes added file upload in 2024 and varint length-delimited input in 2025. CircleCI runs the Vitest unit tests on Node 20.11 and uploads coverage to Codecov.
- The hosted page at protobuf-decoder.netlify.app needs only a browser, and the app states that all decoding is done locally in JavaScript. Running it locally needs Node.js and npm: npm install, then npm start for the Vite development server, or npm run build for a static build.
- Decoding is schema-less and heuristic: field names and declared types are not recovered, each length-delimited field is guessed to be a nested message, string or bytes, the source marks repeated-field support as a TODO, and the group wire types are not handled, so decoding stops there and the remaining input is shown as left-over bytes. It only decodes; there is no editing, re-encoding or proxy integration, and users supply their own captured messages.
- MIT (Copyright 2019 Pawit Pornkitprasan).

## Primary sources

1. <https://github.com/pawitp/protobuf-decoder/blob/7d0b5edecbbbd38c1230ba9301359cc27e373c23/README.md>
2. <https://github.com/pawitp/protobuf-decoder/blob/7d0b5edecbbbd38c1230ba9301359cc27e373c23/src/App.jsx>
3. <https://github.com/pawitp/protobuf-decoder/blob/7d0b5edecbbbd38c1230ba9301359cc27e373c23/src/protobufDecoder.js>
4. <https://github.com/pawitp/protobuf-decoder/blob/7d0b5edecbbbd38c1230ba9301359cc27e373c23/src/protobufPartDecoder.jsx>
5. <https://github.com/pawitp/protobuf-decoder/blob/7d0b5edecbbbd38c1230ba9301359cc27e373c23/src/ProtobufPart.jsx>
6. <https://github.com/pawitp/protobuf-decoder/blob/7d0b5edecbbbd38c1230ba9301359cc27e373c23/package.json>
7. <https://github.com/pawitp/protobuf-decoder/blob/7d0b5edecbbbd38c1230ba9301359cc27e373c23/.circleci/config.yml>
8. <https://github.com/pawitp/protobuf-decoder/blob/7d0b5edecbbbd38c1230ba9301359cc27e373c23/LICENSE>
9. <https://protobuf-decoder.netlify.app/>

## More in Protocols

- [gr-lora](https://awesomerea.org/resources/gr-lora/index.md) · Tool
- [termshark](https://awesomerea.org/resources/termshark/index.md) · Tool
- [SigDigger](https://awesomerea.org/resources/sigdigger/index.md) · Tool
- [grpc-tools](https://awesomerea.org/resources/grpc-tools/index.md) · Tool
- [Holley EFI Parser](https://awesomerea.org/resources/holley-efi-parser/index.md) · Tool
- [CAN Bus Parser](https://awesomerea.org/resources/vanmoof-can-bus-parser/index.md) · Tool

## About this entry

The description was reviewed against primary sources.
Original editorial content: MIT. Linked projects, papers and assets retain their own rights and licenses.
