Paste your Protocol Buffers definition to review detected fields and RPC signatures. The output is a structural overview, not compiled client code.
Runs locally in your browserPaste a Protocol Buffers definition and press Inspect locally: the page lists what it can read from the text — the syntax line, the package, every message with its fields in file order, enums with their values, oneof groups, and gRPC services with their methods, streaming calls marked as such. A structural JSON example is built for the first message in the file. Nothing is compiled and nothing is uploaded: no protoc, no gRPC call, no server round trip.
The scanner reads proto2 and proto3 text the same way, by pattern, so you get what is written rather than what protoc would make of it. With the browser network panel open, inspecting a definition produces no request at all; the summary, the counters and the table are filled inside the tab.
Values are typed the way proto3 JSON encodes them: a string field gets "example", int64 and uint64 become the string "0", bytes becomes "base64-data", bool becomes true, and a repeated field is a one-element array. A map field turns into an object with a single placeholder key, and a message field is expanded into its own nested object.
An enum field takes the first value declared in that enum, so a Currency field becomes "CURRENCY_UNSPECIFIED" instead of a number. A message that refers to itself is cut off at an empty object, which keeps the example finite, and only the first message in the file gets an example — put the payload type you care about first if you want it.
When a field type is not declared in the pasted text — google.protobuf.Timestamp, or a message from an import — the example shows an empty object and the panel adds a note such as “1 field type(s) come from imported or external definitions”. The type name itself is still listed in the summary and in the table.
The tool never fetches that imported file: an import line changes nothing in the output and no request leaves the page. Treat the example as a structural sketch to check against the real schema rather than a payload you can post to a server as it stands.
Comments are skipped, both // and /* */, and characters inside a string literal are not parsed, so a default value such as [default = "{"] is read correctly. A nested message becomes its own entry under a dotted name, and the parent message lists only the fields declared directly inside it.
Some lines are ignored on purpose: reserved statements, extension ranges, file options such as option java_package = "com.acme"; and import statements. They appear in neither the summary nor the table nor the counters — the output describes messages, enums, fields and RPCs only.
Text without a message, enum or service declaration stops with “No message, enum or service declaration was found in this .proto text.”, and an unclosed block stops with the block name, as in “Unclosed message block: User”. Pattern reading also means no protoc-level validation: a duplicated field number, tag 0 and a tag in the reserved 19000–19999 range are all listed without complaint.
The output lists everything it finds, so it grows with the file: 305 KB containing 600 messages produced 12,200 rows in about a third of a second, and 1.5 MB with 3,000 messages and 60,200 rows finished in under two seconds in Chrome. An enum row in the table prints its first 12 values and then an ellipsis, while the summary prints them all.