<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/better-than-json-d2je9kyed" -->

---
title: Better than JSON | daily.dev
description: Protocol Buffers (Protobuf) offers significant advantages over JSON for API development through strong typing, binary serialization, and automatic code...
canonical: https://daily.dev/posts/better-than-json-d2je9kyed
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: Better than JSON | daily.dev
og:description: Protocol Buffers (Protobuf) offers significant advantages over JSON for API development through strong typing, binary serialization, and automatic code...
og:url: https://daily.dev/posts/better-than-json-d2je9kyed
og:image: https://api.daily.dev/og/posts/d2jE9kyEd.png
og:image:alt: Better than JSON
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.

# Better than JSON

**[Hacker News](https://daily.dev/sources/hn)** · 8 min read · 250 upvotes · 22 comments

## Summary

Protocol Buffers (Protobuf) offers significant advantages over JSON for API development through strong typing, binary serialization, and automatic code generation. While JSON remains popular for its human readability and flexibility, Protobuf provides 3x smaller payload sizes, type safety across multiple languages, and eliminates manual validation errors. The article demonstrates practical implementation using Dart and the Shelf framework, showing how Protobuf can be used independently of gRPC in traditional HTTP APIs. The main trade-off is reduced human readability of binary data, requiring schema files and specialized tooling for debugging.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://aloisdeniel.com/blog/better-than-json>

## Community discussion

Top comments from developers on daily.dev.

**@sqlmancer** · 22 upvotes

> <humor>
> XML is still the best
> </humor>

**@myfunc** · 16 upvotes

> Proto isn't a format. It's a protocol.
>
> But we use proto for data transfer In our Node.js / GoLang solution, but protobuff has no good support.
> - VS Code has extension for proto from unknown publisher (3 years ago last update) The most popular one https://github.com/zxh0/vscode-proto3
> - Client and server generators for Go and Node.js have many bugs we should find workaround for. For example GoLang generator process zero-value in "enum" like undefined, even if it's value '0', not null.

**@akkitto** · 8 upvotes

> JSON is extremely simple to start with, fast and reliably. Even if Protobuf fits in certain scenarios, I would probably start out simple with JSON and perhaps switch later, if the project requires fast growth.

**@hemna** · 8 upvotes

> Dart is the example language?  json is omnipresent because it's available used in a wide range of languages.   protobuf isn't.

**@peterwalkley** · 7 upvotes

> "Better" is highly dependent on your use case. Most of us are not operating at google scale, so the measurable benefit of the smaller payload is negligible.  Instant readability of the JSON payload in logs is invaluable when it comes to debugging - without needing to unmarshal a binary payload in your code as you would with protobuf.

## Similar posts on daily.dev

- [Protocol Buffers Over HTTP: You Don’t Need gRPC to Use Protobuf](https://daily.dev/posts/protocol-buffers-over-http-you-don-t-need-grpc-to-use-protobuf-fttmpowcn) · Medium · 28 upvotes · 0 comments

---

Tags: [#webdev](https://daily.dev/tags/webdev), [#backend](https://daily.dev/tags/backend), [#dart](https://daily.dev/tags/dart)

[View this post on daily.dev](https://daily.dev/posts/better-than-json-d2je9kyed)

```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":"Better than JSON","url":"https://daily.dev/posts/better-than-json-d2je9kyed","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/better-than-json-d2je9kyed"},"datePublished":"2025-12-02T04:20:45.414Z","dateModified":"2025-12-02T04:21:07.723Z","description":"Protocol Buffers (Protobuf) offers significant advantages over JSON for API development through strong typing, binary serialization, and automatic code...","image":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/b6d958cd6099929af77c0d9b78207573?_a=AQAEulh","thumbnailUrl":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/b6d958cd6099929af77c0d9b78207573?_a=AQAEulh","isAccessibleForFree":true,"articleSection":"Hacker News","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":"Hacker News","logo":"https://media.daily.dev/image/upload/t_logo,f_auto/v1/logos/hn","url":"https://daily.dev/sources/hn"},"commentCount":22,"discussionUrl":"https://daily.dev/posts/better-than-json-d2je9kyed","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":250},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":22}],"keywords":"webdev,backend,dart","timeRequired":"PT8M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"Hacker News","item":"https://daily.dev/sources/hn"},{"@type":"ListItem","position":3,"name":"Better than JSON"}]}
{"@context":"https://schema.org","@type":"WebPage","@id":"https://daily.dev/posts/better-than-json-d2je9kyed","comment":[{"@type":"Comment","text":"&lt;humor&gt;\nXML is still the best\n&lt;/humor&gt;","datePublished":"2025-12-08T17:20:03.312Z","url":"https://daily.dev/posts/d2jE9kyEd#c-9sGNDHs1h","author":{"@type":"Person","name":"David Cram","url":"https://daily.dev/sqlmancer","image":"https://lh3.googleusercontent.com/a/AGNmyxYA76uDRQagdzZtTrLKWf6AaIDhJCjl8DMKfyvN=s96-c"},"interactionStatistic":{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":22}},{"@type":"Comment","text":"Proto isn’t a format. It’s a protocol.\nBut we use proto for data transfer In our Node.js / GoLang solution, but protobuff has no good support.\n\nVS Code has extension for proto from unknown publisher (3 years ago last update) The most popular one https://github.com/zxh0/vscode-proto3\nClient and server generators for Go and Node.js have many bugs we should find workaround for. For example GoLang generator process zero-value in “enum” like undefined, even if it’s value ‘0’, not null.","datePublished":"2025-12-08T06:43:48.314Z","url":"https://daily.dev/posts/d2jE9kyEd#c-VGlrkSKfQ","author":{"@type":"Person","name":"Denys Myronov","url":"https://daily.dev/myfunc","image":"https://lh3.googleusercontent.com/a/ACg8ocJGs_ifNsWYjLxPd0u_xjb9cvMuCgotYliBU7zsl6wS9QQ=s96-c"},"interactionStatistic":{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":16}},{"@type":"Comment","text":"JSON is extremely simple to start with, fast and reliably. Even if Protobuf fits in certain scenarios, I would probably start out simple with JSON and perhaps switch later, if the project requires fast growth.","datePublished":"2025-12-09T00:34:12.326Z","url":"https://daily.dev/posts/d2jE9kyEd#c-U9XRJuRgb","author":{"@type":"Person","name":"Daniel","url":"https://daily.dev/akkitto","image":"https://media.daily.dev/image/upload/s--FtwJqX4c--/f_auto/v1754900041/avatars/avatar_29TCpY2hJR72V3BlxPXzX?_a=BAMClqZW0"},"interactionStatistic":{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":8}},{"@type":"Comment","text":"Dart is the example language?  json is omnipresent because it’s available used in a wide range of languages.   protobuf isn’t.","datePublished":"2025-12-08T14:57:47.974Z","url":"https://daily.dev/posts/d2jE9kyEd#c-vJrL75ms0","author":{"@type":"Person","name":"Chewbacca","url":"https://daily.dev/hemna","image":"https://avatars.githubusercontent.com/u/672207?v=4"},"interactionStatistic":{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":8}},{"@type":"Comment","text":"“Better” is highly dependent on your use case. Most of us are not operating at google scale, so the measurable benefit of the smaller payload is negligible.  Instant readability of the JSON payload in logs is invaluable when it comes to debugging - without needing to unmarshal a binary payload in your code as you would with protobuf.","datePublished":"2025-12-11T20:16:06.699Z","url":"https://daily.dev/posts/d2jE9kyEd#c-0mJYnCpqu","author":{"@type":"Person","name":"Peter Walkley","url":"https://daily.dev/peterwalkley","image":"https://avatars.githubusercontent.com/u/3225927?v=4"},"interactionStatistic":{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":7}}]}
```

