Ha IOS Concurrency

Asynchronous code and server networking conventions. Use when writing async/await, Tasks, actors, or Combine, deciding whether to touch PromiseKit, annotating view models with @MainActor, or calling the Home Assistant server via HAKit.

home-assistant Updated

File contents

Concurrency & Networking

Concurrency

Prefer Swift Concurrency (async/await, Task, actors, structured concurrency) for all new asynchronous code.

  • Do not introduce new PromiseKit code. PromiseKit is a legacy dependency that the codebase is gradually moving away from. Parts of HomeAssistantAPI (HAAPI.swift) still use it, so don't assume a full migration — but new work should use async/await instead of Promise/Guarantee.
  • When touching existing PromiseKit code, migrate it to async/await where practical rather than extending the PromiseKit usage.
  • Use Combine only where an existing reactive pattern already requires it; otherwise prefer async/await and AsyncStream/AsyncSequence.
  • Annotate SwiftUI-facing view models with @MainActor.

Networking

Use HAKit (the Home Assistant Swift SDK) for server communication:

  • REST API calls via HAConnection
  • WebSocket subscriptions for real-time updates
  • Connection info managed through Current.servers
  • Prefer async/await for new request flows (see Concurrency above); avoid adding new PromiseKit-based calls.

home-assistant/ios/tree/main/.agents/skills/ha-ios-concurrency commit 573fc5dc52

Frequently asked questions

npx skillmds@latest add home-assistant/ha-ios-concurrency