The Task SDK

The Task SDK and Multi-Language Tasks

The Task SDK (airflow.sdk) is the stable surface for DAG authors (DAG, task, Asset, Variable, BaseOperator and more); old paths such as airflow.decorators still work with deprecation warnings. Since 3.1 it upgrades independently of the server, because it speaks only the versioned Task Execution API.

That API also made tasks in other languages possible. Airflow 3.3 129 added Java and Go Task SDKs: the task body is a Java method or a Go handler built into a JAR or binary, which the supervisor starts and which calls back over a local socket. The DAG's shape stays in Python, with a @task.stub whose queue routes it to that runtime:

stub_dag.py: a Python DAG with a task implemented in GoPython
from airflow.sdk import DAG, __version__, task
with DAG("booknest_go_scoring", schedule=None) as dag:
    @task
    def extract() -> str:
        return "landing/orders/date=2026-06-29/orders.jsonl"
    @task.stub(queue="golang")            # body lives in a compiled Go bundle
    def score_orders(path: str): ...
    score_orders(extract())
print("task-sdk", __version__)
for t in dag.tasks:
    print(f"{t.task_id:13} {type(t).__name__:22} queue={t.queue}")
Output
task-sdk 1.3.2
extract       _PythonDecoratedOperator queue=default
score_orders  _StubOperator          queue=golang

The file parses on 3.3.2; running it needs the Go bundle and a coordinator on the workers (not run here). The Go SDK's README calls it experimental, so keep production tasks in Python, or call other languages through a container (the Docker 514 and Kubernetes 5,150 providers).