NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #3289 most downloaded on PyPI
Ariadne is a Python library for implementing GraphQL servers.
Last release 3 months ago
15 Jun 2026
Ships unpredictably
gaps range from 8 days to 9 months
Most releases are documented
notes for 41 of 49 stable releases
Nothing withdrawn
no release was ever pulled
8 years old
73 releases · first in 2018
Automated SQLAlchemy integration (by @KarolJagodzinski )
Full Changelog: 1.0.1...1.1.0
One column per quarter.
New feature: Automated SQLAlchemy integration #1321
** New feature:
Automated SQLAlchemy integration #1321
from ariadne import make_executable_schema
from ariadne.asgi import GraphQL
from ariadne.asgi.handlers import GraphQLHTTPHandler
from ariadne.contrib.sqlalchemy import (
SQLAlchemyObjectType,
SQLAlchemyQueryType,
)
from sqlalchemy import Column, ForeignKey, Integer, String, Table, create_engine
from sqlalchemy.orm import Session, declarative_base, relationship, sessionmaker
Base = declarative_base()
post_tags = Table(
"post_tags",
Base.metadata,
Column("post_id", Integer, ForeignKey("posts.id"), primary_key=True),
Column("tag_id", Integer, ForeignKey("tags.id"), primary_key=True),
)
class User(Base):
__tablename__ = "users"
id = Column(Integer, primary_key=True)
username = Column(String)
posts = relationship("Post", back_populates="author")
class Post(Base):
__tablename__ = "posts"
id = Column(Integer, primary_key=True)
title = Column(String)
author_id = Column(Integer, ForeignKey("users.id"))
author = relationship("User", back_populates="posts")
tags = relationship("Tag", secondary=post_tags, back_populates="posts")
class Tag(Base):
__tablename__ = "tags"
id = Column(Integer, primary_key=True)
name = Column(String)
posts = relationship("Post", secondary=post_tags, back_populates="tags")
type_defs = """
type Query {
users: [User!]!
posts: [Post!]!
tags: [Tag!]!
}
type User {
id: ID!
username: String!
posts: [Post!]!
}
type Post {
id: ID!
title: String!
author: User!
tags: [Tag!]!
}
type Tag {
id: ID!
name: String!
posts: [Post!]!
}
"""
user_type = SQLAlchemyObjectType("User", User)
post_type = SQLAlchemyObjectType("Post", Post)
tag_type = SQLAlchemyObjectType("Tag", Tag)
query = SQLAlchemyQueryType([user_type, post_type, tag_type])
schema = make_executable_schema(type_defs, [query, user_type, post_type, tag_type])
engine = create_engine("sqlite:///db.sqlite3")
SessionLocal = sessionmaker(engine, expire_on_commit=False)
async def get_context(request, _data):
return {"request": request, "session": SessionLocal()}
app = GraphQL(
schema,
context_value=get_context,
http_handler=GraphQLHTTPHandler(),
)Full description:
https://github.com/mirumee/ariadne/blob/orm_shortcut/docs/07-Contrib/02-sqlalchemy.md
Adjust code to new ty checker (0.0.25) (by @KarolJagodzinski in #1314 )
ty checker (0.0.25) (by @KarolJagodzinski in #1314)Full Changelog: 1.1.0a1...1.1.0a2
This release addresses changes introduced in graphql-python/graphql-core#221
This release addresses changes introduced in graphql-python/graphql-core#221
Full Changelog: 1.0.0...1.1.0a1
Nothing published for this version
Rename example (by @KarolJagodzinski in #1308 )
ty checker (0.0.25) (by @KarolJagodzinski in #1314)ty checker (0.0.25) by @KarolJagodzinski in #1314Full Changelog: 1.0.0...1.0.1
Remove deprecated EnumType.bind_to_default_values
EnumType.bind_to_default_valuesEnumType.bind_to_default_values by @KarolJagodzinski in #1282Full Changelog: 0.29.0...1.0.0
Removed Deprecated Utilities : FallbackResolvers and convert_kwargs_to_snake_case have been removed. If you were still relying on these, please migrat…
⚠️ Breaking Changes
Removed Deprecated Utilities: FallbackResolvers and convert_kwargs_to_snake_case have been removed. If you were still relying on these, please migrate to standard resolver patterns or custom middleware. (#1281)
Cleanup: Removed legacy code paths for versions < 0.20. (#1280)
✨ New Features
🛠 Development & Build System
Type Checking: Replaced mypy with pyright (via ty) for faster and more accurate type checking. (#1274, #1275)
Task Runner: Introduced just (and a justfile) to simplify local development commands and GitHub Actions workflows. (#1276)
CI Fixes: Resolved issues with the hatch command within the benchmark CI pipeline. (#1279)
Full Changelog: 0.28.0...0.29.0
Introduce subscription handlers for GraphQLHTTPHandler by @KarolJagodzinski in #1273
Full Changelog: 0.28.0...0.28.1.rc1
Add synchronous generator support for subscriptions by @DamianCzajkowski in #1264
Full Changelog: 0.27.1...0.28.0
Docs from ariadne website by @DamianCzajkowski in https://github.com/mirumee/ariadne/pull/1265
Full Changelog: https://github.com/mirumee/ariadne/compare/0.28.0.rc1...0.28.0.rc2
Add synchronous generator support for subscriptions by @DamianCzajkowski in https://github.com/mirumee/ariadne/pull/1264
Full Changelog: https://github.com/mirumee/ariadne/compare/0.27.0...0.28.0.rc1
fix(_patch_enum_parse_value): Fix patching enum values by @KarolJagodzinski in https://github.com/mirumee/ariadne/pull/1267
Full Changelog: https://github.com/mirumee/ariadne/compare/0.27.0...0.27.1
drop support for python 3.9 by @DamianCzajkowski in https://github.com/mirumee/ariadne/pull/1250
Full Changelog: https://github.com/mirumee/ariadne/compare/0.26.2...0.27.0
Fix convert_camel_case_to_snake by @A-Dudek in https://github.com/mirumee/ariadne/pull/1235
Full Changelog: https://github.com/mirumee/ariadne/compare/0.26.1...0.26.2
Fix python_multipart deprecation warning by @A-Dudek in https://github.com/mirumee/ariadne/pull/1230
pyproject.toml update README.MD by @KarolJagodzinski in https://github.com/mirumee/ariadne/pull/1231Full Changelog: https://github.com/mirumee/ariadne/compare/0.26.0...0.26.1
chore: DROP 3.8, leverage hatch to run tests and static analisys by @KarolJagodzinski in https://github.com/mirumee/ariadne/pull/1221
chore: DROP 3.8, leverage hatch to run tests and static analisys by @KarolJagodzinski in https://github.com/mirumee/ariadne/pull/1221
chore: rename tests.yml to test.yml by @KarolJagodzinski in (https://github.com/mirumee/ariadne/commit/d76605337a52d0eca7136e7758f997c89c8fc0af)
Full Changelog: https://github.com/mirumee/ariadne/compare/0.25.2...0.26.0
chore: DROP 3.8, leverage hatch to run tests and static analisys by @KarolJagodzinski in https://github.com/mirumee/ariadne/pull/1221
Full Changelog: https://github.com/mirumee/ariadne/compare/0.25.2...0.26.0.dev1
Breaking Change: in the ariadne.contrib.relay module a change was introduced, the global ID decoder now takes a string, not the query kwargs like in 0…
Full Changelog: https://github.com/mirumee/ariadne/compare/0.25.1...0.25.2
Breaking Change: in the ariadne.contrib.relay module a change was introduced, the global ID decoder now takes a string, not the query kwargs like in 0.25.1
fix(relay): add missing key in return RelayObjectType.resolve_wrapper by @KarolJagodzinski in https://github.com/mirumee/ariadne/pull/1224
Full Changelog: https://github.com/mirumee/ariadne/compare/0.25.0...0.25.1
Subscriptions: SSE distinct connection support by @danplischke in https://github.com/mirumee/ariadne/pull/1195
Full Changelog: https://github.com/mirumee/ariadne/compare/0.24...0.25.0
Nothing published for this version
Fixed deprecation warnings in Apollo Tracing extension.
execute_get_queries setting to the GraphQL apps that controls execution of the GraphQL "query" operations made with GET requests. Defaults to False.subscription operation execution when query is made with POST request.Fixed deprecation warnings in Apollo Tracing extension.
execute_get_queries setting to the GraphQL apps that controls execution of the GraphQL "query" operations made with GET requests. Defaults to False.subscription operation execution when query is made with POST request.Nothing published for this version
Removed validate_schema_enum_values and introduced validate_schema_default_enum_values in its place. This is a breaking change.
EnumType.bind_to_default_values method. It will be removed in a future release.repair_schema_default_enum_values to public API.validate_schema_enum_values and introduced validate_schema_default_enum_values in its place. This is a breaking change.GraphQLTransportWSHandler for query and mutation operations.Nothing published for this version
Updated the GraphiQL template with working explorer plugin URL.
Dropped support for Python 3.7.
OpenTelemetry and opentelemetry_extension extension, importable form ariadne.tracing.opentelemetry.query_validator option to ASGI and WSGI GraphQL applications that enables customization of query validation step.ERROR message in GraphQL-WS protocol having invalid payload type.make_executable_schema error when null is used as default value for input typed field argument.ExtensionSync. Extension now supports both async and sync contexts.OpenTracingSync and opentracing_extension_sync. OpenTracing and opentracing_extension now support both async and sync contexts.ApolloTracingSync. ApolloTracing now supports both async and sync contexts.Fixed .graphql definitions files not being included in the dist files
.graphql definitions files not being included in the dist filesAdded InputType for setting Python representations of GraphQL Input types
InputType for setting Python representations of GraphQL Input typesEnum types directly to make_executable_schemaconvert_names_case option to make_federated_schema.@interfaceObject directive in Apollo Federation.Fixed type annotations on EnumType.
EnumType.GraphiQL2 is now default API explorer.
explorer option to ASGI and WSGI GraphQL applications that enables API explorer customization.ExplorerHttp405 API explorer that returns 405 Method Not Allowed for GET HTTP requests.convert_names_case option to make_executable_schema to convert all names in schema to Python case using default or custom strategy.Path-like objects to load_schema_from_path.logger option to also support Logger and LoggerAdapter instance in addition to str with logger name.@tag directive used by Apollo Federation.setup.py to pyproject.toml.context_value option in ASGI and WSGI applications for callables to take query data as second argument.root_value option in ASGI and WSGI applications for callables to take operation and and variables in addition to context and parsed query.execution_context_class option to ASGI and WSGI applications.query_parser option to ASGI and WSGI GraphQL applications that enables query parsing customization.middleware option to work with callable or list of middlewares instead of MiddlewareManager instance.middleware_manager_class option to ASGI and WSGI applications.handle_request and handle_websocket methods to ASGI application that takes Starlette/FastAPI Request and Websocket objects.Adds backwards-compatilibity to context_value callables.
Adds backwards-compatilibity to context_value callables.
GraphiQL2 is now default API explorer.
explorer option to ASGI and WSGI GraphQL applications that enables API explorer customization.ExplorerHttp405 API explorer that returns 405 Method Not Allowed for GET HTTP requests.convert_names_case option to make_executable_schema to convert all names in schema to Python case using default or custom strategy.Path-like objects to load_schema_from_path.logger option to also support Logger and LoggerAdapter instance in addition to str with logger name.@tag directive used by Apollo Federation.setup.py to pyproject.toml.context_value option in ASGI and WSGI applications for callables to take query data as second argument.root_value option in ASGI and WSGI applications for callables to take operation and and variables in addition to context and parsed query.execution_context_class option to ASGI and WSGI applications.query_parser option to ASGI and WSGI GraphQL applications that enables query parsing customization.middleware option to work with callable or list of middlewares instead of MiddlewareManager instance.middleware_manager_class option to ASGI and WSGI applications.handle_request and handle_websocket methods to ASGI application that takes Starlette/FastAPI Request and Websocket objects.Fixed an error when schema that defines an interface type with fields having enum arguments with default values (eg. field(arg: Enum = ENUM_MEMBER)) i
field(arg: Enum = ENUM_MEMBER)) is introspected.Fixed an error when schema that defines an interface type with fields having enum arguments with default values (eg. field(arg: Enum = ENUM_MEMBER)) i
field(arg: Enum = ENUM_MEMBER)) is introspected.Removed usage of deprecated cgi module.
<1.0.cgi module.asgi-file-uploads optional dependency to file-uploads.Removed usage of deprecated cgi module.
<1.0.cgi module.GraphiQL2 is now default API explorer.
explorer option to ASGI and WSGI GraphQL applications that enables API explorer customization.ExplorerHttp405 API explorer that returns 405 Method Not Allowed for GET HTTP requests.logger option to also support Logger and LoggerAdapter instance in addition to str with logger name.@tag directive used by Apollo Federation.starlette dependency in setup.py to <1.0.setup.py to pyproject.toml.Fixed GraphQLTransportWSHandler implementation to handle multiple connections.
Fixed GraphQLTransportWSHandler implementation to handle multiple connections.
GraphQLTransportWSHandler implementation to handle multiple connections.Refactored ariadne.asgi.GraphQL to use strategy pattern for handling HTTP and WebSockets.
ariadne.asgi.GraphQL to use strategy pattern for handling HTTP and WebSockets.load_schema_from_path to also support .gql and .graphqls files.starlette 0.20.# Changelog - Update dependencies
Refactored ariadne.asgi.GraphQL to use strategy pattern for handling HTTP and WebSockets.
ariadne.asgi.GraphQL to use strategy pattern for handling HTTP and WebSockets.load_schema_from_path to also use .gql and .graphqls files.starlette 0.20.Fix performance regression in make_federated_schema.
make_federated_schema.Updated graphql-core requirement to 3.2.0.
graphql-core requirement to 3.2.0.starlette supported versions to 0.18 and 0.19.OPTIONS HTTP request.ariadne.asgi.GraphQL to make it easier to customize JSON response.trace_default_resolver to ApolloTracingExtension that enables tracing for default resolvers.make_federated_schema error when custom directive in schema has description.set_default_enum_values_on_schema, validate_schema_enum_values and type_implements_interface to public API.graphql_sync to use execute_sync instead of execute.on_operation hook to ariadne.asgi.GraphQL that's called when individual subscription operation is started.on_complete hook to ariadne.asgi.GraphQL that's called when individual subscription operation is completed.on_disconnect hook so its called in Webhook handler's finally clause, making it called in more situations.Extension, ExtensionSync and SchemaBindable protocols as @runtime_checkable.parent to obj in ApolloTracing and OpenTracing extensions so arg name won't cause conflict when custom resolver has parent arg.Added on_complete hook to ariadne.asgi.GraphQL that's called when individual subscription operation is completed.
on_complete hook to ariadne.asgi.GraphQL that's called when individual subscription operation is completed.on_disconnect hook so its called in Webhook handler's finally clause, making it called in more situations.Extension, ExtensionSync and SchemaBindable protocols as @runtime_checkableUpdated graphql-core requirement to 3.2.0.
graphql-core requirement to 3.2.0.starlette support to 0.18.OPTIONS HTTP request.ariadne.asgi.GraphQL to make it easier to customize JSON response.trace_default_resolver to ApolloTracingExtension that enables tracing for default resolvers.make_federated_schema error when custom directive in schema has description.set_default_enum_values_on_schema, validate_schema_enum_values and type_implements_interface to public API.Remove ariadne.contrib.django from release.
ariadne.contrib.django from release.GraphQL-core requirement at <3.2.Added on_connect and on_disconnect options to ariadne.asgi.GraphQL, enabling developers to run additional initialization and cleanup for websocket con
on_connect and on_disconnect options to ariadne.asgi.GraphQL, enabling developers to run additional initialization and cleanup for websocket connections.Query type optional in federated schemas.Mapping instead of dict.ariadne.contrib.django. (Use ariadne_django instead).Updated graphQL-core requirement to 3.1.3.
graphQL-core requirement to 3.1.3.None is now correctly returned instead of {"__typename": typename} within federation.convert_kwargs_to_snake_case and snake_case_fallback_resolvers.Added validation_rules option to query executors as well as ASGI and WSGI apps and Django view that allow developers to include custom query validatio
validation_rules option to query executors as well as ASGI and WSGI apps and Django view that allow developers to include custom query validation logic in their APIs.introspection option to ASGI and WSGI apps, allowing developers to disable GraphQL introspection on their server.validation.cost_validator query validator that allows developers to limit maximum allowed query cost/complexity.ScalarType because GraphQL already provides one.extensions and introspection configuration options to Django view.graphql-core 3.Fixed convert_kwargs_to_snake_case utility so it also converts the case in lists items.
convert_kwargs_to_snake_case utility so it also converts the case in lists items.graphql-core dependency at version 3.0.3.info.context value for WSGI to be dict with single request key.Added support for Apollo Federation.
Apollo Federation.Updated graphql-core-next to graphql-core 3.
graphql-core-next to graphql-core 3.Added recursive loading of GraphQL schema files from provided path.
*args to make_executable_schema.python-multipart optional dependency for asgi-file-uploads.Added support for custom schema directives.
Nothing published for this version
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →