93

Is it a good choice to use Google Protocol Buffers in JavaScript or is it better to do it with JSON?

Also it'd be great if someone can give me a simple example about Protocol Buffers implementation in JavaScript. The documentation on the Google's site is scarce.

1

5 Answers 5

82

[edit] Google's open source implementation of protocol buffers is available on GitHub


The official protobuf project support only Java, C++, and Python. Not JavaScript.

According to the Wiki of the project, there are three projects porting protocol buffers to JavaScript.

Protobuf.js is up to date. protobuf-js has not been updated for two years, so I would favor Protobuf.js.

The question still is "Why?": protobuf may be a bit smaller, especially when a lot of numeric values are transferred, but JSON is simply the more common protocol in the JS space and probably better supported and easier to integrate into other tools.

Sign up to request clarification or add additional context in comments.

13 Comments

No doubt about JSON being more fit to most cases. However in my case the message sender is not under my control, and it serializes to protobuf messages, thus we need to parse the messages from javascript.
@Why: Because you write a message and service methods as proto and you get skeleton of the code for free? Serialization and deserialization on both client/server side.
Why: the same reason to use protobuf in any other situation. Don't forget that browsers now have WebSocket. Also, desktop applications can be written in JS for Windows 8, and applications, including servers, in Node.
Code Climate has a great writeup on the benefits of protobuf over JSON
If your system's API already has other binary/protobuf clients, such as Android or iOS devices, then it's more natural to use the existing proto API for a Javascript web client than to build a second copy of the API that offers JSON, just to support a web page.
|
44

Update (28/7/2016): Release 3.0.0 was published - supporting Javascript and other languages as well - in addition to some other features.

Google have recently added alpha support for JS to protobufs: https://github.com/google/protobuf/releases/tag/v3.0.0-beta-2

Usage:

protoc -I=$SRC_DIR --js_out=$DST_DIR $SRC_DIR/addressbook.proto

Screenshots from the release documentation:

enter image description here

enter image description here

1 Comment

While running above command, I am getting "Missing input file" error.
6

Protobuf 3.0.0 is out: https://github.com/google/protobuf/releases/tag/v3.0.0

And it support JavaScript natively. The basic information is in the announcement.

We are going to look into it soon.

Comments

2

2023 Update. The JS implementation had been introduces and branched out of the main protoc app. Now you can install it using

npm i grpc-tools

Then use node node_modules/grpc-tools/bin/protoc.js the arguments are the same as for usual protoc. For example:

node node_modules/grpc-tools/bin/protoc.js --js_out=import_style=commonjs,binary:./dst --proto_path=./proto/ simple.proto

To use it with the usual require also install

npm i google-protobuf

Then you can simply require the resulting generated file and use it.

2 Comments

but grpc-tools is for GRPC, i think...
GRPC is using Protocol Buffers under the hood. Likely there is some overhead but it works.
-1

Try Protostuff!

I had a bit of hard time configuring but I'm sure that was more of my issue. You can serialize/deserialize a protobuff/protostuff message to/from JSON. I'm at the early stages of using this but it looks promising so far.

6 Comments

Curious. Why was this voted down (I have no opinion about Protostuff)?
@Pimin probably because protostuff is Java and the question is JavaScript?
@PiminKonstantinKefaloukos person is searching protobuf implementation on javascript
Building Javascript objects for GWT using Protostuff: code.google.com/p/protostuff/wiki/GwtJsonOverlays . Totally on topic.
@fuzzyanalysis Fair although I would then call this answer incomplete rather than simply wrong. Since you can't expect every visitor to know how to compile Java to JS or to even know GWT exists, you'd expect at least a pointer to GWT or ideally a working example of getting it working in GWT - since that could be quite the adventure.
|

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.