> This page is for SDK, version Legacy.
> For other versions, use one of these documentation indexes:
> - Current (default): https://buildwithfern.com/learn/sdks/current/llms.txt
> - Legacy: https://buildwithfern.com/learn/sdks/legacy/llms.txt

> For clean Markdown content of this page, append .md to this URL. For the complete documentation index, see https://buildwithfern.com/learn/llms.txt.

# aiohttp support

> Fern-generated Python SDKs auto-detect aiohttp for async HTTP operations, resolving DNS concurrency issues without requiring code changes.

> **You're viewing the legacy SDK docs**
>
> These pages cover SDK generation configured with `generators.yml`. New projects use `sdk-config.yml`, so see [the Current version of this page](/learn/sdks/generators/python/aiohttp-support) for up-to-date guidance. To move an existing project, follow the [SDK Config migration guide](/learn/sdks/legacy/generators/migration-guides/sdk-config), which walks through `fern sdk migrate`, and review the [`sdk-config.yml` reference](/learn/sdks/reference/sdk-config).

Every Fern-generated Python SDK ships with opt-in support for [aiohttp](https://docs.aiohttp.org/) as an async HTTP transport. When the `aiohttp` optional extra is installed, the generated async client uses it automatically instead of the default `httpx.AsyncClient`.

This matters for SDKs that make many concurrent async API calls: `httpx.AsyncClient` serializes DNS lookups via `asyncio.getaddrinfo` under heavy concurrency, while `aiohttp` uses its own resolver to avoid that bottleneck.

No generator configuration is required. The `[aiohttp]` extra, runtime auto-detection, and CI coverage are generated for every Python SDK.

## Installation

SDK users opt in by installing the `aiohttp` extra alongside your package:

```bash
pip install your-package[aiohttp]
```

Or with Poetry:

```bash
poetry add "your-package[aiohttp]"
```

If a user passes a custom `httpx_client` to the async client constructor, auto-detection is skipped and the provided client is used as-is.

## Generated dependencies

The generated `pyproject.toml` includes an `[aiohttp]` optional dependency group:

**`pyproject.toml`**

```toml title="pyproject.toml"
[tool.poetry.extras]
aiohttp = ["aiohttp", "httpx-aiohttp"]
```

If you define your own extras via the [`extras`](/learn/sdks/legacy/generators/python/configuration#extras) configuration option in `generators.yml`, the built-in `aiohttp` extra is preserved and merged with your custom configuration.

## CI testing

The generated GitHub Actions workflow runs tests in two passes so both transport paths are covered:

1. Standard tests without the aiohttp extra.
2. Tests marked `@pytest.mark.aiohttp` with the extra installed.

To verify the aiohttp path locally:

```bash
poetry install --extras aiohttp
poetry run pytest -m aiohttp
```