Protobuf Decoder (No Schema Needed)
Decode protobuf data with no schema file. The wire format carries field numbers and types, so the whole structure is recoverable even without the original definitions.
Intended for your own single-player save files. Editing saves in multiplayer or online games breaks their terms of service and can get your account banned. Always keep a backup of the original file before you change anything.
No .proto schema is needed. The protobuf wire format stores a field number and a type for every value, so the structure is fully recoverable — but field names are not in the encoded data, so they appear as field_1, field_2 and so on. Length-delimited values are ambiguous by design: this shows them as text when they decode as valid UTF-8, and tries them as a nested message otherwise.
Frequently Asked Questions
Can protobuf really be decoded without the .proto file?
The structure, yes. Every value on the wire is tagged with a field number and a wire type, so nesting, types and values all come out. What is missing is the field names, since those exist only in the schema — you get field_1 and field_2 rather than playerName and gold.
Why do some fields show as text and others as a nested message?
Because length-delimited values are ambiguous by design: the same wire type covers strings, byte arrays and nested messages. The decoder shows the bytes as text when they are valid UTF-8, and otherwise tries parsing them as a nested message.
How do I recognise protobuf data?
There is no header, so you cannot know for certain in advance. A practical test is simply to try decoding: real protobuf parses cleanly to the last byte, while anything else fails partway through with a truncation error.
What are wire types?
Protobuf has four in common use: varint for integers and booleans, 64-bit and 32-bit for fixed-width numbers and floats, and length-delimited for strings, bytes and nested messages. Each field on the wire carries its wire type, which is why schemaless decoding works at all.