News for hackers. Stuff that matters.
Re:Better Than JSON by codewritero on Monday December 01, 2025 @02:23PM (#46111827)
I love to see people advocating for better protocols and standards but seeing the title I expected the author to present something which would be better in the sense of supporting the same or more use cases with better efficiency and/or ergonomics and I don't think that protobuf does that.

Protobuf has advantages, but is missing support for a tons of use cases where JSON thrives due to the strict schema requirement.

A much stronger argument could be made for CBOR as a replacement for JSON for most use cases. CBOR has the same schema flexibility as JSON but has a more concise encoding.

Re:Better Than JSON by port11 on Monday December 01, 2025 @02:27PM (#46111900)
I think the strict schema of Protobuf might be one of the major improvements, as most APIs don't publish a JSON schema? I've always had to use ajv or superstruct to make sure payloads match a schema, Protobuf doesn't need that (supposedly).
Re:Better Than JSON by thayne on Tuesday December 02, 2025 @04:04AM (#46119165)
One limitation of protobuf 3 schemas, is they doen't allow required fields. That makes it easier to remove the field in a later version in a backwards compatible way, but sometimes fields really are required, and the message doesn't make any sense without them. Ideally, IMO, if the message is missing those fields, it would fail to parse successfully. But with protobuf, you instead get a default value, which could potentially cause subtle bugs.
Re:Better Than JSON by port11 on Wednesday December 03, 2025 @12:01PM (#46136932)
Okay, this is a definite issue, you're still stuck validating inputs/outputs.
Re:Better Than JSON by youngtaff on Monday December 01, 2025 @02:44PM (#46112134)
We need browsers to support CBOR APIs… and it shouldn’t be that hard as they all have internal implementations now
Re:Better Than JSON by deathanatos on Monday December 01, 2025 @08:07PM (#46115990)
I suppose I should publish this, but a WASM module, in Rust, which just binds [ciborium] into JS only took me ~100 LoC. (And by this I mean that it effectively provides a "cbor_load" function to JS, which returns JS objects; I mention this just b/c I think some people have the impression that WASM can't interact with JS except by serializing stuff to/from bytestrings and/or JSON, which isn't really the whole story now with refs.)

But yes, a native implementation would save me the trouble!

[ciborium]: a Rust CBOR library; https://docs.rs/ciborium/latest/ciborium/