{
  "version": 1,
  "format": "json",
  "kind": "experimental",
  "content": "[\n  {\n    \"id\": \"behavior.batch-generation-jobs\",\n    \"kind\": \"behavior\",\n    \"message\": \"Named batch jobs are experimental; their configuration schema, batch output, and transactional/watch execution contracts may change.\",\n    \"note\": \"Define named generation jobs in [tool.datamodel-codegen.jobs] and select them with --job or --all-jobs. Each selected job has its own input and output, and the full selection is validated before generation begins.\",\n    \"since_version\": \"0.72.3\",\n    \"target\": \"[tool.datamodel-codegen.jobs], --job, --all-jobs\",\n    \"tracking_issue\": null\n  },\n  {\n    \"id\": \"behavior.remote-reference-lock\",\n    \"kind\": \"behavior\",\n    \"message\": \"Remote reference integrity locking is experimental: the lock document schema and request-identity compatibility may evolve, but integrity mismatches remain fail-closed and credentials are never persisted.\",\n    \"note\": \"The lock stores opaque SHA-256 request-identity digests and SHA-256 body digests, never response bodies or request values directly. Each saved display origin contains only the scheme, host, and explicit port\\u2014never a path, query, or request headers.\",\n    \"since_version\": \"0.72.3\",\n    \"target\": \"datamodel-codegen.lock, --lockfile, --update-lock, and --locked\",\n    \"tracking_issue\": null\n  },\n  {\n    \"id\": \"cli-option.generate-client\",\n    \"kind\": \"cli-option\",\n    \"message\": \"HTTPX2 client generation from the CLI is experimental; its options and generated package may change.\",\n    \"note\": \"`--generate-client httpx2` generates the models at `--output` and a client package at `--client-output`; `--client-package` and `--client-model-package` name their import paths, and the other `--client-*` options configure the package. Like model options, they can be set in `[tool.datamodel-codegen]` of `pyproject.toml`, in its profiles, and in its jobs. `--check`, `--diff-against`, `--watch`, `--output-format json`, and the `uv add` and next-step notice on stderr work as with `--generate-server`. `generate()` takes them as `generate_client` and the `client_*` options, and returns every generated file without an output. It needs Python 3.11 or later, both to run and as `--target-python-version`, `--use-missing-sentinel` for `pydantic_v2.dataclass` models, `--target-pydantic-version 2.14` with `--use-missing-sentinel`, and `--use-msgspec-tagged-unions` and `--use-msgspec-nullable-enum-alias` for `msgspec.Struct` models; one left unset takes that value, as with `--generate-server`.\",\n    \"since_version\": \"0.84.0\",\n    \"target\": \"--generate-client httpx2 and the --client-* options (and their [tool.datamodel-codegen] keys and generate() options)\",\n    \"tracking_issue\": null\n  },\n  {\n    \"id\": \"cli-option.generate-schema-validators\",\n    \"kind\": \"cli-option\",\n    \"message\": \"Schema-derived runtime validators are experimental and may change as JSON Schema coverage is expanded.\",\n    \"note\": \"The option currently targets Pydantic v2 BaseModel output and covers selected object-level rules such as patternProperties, required-only oneOf/anyOf/not groups, and simple if/then/else required-property conditions.\",\n    \"since_version\": \"0.66.1\",\n    \"target\": \"--generate-schema-validators\",\n    \"tracking_issue\": null\n  },\n  {\n    \"id\": \"cli-option.generate-server\",\n    \"kind\": \"cli-option\",\n    \"message\": \"FastAPI server generation from the CLI is experimental; its options and generated package may change.\",\n    \"note\": \"`--generate-server fastapi` generates the models at `--output` and a server package at `--server-output`, whose `main.py` serves the application with the implementations in the `services` package beside it; generation writes each missing module of `services` once, with stubs, and never overwrites one. `--server-package` and `--server-model-package` name their import paths, and the other `--server-*` options configure the package. Like model options, they can be set in `[tool.datamodel-codegen]` of `pyproject.toml`, in its profiles, and in its jobs. `--check` compares without writing, `--diff-against` compares the files two inputs render, `--watch` regenerates after input changes, `--output-format json` uses the model generation, check, and input-diff payloads, and generation prints a `uv add` command and the next steps to stderr. `generate()` takes them as `generate_server` and the `server_*` options, and returns every generated file without an output, writing no stubs. It needs Python 3.11 or later, both to run and as `--target-python-version`, `--use-missing-sentinel` for `pydantic_v2.dataclass` models, `--target-pydantic-version 2.14` with `--use-missing-sentinel`, and `--openapi-scopes` with `api`. A setting left unset, by the options, `pyproject.toml`, `generate()`, and the preset, takes that value, and the command line prints how to set it; one set otherwise is refused.\",\n    \"since_version\": \"0.84.0\",\n    \"target\": \"--generate-server fastapi and the --server-* options (and their [tool.datamodel-codegen] keys and generate() options)\",\n    \"tracking_issue\": null\n  },\n  {\n    \"id\": \"cli-option.install-skill\",\n    \"kind\": \"cli-option\",\n    \"message\": \"Bundled Agent Skill installation is experimental; supported clients, scopes, and installed skill contents may change.\",\n    \"note\": \"Use --install-skill with codex or claude-code. --skill-scope selects a project or user installation, and --overwrite-skill safely replaces an existing regular skill directory.\",\n    \"since_version\": \"0.76.0\",\n    \"target\": \"--install-skill, --skill-scope, and --overwrite-skill\",\n    \"tracking_issue\": null\n  },\n  {\n    \"id\": \"cli-option.schema-validator-type\",\n    \"kind\": \"cli-option\",\n    \"message\": \"Schema-derived runtime validator backend selection is experimental and may change as validation backends are added.\",\n    \"note\": \"The only currently implemented backend is 'pydantic-v2', which preserves the existing generated Pydantic v2 validator behavior.\",\n    \"since_version\": \"0.66.1\",\n    \"target\": \"--schema-validator-type\",\n    \"tracking_issue\": null\n  },\n  {\n    \"id\": \"cli-option.use-missing-sentinel\",\n    \"kind\": \"cli-option\",\n    \"message\": \"Pydantic MISSING sentinel output is experimental because it depends on pydantic.experimental.missing_sentinel, or on pydantic.MISSING for a 2.14 target.\",\n    \"note\": \"The option requires Pydantic v2 BaseModel or dataclass output and a target Pydantic version that supports the MISSING sentinel. Server and client generation require it for Pydantic v2 dataclass output, and `--target-pydantic-version 2.14` with it.\",\n    \"since_version\": \"0.66.1\",\n    \"target\": \"--use-missing-sentinel\",\n    \"tracking_issue\": null\n  },\n  {\n    \"id\": \"cli-option.use-type-alias\",\n    \"kind\": \"cli-option\",\n    \"message\": \"Type alias output is experimental and may change as Python typing support evolves.\",\n    \"note\": \"The option replaces root model classes with type aliases where possible. Pydantic v2 output may use TypeAliasType or Python 3.12 type statements depending on the target Python version.\",\n    \"since_version\": \"0.36.0\",\n    \"target\": \"--use-type-alias\",\n    \"tracking_issue\": null\n  },\n  {\n    \"id\": \"cli-option.use-type-alias-type\",\n    \"kind\": \"cli-option\",\n    \"message\": \"Runtime TypeAliasType output is experimental and may change as Python typing support evolves.\",\n    \"note\": \"The option implies --use-type-alias and selects TypeAliasType for Python 3.10 and 3.11. Python 3.12 and newer continue to use native type statements.\",\n    \"since_version\": \"0.71.1\",\n    \"target\": \"--use-type-alias-type\",\n    \"tracking_issue\": null\n  },\n  {\n    \"id\": \"extra.httpx2\",\n    \"kind\": \"extra\",\n    \"message\": \"The HTTPX2-backed HTTP client is experimental and may change as compatibility is validated.\",\n    \"note\": \"`datamodel-code-generator[http]` remains the stable HTTPX backend and is not deprecated; `datamodel-code-generator[httpx2]` is experimental. The default HTTP backend policy is auto: stable httpx is selected when its client module is installed, including when both pairs are installed, and experimental httpx2 is selected only when that module is absent. Use `--http-backend httpx2` or `HTTPBackend.HTTPX2` to require the experimental pair. Explicit selections and paired dependency errors do not fall back.\",\n    \"since_version\": \"0.71.1\",\n    \"target\": \"datamodel-code-generator[httpx2]\",\n    \"tracking_issue\": null\n  },\n  {\n    \"id\": \"formatter.builtin\",\n    \"kind\": \"formatter\",\n    \"message\": \"The internal formatter is experimental and may change as generated-output coverage is expanded.\",\n    \"note\": \"The formatter is designed for generated model modules and is not a general-purpose Python formatter.\",\n    \"since_version\": \"0.59.0\",\n    \"target\": \"--formatters builtin\",\n    \"tracking_issue\": null\n  },\n  {\n    \"id\": \"input-format.asyncapi\",\n    \"kind\": \"input-format\",\n    \"message\": \"AsyncAPI input support is experimental and may change as real-world usage is validated.\",\n    \"note\": \"The parser focuses on message payload model generation from AsyncAPI documents.\",\n    \"since_version\": \"0.59.0\",\n    \"target\": \"--input-file-type asyncapi\",\n    \"tracking_issue\": null\n  },\n  {\n    \"id\": \"input-format.avro\",\n    \"kind\": \"input-format\",\n    \"message\": \"Apache Avro schema input support is experimental and may change as real-world usage is validated.\",\n    \"note\": \"The parser generates Python models from Avro schemas; it does not provide Avro runtime validation.\",\n    \"since_version\": \"0.59.0\",\n    \"target\": \"--input-file-type avro\",\n    \"tracking_issue\": null\n  },\n  {\n    \"id\": \"input-format.mcp-tools\",\n    \"kind\": \"input-format\",\n    \"message\": \"MCP tool schema profile input support is experimental and may change as MCP schemas evolve.\",\n    \"note\": \"The input is converted from MCP tool inputSchema/outputSchema entries into JSON Schema definitions before model generation.\",\n    \"since_version\": \"0.60.0\",\n    \"target\": \"--input-file-type mcp-tools\",\n    \"tracking_issue\": null\n  },\n  {\n    \"id\": \"input-format.protobuf\",\n    \"kind\": \"input-format\",\n    \"message\": \"Protocol Buffers input support is experimental and may change as real-world usage is validated.\",\n    \"note\": \"The parser generates Python models from .proto schemas; it does not provide protobuf runtime validation or gRPC code generation.\",\n    \"since_version\": \"0.59.0\",\n    \"target\": \"--input-file-type protobuf\",\n    \"tracking_issue\": null\n  },\n  {\n    \"id\": \"input-format.xmlschema\",\n    \"kind\": \"input-format\",\n    \"message\": \"XML Schema input support is experimental and may change as real-world usage is validated.\",\n    \"note\": \"The parser focuses on model generation from XSD documents, not full XML instance validation.\",\n    \"since_version\": \"0.59.0\",\n    \"target\": \"--input-file-type xmlschema\",\n    \"tracking_issue\": null\n  }\n]\n",
  "items": [
    {
      "id": "behavior.batch-generation-jobs",
      "kind": "behavior",
      "target": "[tool.datamodel-codegen.jobs], --job, --all-jobs",
      "message": "Named batch jobs are experimental; their configuration schema, batch output, and transactional/watch execution contracts may change.",
      "since_version": "0.72.3",
      "tracking_issue": null,
      "note": "Define named generation jobs in [tool.datamodel-codegen.jobs] and select them with --job or --all-jobs. Each selected job has its own input and output, and the full selection is validated before generation begins."
    },
    {
      "id": "behavior.remote-reference-lock",
      "kind": "behavior",
      "target": "datamodel-codegen.lock, --lockfile, --update-lock, and --locked",
      "message": "Remote reference integrity locking is experimental: the lock document schema and request-identity compatibility may evolve, but integrity mismatches remain fail-closed and credentials are never persisted.",
      "since_version": "0.72.3",
      "tracking_issue": null,
      "note": "The lock stores opaque SHA-256 request-identity digests and SHA-256 body digests, never response bodies or request values directly. Each saved display origin contains only the scheme, host, and explicit port—never a path, query, or request headers."
    },
    {
      "id": "cli-option.generate-client",
      "kind": "cli-option",
      "target": "--generate-client httpx2 and the --client-* options (and their [tool.datamodel-codegen] keys and generate() options)",
      "message": "HTTPX2 client generation from the CLI is experimental; its options and generated package may change.",
      "since_version": "0.84.0",
      "tracking_issue": null,
      "note": "`--generate-client httpx2` generates the models at `--output` and a client package at `--client-output`; `--client-package` and `--client-model-package` name their import paths, and the other `--client-*` options configure the package. Like model options, they can be set in `[tool.datamodel-codegen]` of `pyproject.toml`, in its profiles, and in its jobs. `--check`, `--diff-against`, `--watch`, `--output-format json`, and the `uv add` and next-step notice on stderr work as with `--generate-server`. `generate()` takes them as `generate_client` and the `client_*` options, and returns every generated file without an output. It needs Python 3.11 or later, both to run and as `--target-python-version`, `--use-missing-sentinel` for `pydantic_v2.dataclass` models, `--target-pydantic-version 2.14` with `--use-missing-sentinel`, and `--use-msgspec-tagged-unions` and `--use-msgspec-nullable-enum-alias` for `msgspec.Struct` models; one left unset takes that value, as with `--generate-server`."
    },
    {
      "id": "cli-option.generate-schema-validators",
      "kind": "cli-option",
      "target": "--generate-schema-validators",
      "message": "Schema-derived runtime validators are experimental and may change as JSON Schema coverage is expanded.",
      "since_version": "0.66.1",
      "tracking_issue": null,
      "note": "The option currently targets Pydantic v2 BaseModel output and covers selected object-level rules such as patternProperties, required-only oneOf/anyOf/not groups, and simple if/then/else required-property conditions."
    },
    {
      "id": "cli-option.generate-server",
      "kind": "cli-option",
      "target": "--generate-server fastapi and the --server-* options (and their [tool.datamodel-codegen] keys and generate() options)",
      "message": "FastAPI server generation from the CLI is experimental; its options and generated package may change.",
      "since_version": "0.84.0",
      "tracking_issue": null,
      "note": "`--generate-server fastapi` generates the models at `--output` and a server package at `--server-output`, whose `main.py` serves the application with the implementations in the `services` package beside it; generation writes each missing module of `services` once, with stubs, and never overwrites one. `--server-package` and `--server-model-package` name their import paths, and the other `--server-*` options configure the package. Like model options, they can be set in `[tool.datamodel-codegen]` of `pyproject.toml`, in its profiles, and in its jobs. `--check` compares without writing, `--diff-against` compares the files two inputs render, `--watch` regenerates after input changes, `--output-format json` uses the model generation, check, and input-diff payloads, and generation prints a `uv add` command and the next steps to stderr. `generate()` takes them as `generate_server` and the `server_*` options, and returns every generated file without an output, writing no stubs. It needs Python 3.11 or later, both to run and as `--target-python-version`, `--use-missing-sentinel` for `pydantic_v2.dataclass` models, `--target-pydantic-version 2.14` with `--use-missing-sentinel`, and `--openapi-scopes` with `api`. A setting left unset, by the options, `pyproject.toml`, `generate()`, and the preset, takes that value, and the command line prints how to set it; one set otherwise is refused."
    },
    {
      "id": "cli-option.install-skill",
      "kind": "cli-option",
      "target": "--install-skill, --skill-scope, and --overwrite-skill",
      "message": "Bundled Agent Skill installation is experimental; supported clients, scopes, and installed skill contents may change.",
      "since_version": "0.76.0",
      "tracking_issue": null,
      "note": "Use --install-skill with codex or claude-code. --skill-scope selects a project or user installation, and --overwrite-skill safely replaces an existing regular skill directory."
    },
    {
      "id": "cli-option.schema-validator-type",
      "kind": "cli-option",
      "target": "--schema-validator-type",
      "message": "Schema-derived runtime validator backend selection is experimental and may change as validation backends are added.",
      "since_version": "0.66.1",
      "tracking_issue": null,
      "note": "The only currently implemented backend is 'pydantic-v2', which preserves the existing generated Pydantic v2 validator behavior."
    },
    {
      "id": "cli-option.use-missing-sentinel",
      "kind": "cli-option",
      "target": "--use-missing-sentinel",
      "message": "Pydantic MISSING sentinel output is experimental because it depends on pydantic.experimental.missing_sentinel, or on pydantic.MISSING for a 2.14 target.",
      "since_version": "0.66.1",
      "tracking_issue": null,
      "note": "The option requires Pydantic v2 BaseModel or dataclass output and a target Pydantic version that supports the MISSING sentinel. Server and client generation require it for Pydantic v2 dataclass output, and `--target-pydantic-version 2.14` with it."
    },
    {
      "id": "cli-option.use-type-alias",
      "kind": "cli-option",
      "target": "--use-type-alias",
      "message": "Type alias output is experimental and may change as Python typing support evolves.",
      "since_version": "0.36.0",
      "tracking_issue": null,
      "note": "The option replaces root model classes with type aliases where possible. Pydantic v2 output may use TypeAliasType or Python 3.12 type statements depending on the target Python version."
    },
    {
      "id": "cli-option.use-type-alias-type",
      "kind": "cli-option",
      "target": "--use-type-alias-type",
      "message": "Runtime TypeAliasType output is experimental and may change as Python typing support evolves.",
      "since_version": "0.71.1",
      "tracking_issue": null,
      "note": "The option implies --use-type-alias and selects TypeAliasType for Python 3.10 and 3.11. Python 3.12 and newer continue to use native type statements."
    },
    {
      "id": "extra.httpx2",
      "kind": "extra",
      "target": "datamodel-code-generator[httpx2]",
      "message": "The HTTPX2-backed HTTP client is experimental and may change as compatibility is validated.",
      "since_version": "0.71.1",
      "tracking_issue": null,
      "note": "`datamodel-code-generator[http]` remains the stable HTTPX backend and is not deprecated; `datamodel-code-generator[httpx2]` is experimental. The default HTTP backend policy is auto: stable httpx is selected when its client module is installed, including when both pairs are installed, and experimental httpx2 is selected only when that module is absent. Use `--http-backend httpx2` or `HTTPBackend.HTTPX2` to require the experimental pair. Explicit selections and paired dependency errors do not fall back."
    },
    {
      "id": "formatter.builtin",
      "kind": "formatter",
      "target": "--formatters builtin",
      "message": "The internal formatter is experimental and may change as generated-output coverage is expanded.",
      "since_version": "0.59.0",
      "tracking_issue": null,
      "note": "The formatter is designed for generated model modules and is not a general-purpose Python formatter."
    },
    {
      "id": "input-format.asyncapi",
      "kind": "input-format",
      "target": "--input-file-type asyncapi",
      "message": "AsyncAPI input support is experimental and may change as real-world usage is validated.",
      "since_version": "0.59.0",
      "tracking_issue": null,
      "note": "The parser focuses on message payload model generation from AsyncAPI documents."
    },
    {
      "id": "input-format.avro",
      "kind": "input-format",
      "target": "--input-file-type avro",
      "message": "Apache Avro schema input support is experimental and may change as real-world usage is validated.",
      "since_version": "0.59.0",
      "tracking_issue": null,
      "note": "The parser generates Python models from Avro schemas; it does not provide Avro runtime validation."
    },
    {
      "id": "input-format.mcp-tools",
      "kind": "input-format",
      "target": "--input-file-type mcp-tools",
      "message": "MCP tool schema profile input support is experimental and may change as MCP schemas evolve.",
      "since_version": "0.60.0",
      "tracking_issue": null,
      "note": "The input is converted from MCP tool inputSchema/outputSchema entries into JSON Schema definitions before model generation."
    },
    {
      "id": "input-format.protobuf",
      "kind": "input-format",
      "target": "--input-file-type protobuf",
      "message": "Protocol Buffers input support is experimental and may change as real-world usage is validated.",
      "since_version": "0.59.0",
      "tracking_issue": null,
      "note": "The parser generates Python models from .proto schemas; it does not provide protobuf runtime validation or gRPC code generation."
    },
    {
      "id": "input-format.xmlschema",
      "kind": "input-format",
      "target": "--input-file-type xmlschema",
      "message": "XML Schema input support is experimental and may change as real-world usage is validated.",
      "since_version": "0.59.0",
      "tracking_issue": null,
      "note": "The parser focuses on model generation from XSD documents, not full XML instance validation."
    }
  ]
}
