Protocol Buffers · Schema

Protocol Buffers File Descriptor

Schema describing the structure of a FileDescriptorProto, which is the protobuf descriptor representation of a .proto file. File descriptors contain metadata about messages, enums, services, and extensions defined in a proto file.

Data FormatgRPCProtobufProtocol BuffersSerialization

Properties

Name Type Description
name string The file name relative to the root of the source tree (e.g., 'google/protobuf/descriptor.proto').
package string The protobuf package name (e.g., 'google.protobuf').
dependency array Names of files imported by this file.
publicDependency array Indexes (into the dependency list) of public imports.
weakDependency array Indexes (into the dependency list) of weak imports.
messageType array All top-level message definitions in this file.
enumType array All top-level enum definitions in this file.
service array All service definitions in this file.
extension array All top-level extension definitions in this file.
options object
syntax string The syntax of the proto file (e.g., 'proto2', 'proto3').
edition string The edition of the proto file when using editions syntax (e.g., '2023').
sourceCodeInfo object Source code information for documentation and source mapping.
View JSON Schema on GitHub

JSON Schema

protocol-buffers-descriptor.json Raw ↑
{
  "$id": "protobuf-descriptor.json",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "Protocol Buffers File Descriptor",
  "description": "Schema describing the structure of a FileDescriptorProto, which is the protobuf descriptor representation of a .proto file. File descriptors contain metadata about messages, enums, services, and extensions defined in a proto file.",
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "description": "The file name relative to the root of the source tree (e.g., 'google/protobuf/descriptor.proto')."
    },
    "package": {
      "type": "string",
      "description": "The protobuf package name (e.g., 'google.protobuf')."
    },
    "dependency": {
      "type": "array",
      "description": "Names of files imported by this file.",
      "items": {
        "type": "string"
      }
    },
    "publicDependency": {
      "type": "array",
      "description": "Indexes (into the dependency list) of public imports.",
      "items": {
        "type": "integer"
      }
    },
    "weakDependency": {
      "type": "array",
      "description": "Indexes (into the dependency list) of weak imports.",
      "items": {
        "type": "integer"
      }
    },
    "messageType": {
      "type": "array",
      "description": "All top-level message definitions in this file.",
      "items": {
        "$ref": "#/definitions/DescriptorProto"
      }
    },
    "enumType": {
      "type": "array",
      "description": "All top-level enum definitions in this file.",
      "items": {
        "$ref": "#/definitions/EnumDescriptorProto"
      }
    },
    "service": {
      "type": "array",
      "description": "All service definitions in this file.",
      "items": {
        "$ref": "#/definitions/ServiceDescriptorProto"
      }
    },
    "extension": {
      "type": "array",
      "description": "All top-level extension definitions in this file.",
      "items": {
        "$ref": "#/definitions/FieldDescriptorProto"
      }
    },
    "options": {
      "$ref": "#/definitions/FileOptions"
    },
    "syntax": {
      "type": "string",
      "description": "The syntax of the proto file (e.g., 'proto2', 'proto3').",
      "enum": ["proto2", "proto3"],
      "default": "proto2"
    },
    "edition": {
      "type": "string",
      "description": "The edition of the proto file when using editions syntax (e.g., '2023')."
    },
    "sourceCodeInfo": {
      "type": "object",
      "description": "Source code information for documentation and source mapping.",
      "properties": {
        "location": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "path": {
                "type": "array",
                "items": { "type": "integer" }
              },
              "span": {
                "type": "array",
                "items": { "type": "integer" }
              },
              "leadingComments": { "type": "string" },
              "trailingComments": { "type": "string" },
              "leadingDetachedComments": {
                "type": "array",
                "items": { "type": "string" }
              }
            }
          }
        }
      }
    }
  },
  "definitions": {
    "DescriptorProto": {
      "type": "object",
      "description": "Describes a message type (MessageDescriptorProto).",
      "properties": {
        "name": {
          "type": "string",
          "description": "The message type name."
        },
        "field": {
          "type": "array",
          "description": "Fields defined in this message.",
          "items": {
            "$ref": "#/definitions/FieldDescriptorProto"
          }
        },
        "extension": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/FieldDescriptorProto"
          }
        },
        "nestedType": {
          "type": "array",
          "description": "Nested message type definitions.",
          "items": {
            "$ref": "#/definitions/DescriptorProto"
          }
        },
        "enumType": {
          "type": "array",
          "description": "Enum types defined within this message.",
          "items": {
            "$ref": "#/definitions/EnumDescriptorProto"
          }
        },
        "oneofDecl": {
          "type": "array",
          "description": "Oneof declarations in this message.",
          "items": {
            "$ref": "#/definitions/OneofDescriptorProto"
          }
        },
        "reservedRange": {
          "type": "array",
          "description": "Reserved field number ranges.",
          "items": {
            "type": "object",
            "properties": {
              "start": { "type": "integer" },
              "end": { "type": "integer" }
            }
          }
        },
        "reservedName": {
          "type": "array",
          "description": "Reserved field names.",
          "items": { "type": "string" }
        }
      }
    },
    "FieldDescriptorProto": {
      "type": "object",
      "description": "Describes a field within a message.",
      "properties": {
        "name": {
          "type": "string",
          "description": "The field name."
        },
        "number": {
          "type": "integer",
          "description": "The field number (tag) used in the binary wire format."
        },
        "label": {
          "type": "string",
          "description": "The field label (required, optional, repeated).",
          "enum": ["LABEL_OPTIONAL", "LABEL_REQUIRED", "LABEL_REPEATED"]
        },
        "type": {
          "type": "string",
          "description": "The field type.",
          "enum": [
            "TYPE_DOUBLE", "TYPE_FLOAT", "TYPE_INT64", "TYPE_UINT64",
            "TYPE_INT32", "TYPE_FIXED64", "TYPE_FIXED32", "TYPE_BOOL",
            "TYPE_STRING", "TYPE_GROUP", "TYPE_MESSAGE", "TYPE_BYTES",
            "TYPE_UINT32", "TYPE_ENUM", "TYPE_SFIXED32", "TYPE_SFIXED64",
            "TYPE_SINT32", "TYPE_SINT64"
          ]
        },
        "typeName": {
          "type": "string",
          "description": "For message and enum types, the fully-qualified type name."
        },
        "extendee": {
          "type": "string",
          "description": "For extensions, the fully-qualified name of the extended message."
        },
        "defaultValue": {
          "type": "string",
          "description": "The default value for this field as a string representation."
        },
        "oneofIndex": {
          "type": "integer",
          "description": "If set, index into the containing message's oneof_decl list."
        },
        "jsonName": {
          "type": "string",
          "description": "JSON name of this field, following lowerCamelCase convention."
        },
        "proto3Optional": {
          "type": "boolean",
          "description": "If true, this is a proto3 optional field."
        }
      }
    },
    "EnumDescriptorProto": {
      "type": "object",
      "description": "Describes an enum type.",
      "properties": {
        "name": {
          "type": "string",
          "description": "The enum type name."
        },
        "value": {
          "type": "array",
          "description": "Enum value definitions.",
          "items": {
            "$ref": "#/definitions/EnumValueDescriptorProto"
          }
        },
        "reservedRange": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "start": { "type": "integer" },
              "end": { "type": "integer" }
            }
          }
        },
        "reservedName": {
          "type": "array",
          "items": { "type": "string" }
        }
      }
    },
    "EnumValueDescriptorProto": {
      "type": "object",
      "description": "Describes an individual enum value.",
      "properties": {
        "name": {
          "type": "string",
          "description": "The enum value name."
        },
        "number": {
          "type": "integer",
          "description": "The numeric value assigned to this enum entry."
        }
      }
    },
    "ServiceDescriptorProto": {
      "type": "object",
      "description": "Describes a service, typically used with gRPC.",
      "properties": {
        "name": {
          "type": "string",
          "description": "The service name."
        },
        "method": {
          "type": "array",
          "description": "RPC methods defined in this service.",
          "items": {
            "$ref": "#/definitions/MethodDescriptorProto"
          }
        }
      }
    },
    "MethodDescriptorProto": {
      "type": "object",
      "description": "Describes an RPC method within a service.",
      "properties": {
        "name": {
          "type": "string",
          "description": "The method name."
        },
        "inputType": {
          "type": "string",
          "description": "Fully-qualified input message type name."
        },
        "outputType": {
          "type": "string",
          "description": "Fully-qualified output message type name."
        },
        "clientStreaming": {
          "type": "boolean",
          "description": "If true, the client sends a stream of messages.",
          "default": false
        },
        "serverStreaming": {
          "type": "boolean",
          "description": "If true, the server sends a stream of messages.",
          "default": false
        }
      }
    },
    "OneofDescriptorProto": {
      "type": "object",
      "description": "Describes a oneof definition.",
      "properties": {
        "name": {
          "type": "string",
          "description": "The oneof name."
        }
      }
    },
    "FileOptions": {
      "type": "object",
      "description": "Options defined at the file level in a .proto file.",
      "properties": {
        "javaPackage": {
          "type": "string",
          "description": "Java package name for generated Java code."
        },
        "javaOuterClassname": {
          "type": "string",
          "description": "Java outer class name for generated code."
        },
        "javaMultipleFiles": {
          "type": "boolean",
          "description": "If true, generate a separate .java file for each top-level message."
        },
        "goPackage": {
          "type": "string",
          "description": "Go package import path for generated Go code."
        },
        "ccGenericServices": {
          "type": "boolean",
          "description": "If true, generate generic service code for C++."
        },
        "javaGenericServices": {
          "type": "boolean",
          "description": "If true, generate generic service code for Java."
        },
        "pyGenericServices": {
          "type": "boolean",
          "description": "If true, generate generic service code for Python."
        },
        "optimizeFor": {
          "type": "string",
          "description": "Optimization mode for generated code.",
          "enum": ["SPEED", "CODE_SIZE", "LITE_RUNTIME"]
        },
        "ccEnableArenas": {
          "type": "boolean",
          "description": "If true, enable arena allocation for C++."
        },
        "objcClassPrefix": {
          "type": "string",
          "description": "Prefix for generated Objective-C classes."
        },
        "csharpNamespace": {
          "type": "string",
          "description": "Namespace for generated C# code."
        },
        "swiftPrefix": {
          "type": "string",
          "description": "Prefix for generated Swift classes."
        },
        "phpClassPrefix": {
          "type": "string",
          "description": "Prefix for generated PHP classes."
        },
        "phpNamespace": {
          "type": "string",
          "description": "Namespace for generated PHP code."
        },
        "phpMetadataNamespace": {
          "type": "string",
          "description": "Namespace for generated PHP metadata classes."
        },
        "rubyPackage": {
          "type": "string",
          "description": "Package name for generated Ruby code."
        }
      }
    }
  },
  "additionalProperties": false
}