# Apache Airflow 3.3.0: Stateful Tasks and Multi-Language Support

DevFeed: [Apache Airflow 3.3.0: Stateful Tasks and Multi-Language Support](<https://devfeed.tech/articles/apache-airflow-3-3-0-stateful-tasks-and-multi-language-support-32542.md>)

Original publisher: [Read original article](<https://airflow.apache.org/blog/airflow-3.3.0/>)

Author: Apache Airflow

Published: 2026-07-06T00:00:00Z

Content type: release

Language: en

Sources: [Apache Airflow Blog](<https://devfeed.tech/sources/apache-airflow-blog.md>)

Topics: [airflow](<https://devfeed.tech/topics/airflow.md>), [SDKs](<https://devfeed.tech/topics/sdks.md>), [Go Language](<https://devfeed.tech/topics/go-language.md>), [Java](<https://devfeed.tech/topics/java.md>)

Tags: [airflow](<https://devfeed.tech/tags/airflow.md>), [apache-airflow](<https://devfeed.tech/tags/apache-airflow.md>), [go](<https://devfeed.tech/tags/go.md>), [java](<https://devfeed.tech/tags/java.md>), [release](<https://devfeed.tech/tags/release.md>), [release-notes](<https://devfeed.tech/tags/release-notes.md>), [sdk](<https://devfeed.tech/tags/sdk.md>), [state](<https://devfeed.tech/tags/state.md>)

## AI overview

Apache Airflow 3.3.0 introduces durable state stores for tasks and assets, a Language Task SDK for Java and Go, expanded asset partitioning, and pluggable retry policies.

## Source excerpt

We're proud to announce the release of Apache Airflow 3.3.0! Where 3.2 brought precision to data with asset partitioning, 3.3 gives your tasks memory and multi-language support: a first-class state store for tasks and assets, a Language Task SDK for writing task logic in Java and Go, a major expansion of asset partitioning, and pluggable retry policies. 🎯 Release Highlights 📦 PyPI: https://pypi.org/project/apache-airflow/3.3.0/ 📚 Docs: https://airflow.apache.org/docs/apache-airflow/3.3.0/ 🛠 Release Notes: https://airflow.apache.org/docs/apache-airflow/3.3.0/release_notes.html 🐳 Docker Image: docker pull apache/airflow:3.3.0 🚏 Constraints: https://github.com/apache/airflow/tree/constraints-3.3.0 🗃 Task & Asset State Store (AIP-103): Tasks That Remember Until now, if a task needed to remember something across retries or runs -- a cursor, a checkpoint, a high-water mark -- you reached for XComs, an external store, or a clever Variable hack. Airflow 3.3 makes durable task state a first-class concept. Tasks can persist arbitrary key-value state that survives across retries and runs via a new task_state_store accessor, and assets can carry their own state via asset_state_store -- both available directly from the Task SDK. State lives in the metadata database by default, or in a custom worker-side backend ([workers] state_store_backend), supports per-key retention with periodic garbage collection and an optional clear_on_success, and is fully manageable through the Core API and Execution API. Task State Store Task state is scoped to a specific task instance and persists across retries. Use it to track coordination state like remote job IDs, cursors, or progress checkpoints: @task def extract_data(**context): task_state = context["task_state_store"] # Resume from where we left off on retry cursor = task_state.get("last_cursor", default=0) records = fetch_records(since=cursor) new_cursor = records[-1]["id"] task_state.set("last_cursor", new_cursor) return records Persisted st