NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #3802 most downloaded on PyPI
Generate fully typed GraphQL client from schema, queries and mutations!
Last release 1 months ago
28 Aug 2026
Release timing varies
gaps range from 2 weeks to 8 months
Nearly every release is documented
notes for 24 of 24 stable releases
Nothing withdrawn
no release was ever pulled
4 years old
31 releases · first in 2023
One column per quarter.
Add control over deprecation warnings (by @DamianCzajkowski in #461 )
Build custom-operation leaf fields per query (#448)
Custom-operation leaf fields are now built per query, on access, instead of eagerly during generation. This also fixes a case where a custom scalar mapped to a non-builtin type (e.g. Decimal) used in a custom-operation argument produced a custom_fields.py/custom_queries.py that raised NameError on import due to a missing import.
multipart_uploads setting to disable file upload support (by @Minister944 in #437)schema_paths for loading schema from local paths and installed packages (by @Minister944 in #439)ty type-checker suppressions for GraphQL and optional imports (by @DamianCzajkowski in #427)include_all_inputs in models-only mode (by @Kwaidan00 in #459)multipart_uploads setting in README and the configuration guide (by @Minister944)gh-action-sigstore-python to v3.5.0 (by @DamianCzajkowski)Full Changelog: 0.18.0...0.19.0
feat: control deprecation warnings by @DamianCzajkowski in #461
Full Changelog: 0.19.a3...0.19.a4
Pre-release (alpha). 0.19.a2 is published for early testing ahead of the 0.19.0 stable release. APIs may still change.
Pre-release (alpha).
0.19.a2is published for early testing ahead of the0.19.0stable release. APIs may still change.
feat!: build custom-operation leaf fields on access
enable_custom_operations with a scalar mapped to a non-builtin type
generated a custom_fields.py that raised on import:
NameError: name 'Decimal' is not defined
ArgumentGenerator records the custom scalars it meets and only turns them
into imports when add_custom_scalar_imports() runs. The only place that
copied those imports into the module lived in _parse_object_type_definitions,
which executes in __init__ - before generate() calls
add_custom_scalar_imports(). The scalar imports were appended to a list
nobody read again.
Copy the argument generator's imports once, in generate(), after the scalar
imports are registered. This also drops the duplicate ImportFrom nodes the
old per-field copy accumulated.
custom_operation.py had the same shape, which is why custom_queries.py
was missing from uuid import UUID.
Only schemas with a custom scalar in a field-argument or operation-argument
position are affected; output and input-object positions always emitted the
import. The existing custom_query_builder and custom_scalars fixtures
cover the two features separately and never their combination, so add
custom_query_builder_scalars, which exercises a custom scalar in all three
argument positions. Its test imports the generated modules rather than
diffing their source - a source diff cannot see a missing import.
Full Changelog: 0.18.0...0.19.a3
Pre-release (alpha). 0.19.a2 is published for early testing ahead of the 0.19.0 stable release. APIs may still change.
Pre-release (alpha).
0.19.a2is published for early testing ahead of the0.19.0stable release. APIs may still change.
feat!: build custom-operation leaf fields on access
enable_custom_operations with a scalar mapped to a non-builtin type
generated a custom_fields.py that raised on import:
NameError: name 'Decimal' is not defined
ArgumentGenerator records the custom scalars it meets and only turns them
into imports when add_custom_scalar_imports() runs. The only place that
copied those imports into the module lived in _parse_object_type_definitions,
which executes in __init__ - before generate() calls
add_custom_scalar_imports(). The scalar imports were appended to a list
nobody read again.
Copy the argument generator's imports once, in generate(), after the scalar
imports are registered. This also drops the duplicate ImportFrom nodes the
old per-field copy accumulated.
custom_operation.py had the same shape, which is why custom_queries.py
was missing from uuid import UUID.
Only schemas with a custom scalar in a field-argument or operation-argument
position are affected; output and input-object positions always emitted the
import. The existing custom_query_builder and custom_scalars fixtures
cover the two features separately and never their combination, so add
custom_query_builder_scalars, which exercises a custom scalar in all three
argument positions. Its test imports the generated modules rather than
diffing their source - a source diff cannot see a missing import.
Full Changelog: 0.18.0...0.19.a2
Pre-release (alpha). 0.19.a1 is published for early testing ahead of the 0.19.0 stable release. APIs may still change.
Pre-release (alpha).
0.19.a1is published for early testing ahead of the0.19.0stable release. APIs may still change.
schema_paths for loading the schema from local paths and installed packages — AR-3 (by @Minister944 in #439)multipart_uploads setting — AR-6 (by @Minister944 in #437)custom_operation modules and functions (by @chestm007 in #426)from part (by @MatthewZMSU in #425)ruff format subprocess (by @DamianCzajkowski in #428)ty) suppression cleanups for GraphQL and optional imports (#427)Full Changelog: 0.18.0...0.19.a1
Extend TypeCollector to handle interface types and add tests. by @davner in #414
Full Changelog: 0.17.2...0.18.0
feat: emit DeprecationWarning for deprecated fields by @DamianCzajkowski & @AdunSG in #409
additional_headers for websockets.connect client. by @davner in #408Full Changelog: 0.17.1...0.17.2
Issue 399 optional removed from custom_fields when dropping 3.9 support by @DamianCzajkowski in #400
Full Changelog: 0.17.0...0.17.1
!!! Drop Python 3.9 and support Python 3.14 by @DamianCzajkowski in #398
include_typename configuration option for better GraphQL API compatibility by @jacksonpradolima in #379Full Changelog: 0.16.0...0.17.0
Fixed list arg handling #321 / #347 by @normanre in #363
Full Changelog: 0.15.3...0.16.0
fix-issue-with-client-forward-refs-import-level by @DamianCzajkowski in #381
Full Changelog: 0.15.2...0.15.3
305 update ast usage in code for python 312 changes by @DamianCzajkowski in https://github.com/mirumee/ariadne-codegen/pull/306
settings.py message text by @zyv in https://github.com/mirumee/ariadne-codegen/pull/358Full Changelog: https://github.com/mirumee/ariadne-codegen/compare/0.14.0...0.15.2
Nothing published for this version
Added ClientForwardRefsPlugin to standard plugins.
Second version of ariadne codegen custom query builder
Second version of ariadne codegen custom query builder
Experimental version of ariadne codegen custom query builder
Fixed str_to_snake_case utility to capture fully capitalized words followed by an underscore.
str_to_snake_case utility to capture fully capitalized words followed by an underscore.model_rebuild calls for models with forward references.Fixed graphql-transport-ws protocol implementation not waiting for the connection_ack message on new connection.
graphql-transport-ws protocol implementation not waiting for the connection_ack message on new connection.get_client_settings mutating config_dict instance.graphqlschema for saving schema as a GraphQL file.model_rebuild calls for top level fragment models.Renamed GraphQlClientInvalidResponseError to GraphQLClientInvalidResponseError (breaking change).
model_rebuild calls for generated input, fragment and result models.NoReimportsPlugin that makes the __init__.py of generated client package empty.include_all_inputs config flag to generate only inputs used in supplied operations.include_all_enums config flag to generate only enums used in supplied operations.operationName to payload sent by generated client's methods.mypy --strict without installed optional dependencies.GraphQlClientInvalidResponseError to GraphQLClientInvalidResponseError (breaking change).GraphQLClientGraphQLMultiError for payloads with errors key but no data (breaking change).Digits in Python names are now preceded by an underscore (breaking change).
include_comments option to accept enum value, changed default to "stable", deprecated boolean support. Added get_file_comment plugin hook.str_to_snake_case utility to correctly handle capitalized words.__typename to generated result models._ to them.enums_module_name option not being passed to generators.opentelemetry_client config option.**kwargs to base client's execute and execute_ws methods (breaking change for custom base clients).operation_definition argument to generate_client_method plugin hook.ExtractOperationsPlugin that extracts operation strings from client methods to separate module.Fixed generating operation string for nested inline fragments.
scalars_module_name option. Removed generate_scalars_module, generate_scalars_cod, generate_scalar_annotation and generate_scalar_imports plugin hooks.model_ prefix.Added support for Upload scalar. Added support for file uploads to AsyncBaseClient and BaseClient.
Upload scalar. Added support for file uploads to AsyncBaseClient and BaseClient.mixin directive from fragment string included in operation string sent to server.mixin directive on fragments definitions.BeforeValidator and PlainSerializer. Added scalars_module_name option. Replaced generate_scalars_parse_dict and generate_scalars_serialize_dict with generate_scalar_annotation and generate_scalar_imports plugin hooks._ to names reserved by pydantic.Fixed AsyncBaseClient and BaseClient to send Content-Type header with requests.
AsyncBaseClient and BaseClient to send Content-Type header with requests.Added support for subscriptions as async generators.
ResultTypesGenerator to trigger generate_result_class for each result model.ShorterResultsPlugin to standard plugins.json= serializer for query payloads with pydantic's pydantic_encoder.mixin directive from operation string sent to server.ShorterResultsPlugin that generated faulty code for discriminated unions.typing.Any.process_schema plugin hook.Changed logic how custom scalar imports are generated. Deprecated import_ key.
import_ key._ to them.process_name plugin hook.Added generation of GraphQL schema's Python representation.
remote_schema_verify_ssl option.BaseModel incorrectly calling parse and serialize methods on entire list instead of its items for List[Scalar].Added support for [tool.ariadne-codegen] section key. Deprecated [ariadne-codegen].
None values for generated methods optional arguments.InitFileGenerator, EnumsGenerator, ClientGenerator and ArgumentsGenerator plugin hooks.InputTypesGenerator and ResultTypesGenerator plugin hooks.ScalarsDefinitionsGenerator and PackageGenerator plugin hooks.[tool.ariadne-codegen] section key. Deprecated [ariadne-codegen].--config argument to ariadne-codegen script, to support reading configuration from custom path.Changed generated code to pass mypy --strict.
mypy --strict.Fixed incorrectly raised exception when using custom scalar as query argument type.
This release brings support for remote schemas to the Ariadne Codegen and adds headers option to default Client, so workaround is no longer needed for
This release brings support for remote schemas to the Ariadne Codegen and adds headers option to default Client, so workaround is no longer needed for it.
remote_schema_url and remote_schema_headers settings to support reading remote schemas.headers argument to __init__ methods of BaseClient and AsyncBaseClient.First release of Ariadne Codegen 🎉
First release of Ariadne Codegen 🎉
Ariadne Codegen automates the process of writing GraphQL client boilerplate code, generating it from GraphQL operations instead.
It's already being used internally at Mirumee to implement services for our customers that integrate with Saleor, buts this is the time we are sharing it with the world!
Your coding agent can read these notes before it upgrades. Set up the MCP server →