{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://catalog.lintel.tools/schemas/schemastore/buf-yaml/latest.json",
  "title": "buf.yaml",
  "description": "buf.yaml is used to define a module. It's the primary configuration file, and is responsible for the module's name, dependencies, and lint and breaking configuration.",
  "x-lintel": {
    "source": "https://www.schemastore.org/buf.json",
    "sourceSha256": "af0a5c159a2b0c48da69370806766ed3f389daae774cbe21d86a2fed06bfc620",
    "fileMatch": [
      "buf.yaml"
    ],
    "parsers": [
      "yaml"
    ]
  },
  "type": "object",
  "properties": {
    "version": {
      "description": "The version key is required, and defines the current configuration version. The accepted values are `v2`, `v1`, and `v1beta1`.",
      "type": "string",
      "enum": [
        "v2",
        "v1",
        "v1beta1"
      ]
    }
  },
  "required": [
    "version"
  ],
  "else": {
    "$comment": "v2 properties",
    "properties": {
      "modules": {
        "$comment": "https://buf.build/docs/configuration/v2/buf-yaml#modules",
        "description": "Required. Defines the list of modules that will be built together in this workspace. Any dependencies that the files have on each other are automatically taken into account when building and shouldn't be declared in the deps section.",
        "type": "array",
        "items": {
          "type": "object",
          "properties": {
            "path": {
              "$comment": "https://buf.build/docs/configuration/v2/buf-yaml#path",
              "description": "Required. The path to a directory containing Protobuf files, which must be defined relative to the workspace root (the directory that contains the buf.yaml file). All path values must point to directories within the workspace.",
              "type": "string"
            },
            "name": {
              "$comment": "https://buf.build/docs/configuration/v2/buf-yaml#name",
              "description": "Optional. A Buf Schema Registry (BSR) path that uniquely identifies this directory. The name must be a valid module name and it defines the BSR repository that contains the commit and label history and generated artifacts for the Protobuf files in the directory.",
              "type": "string"
            },
            "includes": {
              "$comment": "https://buf.build/docs/configuration/v2/buf-yaml#includes",
              "description": "Optional. Lists directories within this directory to include in Protobuf file discovery. Only directories added to this list are included in Buf operations.",
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "excludes": {
              "$comment": "https://buf.build/docs/configuration/v2/buf-yaml#excludes",
              "description": "Optional. Lists directories within this directory to exclude from Protobuf file discovery. Any directories added to this list are completely skipped and excluded from Buf operations. We don't recommend using this option, but in some situations it's unavoidable.",
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "lint": {
              "$ref": "#/$defs/v2-lint"
            },
            "breaking": {
              "$ref": "#/$defs/v2-breaking"
            }
          },
          "additionalProperties": false
        }
      },
      "deps": {
        "$comment": "https://buf.build/docs/configuration/v2/buf-yaml#deps",
        "description": "Optional. Declares one or more modules that your workspace depends on. Each deps entry must be a module name, which is directly associated with a BSR repository, and can also include a specific reference, which is either a commit ID or a label. Dependencies are shared between all modules in the set. Buf tooling already accounts for dependencies between the modules that are part of the set, so they shouldn't be declared here.",
        "type": "array",
        "items": {
          "type": "string"
        }
      },
      "lint": {
        "$ref": "#/$defs/v2-lint"
      },
      "breaking": {
        "$ref": "#/$defs/v2-breaking"
      }
    }
  },
  "$comment": "https://buf.build/docs/configuration/v2/buf-yaml",
  "$defs": {
    "lint-rule": {
      "type": "string",
      "description": "<https://buf.build/docs/lint/rules>",
      "examples": [
        "STANDARD",
        "DEFAULT",
        "BASIC",
        "MINIMAL",
        "COMMENTS",
        "UNARY_RPC",
        "DIRECTORY_SAME_PACKAGE",
        "PACKAGE_DEFINED",
        "PACKAGE_DIRECTORY_MATCH",
        "PACKAGE_SAME_DIRECTORY",
        "ENUM_PASCAL_CASE",
        "ENUM_VALUE_UPPER_SNAKE_CASE",
        "FIELD_LOWER_SNAKE_CASE",
        "MESSAGE_PASCAL_CASE",
        "ONEOF_LOWER_SNAKE_CASE",
        "PACKAGE_LOWER_SNAKE_CASE",
        "RPC_PASCAL_CASE",
        "SERVICE_PASCAL_CASE",
        "PACKAGE_SAME_CSHARP_NAMESPACE",
        "PACKAGE_SAME_GO_PACKAGE",
        "PACKAGE_SAME_JAVA_MULTIPLE_FILES",
        "PACKAGE_SAME_JAVA_PACKAGE",
        "PACKAGE_SAME_PHP_NAMESPACE",
        "PACKAGE_SAME_RUBY_PACKAGE",
        "PACKAGE_SAME_SWIFT_PREFIX",
        "ENUM_FIRST_VALUE_ZERO",
        "ENUM_NO_ALLOW_ALIAS",
        "IMPORT_NO_WEAK",
        "IMPORT_NO_PUBLIC",
        "IMPORT_USED",
        "ENUM_VALUE_PREFIX",
        "ENUM_ZERO_VALUE_SUFFIX",
        "FIELD_NOT_REQUIRED",
        "FILE_LOWER_SNAKE_CASE",
        "RPC_REQUEST_RESPONSE_UNIQUE",
        "RPC_REQUEST_STANDARD_NAME",
        "RPC_RESPONSE_STANDARD_NAME",
        "PACKAGE_VERSION_SUFFIX",
        "PROTOVALIDATE",
        "SERVICE_SUFFIX",
        "COMMENT_ENUM",
        "COMMENT_ENUM_VALUE",
        "COMMENT_FIELD",
        "COMMENT_MESSAGE",
        "COMMENT_ONEOF",
        "COMMENT_RPC",
        "COMMENT_SERVICE",
        "RPC_NO_CLIENT_STREAMING",
        "RPC_NO_SERVER_STREAMING",
        "PACKAGE_NO_IMPORT_CYCLE",
        "SYNTAX_SPECIFIED",
        "STABLE_PACKAGE_NO_IMPORT_UNSTABLE"
      ]
    },
    "breaking-rule": {
      "type": "string",
      "description": "<https://buf.build/docs/breaking/rules>",
      "examples": [
        "FILE",
        "PACKAGE",
        "WIRE_JSON",
        "WIRE",
        "ENUM_NO_DELETE",
        "ENUM_SAME_JSON_FORMAT",
        "ENUM_SAME_TYPE",
        "ENUM_VALUE_NO_DELETE",
        "ENUM_VALUE_NO_DELETE_UNLESS_NAME_RESERVED",
        "ENUM_VALUE_NO_DELETE_UNLESS_NUMBER_RESERVED",
        "ENUM_VALUE_SAME_NAME",
        "EXTENSION_MESSAGE_NO_DELETE",
        "EXTENSION_NO_DELETE",
        "FIELD_NO_DELETE",
        "FIELD_NO_DELETE_UNLESS_NAME_RESERVED",
        "FIELD_NO_DELETE_UNLESS_NUMBER_RESERVED",
        "FIELD_SAME_CARDINALITY",
        "FIELD_SAME_CPP_STRING_TYPE",
        "FIELD_SAME_CTYPE",
        "FIELD_SAME_DEFAULT",
        "FIELD_SAME_JAVA_UTF8_VALIDATION",
        "FIELD_SAME_JSON_NAME",
        "FIELD_SAME_JSTYPE",
        "FIELD_SAME_LABEL",
        "FIELD_SAME_NAME",
        "FIELD_SAME_ONEOF",
        "FIELD_SAME_TYPE",
        "FIELD_SAME_UTF8_VALIDATION",
        "FIELD_WIRE_COMPATIBLE_CARDINALITY",
        "FIELD_WIRE_COMPATIBLE_TYPE",
        "FIELD_WIRE_JSON_COMPATIBLE_CARDINALITY",
        "FIELD_WIRE_JSON_COMPATIBLE_TYPE",
        "FILE_NO_DELETE",
        "FILE_SAME_CC_ENABLE_ARENAS",
        "FILE_SAME_CC_GENERIC_SERVICES",
        "FILE_SAME_CSHARP_NAMESPACE",
        "FILE_SAME_GO_PACKAGE",
        "FILE_SAME_JAVA_GENERIC_SERVICES",
        "FILE_SAME_JAVA_MULTIPLE_FILES",
        "FILE_SAME_JAVA_OUTER_CLASSNAME",
        "FILE_SAME_JAVA_PACKAGE",
        "FILE_SAME_JAVA_STRING_CHECK_UTF8",
        "FILE_SAME_OBJC_CLASS_PREFIX",
        "FILE_SAME_OPTIMIZE_FOR",
        "FILE_SAME_PACKAGE",
        "FILE_SAME_PHP_CLASS_PREFIX",
        "FILE_SAME_PHP_GENERIC_SERVICES",
        "FILE_SAME_PHP_METADATA_NAMESPACE",
        "FILE_SAME_PHP_NAMESPACE",
        "FILE_SAME_PY_GENERIC_SERVICES",
        "FILE_SAME_RUBY_PACKAGE",
        "FILE_SAME_SWIFT_PREFIX",
        "FILE_SAME_SYNTAX",
        "MESSAGE_NO_DELETE",
        "MESSAGE_NO_REMOVE_STANDARD_DESCRIPTOR_ACCESSOR",
        "MESSAGE_SAME_JSON_FORMAT",
        "MESSAGE_SAME_MESSAGE_SET_WIRE_FORMAT",
        "MESSAGE_SAME_REQUIRED_FIELDS",
        "ONEOF_NO_DELETE",
        "PACKAGE_ENUM_NO_DELETE",
        "PACKAGE_EXTENSION_NO_DELETE",
        "PACKAGE_MESSAGE_NO_DELETE",
        "PACKAGE_NO_DELETE",
        "PACKAGE_SERVICE_NO_DELETE",
        "RESERVED_ENUM_NO_DELETE",
        "RESERVED_MESSAGE_NO_DELETE",
        "RPC_NO_DELETE",
        "RPC_SAME_CLIENT_STREAMING",
        "RPC_SAME_IDEMPOTENCY_LEVEL",
        "RPC_SAME_REQUEST_TYPE",
        "RPC_SAME_RESPONSE_TYPE",
        "RPC_SAME_SERVER_STREAMING",
        "SERVICE_NO_DELETE"
      ]
    },
    "lint-ignore-only": {
      "$comment": "https://buf.build/docs/configuration/v2/buf-yaml#ignore_only - All of the #/$defs/lint-rule values can be keys, plus custom lint rules",
      "description": "Optional. Allows directories or files to be excluded from specific lint categories or rules. As with ignore, the paths must be relative to buf.yaml.",
      "type": "object",
      "properties": {
        "STANDARD": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "DEFAULT": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "BASIC": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "MINIMAL": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "COMMENTS": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "UNARY_RPC": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "DIRECTORY_SAME_PACKAGE": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "PACKAGE_DEFINED": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "PACKAGE_DIRECTORY_MATCH": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "PACKAGE_SAME_DIRECTORY": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "ENUM_PASCAL_CASE": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "ENUM_VALUE_UPPER_SNAKE_CASE": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "FIELD_LOWER_SNAKE_CASE": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "MESSAGE_PASCAL_CASE": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "ONEOF_LOWER_SNAKE_CASE": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "PACKAGE_LOWER_SNAKE_CASE": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "RPC_PASCAL_CASE": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "SERVICE_PASCAL_CASE": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "PACKAGE_SAME_CSHARP_NAMESPACE": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "PACKAGE_SAME_GO_PACKAGE": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "PACKAGE_SAME_JAVA_MULTIPLE_FILES": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "PACKAGE_SAME_JAVA_PACKAGE": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "PACKAGE_SAME_PHP_NAMESPACE": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "PACKAGE_SAME_RUBY_PACKAGE": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "PACKAGE_SAME_SWIFT_PREFIX": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "ENUM_FIRST_VALUE_ZERO": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "ENUM_NO_ALLOW_ALIAS": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "IMPORT_NO_WEAK": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "IMPORT_NO_PUBLIC": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "IMPORT_USED": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "ENUM_VALUE_PREFIX": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "ENUM_ZERO_VALUE_SUFFIX": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "FIELD_NOT_REQUIRED": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "FILE_LOWER_SNAKE_CASE": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "RPC_REQUEST_RESPONSE_UNIQUE": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "RPC_REQUEST_STANDARD_NAME": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "RPC_RESPONSE_STANDARD_NAME": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "PACKAGE_VERSION_SUFFIX": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "PROTOVALIDATE": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "SERVICE_SUFFIX": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "COMMENT_ENUM": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "COMMENT_ENUM_VALUE": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "COMMENT_FIELD": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "COMMENT_MESSAGE": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "COMMENT_ONEOF": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "COMMENT_RPC": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "COMMENT_SERVICE": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "RPC_NO_CLIENT_STREAMING": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "RPC_NO_SERVER_STREAMING": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "PACKAGE_NO_IMPORT_CYCLE": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "SYNTAX_SPECIFIED": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "STABLE_PACKAGE_NO_IMPORT_UNSTABLE": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "breaking-ignore-only": {
      "$comment": "https://buf.build/docs/configuration/v2/buf-yaml/#ignore_only_1 - All of the #/$defs/breaking-rule values can be keys, plus custom breaking rules.",
      "description": "Optional. Allows directories or files to be excluded from specific breaking change detection categories or rules. As with ignore, the paths must be relative to buf.yaml. We do not recommend this option in general.",
      "type": "object",
      "properties": {
        "FILE": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "PACKAGE": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "WIRE_JSON": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "WIRE": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "ENUM_NO_DELETE": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "ENUM_SAME_JSON_FORMAT": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "ENUM_SAME_TYPE": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "ENUM_VALUE_NO_DELETE": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "ENUM_VALUE_NO_DELETE_UNLESS_NAME_RESERVED": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "ENUM_VALUE_NO_DELETE_UNLESS_NUMBER_RESERVED": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "ENUM_VALUE_SAME_NAME": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "EXTENSION_MESSAGE_NO_DELETE": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "EXTENSION_NO_DELETE": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "FIELD_NO_DELETE": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "FIELD_NO_DELETE_UNLESS_NAME_RESERVED": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "FIELD_NO_DELETE_UNLESS_NUMBER_RESERVED": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "FIELD_SAME_CARDINALITY": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "FIELD_SAME_CPP_STRING_TYPE": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "FIELD_SAME_CTYPE": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "FIELD_SAME_DEFAULT": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "FIELD_SAME_JAVA_UTF8_VALIDATION": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "FIELD_SAME_JSON_NAME": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "FIELD_SAME_JSTYPE": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "FIELD_SAME_LABEL": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "FIELD_SAME_NAME": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "FIELD_SAME_ONEOF": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "FIELD_SAME_TYPE": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "FIELD_SAME_UTF8_VALIDATION": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "FIELD_WIRE_COMPATIBLE_CARDINALITY": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "FIELD_WIRE_COMPATIBLE_TYPE": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "FIELD_WIRE_JSON_COMPATIBLE_CARDINALITY": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "FIELD_WIRE_JSON_COMPATIBLE_TYPE": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "FILE_NO_DELETE": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "FILE_SAME_CC_ENABLE_ARENAS": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "FILE_SAME_CC_GENERIC_SERVICES": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "FILE_SAME_CSHARP_NAMESPACE": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "FILE_SAME_GO_PACKAGE": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "FILE_SAME_JAVA_GENERIC_SERVICES": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "FILE_SAME_JAVA_MULTIPLE_FILES": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "FILE_SAME_JAVA_OUTER_CLASSNAME": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "FILE_SAME_JAVA_PACKAGE": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "FILE_SAME_JAVA_STRING_CHECK_UTF8": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "FILE_SAME_OBJC_CLASS_PREFIX": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "FILE_SAME_OPTIMIZE_FOR": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "FILE_SAME_PACKAGE": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "FILE_SAME_PHP_CLASS_PREFIX": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "FILE_SAME_PHP_GENERIC_SERVICES": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "FILE_SAME_PHP_METADATA_NAMESPACE": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "FILE_SAME_PHP_NAMESPACE": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "FILE_SAME_PY_GENERIC_SERVICES": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "FILE_SAME_RUBY_PACKAGE": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "FILE_SAME_SWIFT_PREFIX": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "FILE_SAME_SYNTAX": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "MESSAGE_NO_DELETE": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "MESSAGE_NO_REMOVE_STANDARD_DESCRIPTOR_ACCESSOR": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "MESSAGE_SAME_JSON_FORMAT": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "MESSAGE_SAME_MESSAGE_SET_WIRE_FORMAT": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "MESSAGE_SAME_REQUIRED_FIELDS": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "ONEOF_NO_DELETE": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "PACKAGE_ENUM_NO_DELETE": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "PACKAGE_EXTENSION_NO_DELETE": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "PACKAGE_MESSAGE_NO_DELETE": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "PACKAGE_NO_DELETE": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "PACKAGE_SERVICE_NO_DELETE": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "RESERVED_ENUM_NO_DELETE": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "RESERVED_MESSAGE_NO_DELETE": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "RPC_NO_DELETE": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "RPC_SAME_CLIENT_STREAMING": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "RPC_SAME_IDEMPOTENCY_LEVEL": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "RPC_SAME_REQUEST_TYPE": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "RPC_SAME_RESPONSE_TYPE": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "RPC_SAME_SERVER_STREAMING": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "SERVICE_NO_DELETE": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "v2-lint": {
      "$comment": "https://buf.build/docs/configuration/v2/buf-yaml#lint",
      "description": "Optional. The lint settings you specify in this section are the default for all modules in the workspace, but can be replaced for individual modules by specifying different settings at the module level. Module-level settings have all of the same fields and behavior as workspace-level settings. If no lint settings are specified for the workspace, it uses the default settings.",
      "type": "object",
      "properties": {
        "use": {
          "$comment": "https://buf.build/docs/configuration/v2/buf-yaml#use",
          "description": "Optional. Lists the categories and/or specific rules to use. The STANDARD category is used if lint is unset.",
          "type": "array",
          "default": [
            "STANDARD"
          ],
          "items": {
            "$ref": "#/$defs/lint-rule"
          }
        },
        "except": {
          "$comment": "https://buf.build/docs/configuration/v2/buf-yaml#except",
          "description": "Optional. Removes rules or categories from the use list.",
          "type": "array",
          "items": {
            "$ref": "#/$defs/lint-rule"
          }
        },
        "ignore": {
          "$comment": "https://buf.build/docs/configuration/v2/buf-yaml#ignore",
          "description": "Optional. Excludes specific directories or files from all lint rules. If a directory is ignored, then all files and subfolders of the directory are also ignored. The specified paths must be relative to the buf.yaml file.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "ignore_only": {
          "$ref": "#/$defs/lint-ignore-only"
        },
        "disallow_comment_ignores": {
          "$comment": "https://buf.build/docs/configuration/v2/buf-yaml#disallow_comment_ignores",
          "description": "Optional. Default is false if unset. If this option is set to true, you can't add leading comments within Protobuf files to ignore lint errors for certain components within the files. If the option is unset, for any line in a leading comment that starts with buf:lint:ignore <rule_id>, the linter ignores errors for that rule.",
          "type": "boolean"
        },
        "enum_zero_value_suffix": {
          "$comment": "https://buf.build/docs/configuration/v2/buf-yaml#enum_zero_value_suffix",
          "description": "Optional. Controls the behavior of the ENUM_ZERO_VALUE_SUFFIX lint rule. By default, this rule verifies that the zero value of all enums ends in _UNSPECIFIED, as recommended by the Google Protobuf Style Guide.",
          "type": "string",
          "default": "_UNSPECIFIED"
        },
        "rpc_allow_same_request_response": {
          "$comment": "https://buf.build/docs/configuration/v2/buf-yaml#rpc_allow_same_request_response",
          "description": "Optional. Allows the same message type to be used for a single RPC's request and response type. We don't recommend using this option.",
          "type": "boolean"
        },
        "rpc_allow_google_protobuf_empty_requests": {
          "$comment": "https://buf.build/docs/configuration/v2/buf-yaml#rpc_allow_google_protobuf_empty_requests",
          "description": "Optional. Allows RPC requests to be google.protobuf.Empty messages. You can set this if you want to allow messages to be void forever and never take any parameters. We don't recommend using this option.",
          "type": "boolean"
        },
        "rpc_allow_google_protobuf_empty_responses": {
          "$comment": "https://buf.build/docs/configuration/v2/buf-yaml#rpc_allow_google_protobuf_empty_responses",
          "description": "Optional. Allows RPC responses to be google.protobuf.Empty messages. You can set this if you want to allow messages to never return any parameters. We don't recommend using this option.",
          "type": "boolean"
        },
        "service_suffix": {
          "$comment": "https://buf.build/docs/configuration/v2/buf-yaml#service_suffix",
          "description": "Optional. Controls the behavior of the SERVICE_SUFFIX lint rule. By default, this rule verifies that all service names are suffixed with Service.",
          "type": "string",
          "default": "Service"
        }
      },
      "additionalProperties": false
    },
    "v2-breaking": {
      "$comment": "https://buf.build/docs/configuration/v2/buf-yaml#breaking",
      "description": "Optional. Specifies the breaking change detection rules enforced on the Protobuf files in the directory.",
      "type": "object",
      "properties": {
        "use": {
          "$comment": "https://buf.build/docs/configuration/v2/buf-yaml#use-1",
          "description": "Optional. Lists the rules or categories to use for breaking change detection. The FILE category is used if breaking is unset, which is conservative and appropriate for most teams.",
          "type": "array",
          "default": [
            "FILE"
          ],
          "items": {
            "$ref": "#/$defs/breaking-rule"
          }
        },
        "except": {
          "$comment": "https://buf.build/docs/configuration/v2/buf-yaml#except-1",
          "description": "Optional. Removes rules or categories from the use list. We don't recommend using this option.",
          "type": "array",
          "items": {
            "$ref": "#/$defs/breaking-rule"
          }
        },
        "ignore": {
          "$comment": "https://buf.build/docs/configuration/v2/buf-yaml#ignore-1",
          "description": "Optional. Excludes specific directories or files from all breaking change detection rules. If a directory is ignored, then all files and subfolders of the directory are also ignored. The specified paths must be relative to the buf.yaml file. This option can be useful for ignoring packages that are in active development but not deployed in production, especially alpha or beta packages. If you want to ignore all alpha,beta, or test packages, we recommend using the ignore_unstable_packages setting instead.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "ignore_only": {
          "$ref": "#/$defs/breaking-ignore-only"
        },
        "ignore_unstable_packages": {
          "$comment": "https://buf.build/docs/configuration/v2/buf-yaml#ignore_unstable_packages",
          "description": "Optional. Ignores packages with a last component that's one of the unstable forms recognized by the Buf linter's PACKAGE_VERSION_SUFFIX rule.",
          "type": "boolean"
        }
      },
      "additionalProperties": false
    }
  },
  "then": {
    "properties": {
      "name": {
        "$comment": "https://buf.build/docs/configuration/v1/buf-yaml#name",
        "description": "The name is optional, and uniquely identifies your module. The name must be a valid module name and is directly associated with the repository that owns it.",
        "type": "string"
      },
      "deps": {
        "$comment": "https://buf.build/docs/configuration/v1/buf-yaml#deps",
        "description": "The deps key is optional, and declares one or more modules that your module depends on. Each deps entry must be a module reference, and, is directly associated with a repository, as well as a reference, which is either a tag or commit.",
        "type": "array",
        "items": {
          "type": "string"
        }
      },
      "build": {
        "$comment": "https://buf.build/docs/configuration/v1/buf-yaml#build",
        "description": "The build key is optional, and is used to control how buf builds modules.",
        "type": "object",
        "properties": {
          "includes": {
            "description": "Optional. Lists directories within this directory to include in Protobuf file discovery. Only directories added to this list are included in Buf operations.",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "excludes": {
            "description": "The excludes key is optional, and lists directories to ignore from .proto file discovery. Any directories added to this list are completely skipped and excluded in the module. We do not recommend using this option in general, however in some situations it is unavoidable.",
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "lint": {
        "$comment": "https://buf.build/docs/configuration/v1/buf-yaml#lint",
        "description": "The lint key is optional, and specifies the lint rules enforced on the files in the module. See <https://buf.build/docs/lint/rules>.",
        "type": "object",
        "properties": {
          "use": {
            "description": "The use key is optional, and lists the IDs or categories to use for linting.",
            "type": "array",
            "default": [
              "DEFAULT"
            ],
            "items": {
              "$ref": "#/$defs/lint-rule"
            }
          },
          "except": {
            "description": "The except key is optional, and removes IDs or categories from the use list.",
            "type": "array",
            "items": {
              "$ref": "#/$defs/lint-rule"
            }
          },
          "ignore": {
            "description": "The ignore key is optional, and allows directories or files to be excluded from all lint rules when running buf lint. If a directory is ignored, then all files and subfolders of the directory will also be ignored. The specified directory or file paths must be relative to the buf.yaml.",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "ignore_only": {
            "$ref": "#/$defs/lint-ignore-only"
          },
          "allow_comment_ignores": {
            "$comment": "https://buf.build/docs/configuration/v1/buf-yaml#allow_comment_ignores",
            "description": "The allow_comment_ignores key is optional, and turns on comment-driven ignores. We do not recommend using this option in general, however in some situations it is unavoidable. See <https://buf.build/docs/configuration/v1/buf-yaml#allow_comment_ignores>.",
            "type": "boolean",
            "default": false
          },
          "enum_zero_value_suffix": {
            "$comment": "https://buf.build/docs/configuration/v1/buf-yaml#enum_zero_value_suffix",
            "description": "The enum_zero_value_suffix key is optional, and controls the behavior of the ENUM_ZERO_VALUE_SUFFIX lint rule. See <https://buf.build/docs/configuration/v1/buf-yaml#enum_zero_value_suffix>.",
            "type": "string",
            "default": "_UNSPECIFIED"
          },
          "rpc_allow_same_request_response": {
            "$comment": "https://buf.build/docs/configuration/v1/buf-yaml#rpc_allow_same_request_response",
            "description": "The rpc_allow_same_request_response key is optional, and allows the same message type to be used for a single RPC's request and response type. We do not recommend using this option in general.",
            "type": "boolean",
            "default": false
          },
          "rpc_allow_google_protobuf_empty_requests": {
            "$comment": "https://buf.build/docs/configuration/v1/buf-yaml#rpc_allow_google_protobuf_empty_requests",
            "description": "The rpc_allow_google_protobuf_empty_requests key is optional, and allows RPC requests to be google.protobuf.Empty messages. This can be set if you want to allow messages to be void forever, that is, to never take any parameters. We do not recommend using this option in general.",
            "type": "boolean",
            "default": false
          },
          "rpc_allow_google_protobuf_empty_responses": {
            "$comment": "https://buf.build/docs/configuration/v1/buf-yaml#rpc_allow_google_protobuf_empty_responses",
            "description": "The rpc_allow_google_protobuf_empty_responses key is optional, and allows RPC responses to be google.protobuf.Empty messages. This can be set if you want to allow messages to never return any parameters. We do not recommend using this option in general.",
            "type": "boolean",
            "default": false
          },
          "service_suffix": {
            "$comment": "https://buf.build/docs/configuration/v1/buf-yaml#service_suffix",
            "description": "The service_suffix key is optional, and controls the behavior of the SERVICE_SUFFIX lint rule. See <https://buf.build/docs/configuration/v1/buf-yaml#service_suffix>.",
            "type": "string",
            "default": "Service"
          }
        }
      },
      "breaking": {
        "description": "The breaking key is optional, and specifies the breaking change detection rules enforced on the files contained within the module.",
        "type": "object",
        "properties": {
          "use": {
            "description": "The use key is optional, and lists the IDs or categories to use for breaking change detection. The default value is the single item FILE, which is what we recommend.",
            "type": "array",
            "default": [
              "FILE"
            ],
            "items": {
              "$ref": "#/$defs/breaking-rule"
            }
          },
          "except": {
            "description": "The except key is optional, and removes IDs or categories from the use list. We do not recommend using this option in general.",
            "type": "array",
            "items": {
              "$ref": "#/$defs/breaking-rule"
            }
          },
          "ignore": {
            "description": "The ignore key is optional, and allows directories or files to be excluded from all breaking rules when running buf breaking. If a directory is ignored, then all files and subfolders of the directory will also be ignored. The specified directory or file paths must be relative to the buf.yaml. This option can be useful for ignoring packages that are in active development but not deployed in production, especially alpha or beta packages, and we expect ignore to be commonly used for this case.",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "ignore_only": {
            "$ref": "#/$defs/breaking-ignore-only"
          },
          "ignore_unstable_packages": {
            "$comment": "https://buf.build/docs/configuration/v1/buf-yaml#ignore_unstable_packages",
            "description": "The ignore_unstable_packages key is optional, and ignores packages with a last component that is one of the unstable forms recognized by PACKAGE_VERSION_SUFFIX.",
            "type": "boolean",
            "default": false
          }
        }
      }
    }
  },
  "if": {
    "properties": {
      "version": {
        "const": "v1"
      }
    }
  }
}
