Client Options - The Temporal client takes more of its settings from TEMPORAL config.
CONNECT_TIMEOUT bounds the TCP connection attempt, GRPC_COMPRESSION (gzip or none) controls gRPC compression (the SDK gzips by default since 1.29, which breaks proxies without gRPC compression), and PAYLOADS_WARN_SIZE / MEMO_WARN_SIZE set the payload and memo size warning limits
TLS_SERVER_NAME, TLS_VERIFICATION_SERVER_NAME and TLS_ENABLED add a server name override, a certificate-only name check that leaves SNI alone, and a TLS switch; the CA certificate alone now gives server-only TLS, and only a client certificate without its key (or the reverse) is rejected
METRICS_GLOBAL_TAGS adds tags to every SDK metric and SDK_CORE_LOG_LEVEL sets the log level of the SDK core
RUNTIME_DISABLE_ENVIRONMENT_INFO keeps runtime and hosting information out of worker heartbeats
TemporalAdapter and TemporalWorkerManager accept a data_converter and interceptors; client interceptors that also implement the worker interface apply to every worker the manager starts
Pydantic Payloads - Workflow and activity payloads use temporalio's Pydantic data converter by default (PYDANTIC_DATA_CONVERTER), so Pydantic models, datetimes and decimals round trip. Pass data_converter to add a payload codec for encryption or compression.
Worker Options - start_worker accepts tuner, activity_executor, deployment_config, workflow_failure_exception_types and workflow_runner; WORKER_POLLER_AUTOSCALING turns on poller autoscaling and WORKER_MAX_ACTIVITIES_PER_SECOND, WORKER_MAX_TASK_QUEUE_ACTIVITIES_PER_SECOND and WORKER_MAX_EAGER_ACTIVITY_RESERVATIONS set the rate limits and the eager reservations.
Workflow IDs - start_workflow and execute_workflow accept id_reuse_policy and id_conflict_policy, so a start can be idempotent with USE_EXISTING. Generated workflow and worker IDs are UUIDv7.
Workflow Listing - list_workflows takes a limit and the new iter_workflows pages through results without loading them all.
Schedules - Added pause_schedule, unpause_schedule, trigger_schedule, describe_schedule, update_schedule, list_schedules and delete_schedule; create_schedule accepts args and memo.
Domain Errors - Adapter calls raise ArchiPy errors instead of Temporal's: AlreadyExistsError (with the run_id and first_run_id of the running workflow), NotFoundError, UnavailableError, DeadlineExceededError, WorkerConnectionError and TemporalError.
S3 Checksums and CA Bundle - REQUEST_CHECKSUM_CALCULATION and RESPONSE_CHECKSUM_VALIDATION control the S3 checksums boto3 enables by default since 1.36 (older MinIO servers reject them), and CA_BUNDLE points to a CA bundle for certificate checks.
Activity Heartbeat Default - Behavior:ACTIVITY_HEARTBEAT_TIMEOUT defaults to None. The old 10 seconds failed every activity that does not heartbeat.
Workflow Timeouts - Behavior:WORKFLOW_RUN_TIMEOUT and WORKFLOW_EXECUTION_TIMEOUT default to unbounded instead of 60 and 300 seconds. A run timeout above the execution timeout is still rejected, but the task timeout no longer has to be below the run timeout. A timeout of 0 passed to a call means unbounded.
Workflow Retries - Behavior: the RETRY_* policy is no longer applied to whole workflows, because a workflow retry reruns it from the start. Set WORKFLOW_RETRY_ENABLED to bring it back.
Activity Errors - Behavior:BaseActivity no longer logs the error message, only its type, and an ArchiPy error with a 4xx HTTP status fails the activity without retries. Override _is_non_retryable to change the rule.
Worker Shutdown - stop lets the SDK enforce the graceful shutdown timeout, and shutdown_all_workers stops workers concurrently.
Sandboxed Config - BaseWorkflow reads the host process configuration inside the workflow sandbox, and its activity and child workflow helpers default to the workflow's own task queue instead of a configured one.
Hostname Verification - Behavior: SSL connections verify the broker hostname. SSL_ENDPOINT_IDENTIFICATION_ALGORITHM defaults to https; set it to none for brokers whose certificates do not match their address, which logs a warning.
Producer Close - close closes the producer instead of only flushing it, which also aborts an open transaction.
Session Settings - The TLS and timeout settings (CA_CERT_PATH, VERIFY_SSL, CONNECT_TIMEOUT, READ_TIMEOUT) are applied. hvac copied the session's own verify over them and used a fixed 30 second timeout.
Execution Profile - Policies and the request timeout are set in the default execution profile instead of the deprecated legacy Cluster arguments.
Pool Settings - Behavior:MAX_CONNECTIONS_PER_HOST, MIN_CONNECTIONS_PER_HOST, CORE_CONNECTIONS_PER_HOST and MAX_REQUESTS_PER_CONNECTION were never applied, because scylla-driver has no per-host pool sizing. They stay, and a DeprecationWarning names those set to a non-default value.
Async Token Validation - validate_token and get_token_info of the async adapter verify against every key of the realm's JWKS instead of one realm key, so they keep working after a key rotation, like the sync adapter.
Pushgateway Grouping Key - Behavior: the Pushgateway grouping key gets an instance label unless one is configured: POD_NAME, else HOSTNAME or the host name. Several replicas used to share one group and overwrite each other's metrics, and a shutdown deleted the shared group. A pod that crashes leaves its group behind; see the observability tutorial.
Logging Handler - Log records ship through the LoggingHandler of opentelemetry-instrumentation-logging, which the otel extra now installs. The SDK's own handler is deprecated since OpenTelemetry 1.40 and remains the fallback.
Request Body - Search and index creation expand the request body into keyword arguments, avoiding the client's deprecation warning when both are passed.
MySQL and StarRocks Error Codes - Database errors are classified by the MySQL error number before the SQLSTATE. pymysql 1.2 and asyncmy 0.2.14 attach a SQLSTATE to server errors, which made deadlocks serialization failures, lock timeouts connection errors and duplicate keys generic integrity errors.
StarRocks Connect Timeout - CONNECT_TIMEOUT is applied.
In-Memory SQLite - Connections of an in-memory database are no longer recycled, which discarded the database.
Async Extras - archipy-mysql[async], archipy-starrocks[async] and archipy-sqlite depend on sqlalchemy[asyncio], because SQLAlchemy 2.1 no longer installs greenlet.
Activity Cache Key - BaseActivity builds its cache key from a SHA-256 digest of the input. hash() is salted per process, so workers never shared a key.
Worker Failures - WorkerHandle tracks the worker run task: is_running turns False when it ends, and run_error holds the error that ended it.
Concurrent Clients - Concurrent first calls share one client.
Cancel Reason - cancel_workflow passes its reason.
Schedules - stop_schedule is deprecated for delete_schedule, because it deleted the schedule.
Atomic Activities - AtomicActivity.with_db_type returns a validated copy instead of raising NotImplementedError.
Runtime Errors - A Runtime that cannot be built raises ConfigurationError instead of silently dropping the SDK metrics.
New Scenarios - Replaying recorded histories to catch non-determinism, long timers in a time-skipping environment (start_time_skipping_v2), the heartbeat default, client and worker interceptors, the Pydantic round trip, error mapping, schedule management and the new client and worker options.
Documentation - Tutorials gained admonitions, sync and async tabs, cross-links to the BDD features, an extras reference, a Pydantic AI tutorial, scheduler, cache and health check tutorials, a deprecations page, and a section on running Pushgateway with several replicas.
Lower Bounds - Dependency lower bounds match uv.lock, including opentelemetry-* 1.45.2 / 0.66b2, temporalio 1.35.0, pydantic 2.14.2, grpcio 1.85.1 and cachetools 7.2.7.
Removed - pydantic-extra-types (not imported anywhere), types-requests and types-cachetools (both libraries ship their own types), and the unused pool extra of psycopg.
Added - opentelemetry-instrumentation-logging in the otel extra.
Test Images - Redis 8.10.3, Mailpit 1.33.0 and OpenTelemetry Collector 0.164.0.