<!--
{
  "availability" : [
    "iOS: 18.0.0 -",
    "iPadOS: 18.0.0 -",
    "macCatalyst: -",
    "macOS: 26.0.0 -",
    "watchOS: 26.0.0 -"
  ],
  "documentType" : "symbol",
  "framework" : "WidgetKit",
  "identifier" : "/documentation/WidgetKit/AppIntentControlConfiguration",
  "metadataVersion" : "0.1.0",
  "role" : "Structure",
  "symbol" : {
    "kind" : "Structure",
    "modules" : [
      "WidgetKit"
    ],
    "preciseIdentifier" : "s:9WidgetKit29AppIntentControlConfigurationV"
  },
  "title" : "AppIntentControlConfiguration"
}
-->

# AppIntentControlConfiguration

The description of a control that uses a custom app intent to provide
user-configurable options.

```
@MainActor @preconcurrency struct AppIntentControlConfiguration<Configuration, Content> where Configuration : ControlConfigurationIntent, Content : ControlWidgetTemplate
```

## Overview

The following example shows the configuration for a door opener control able
to open a door specified by the user.

```
struct DoorOpener: ControlWidget {
    var body: some ControlWidgetConfiguration {
        AppIntentControlConfiguration(
            kind: "com.yourcompany.GarageDoorOpener",
            provider: DoorValueProvider()
        ) { door in
            ControlWidgetToggle(
                door.name,
                isOn: door.isOpen,
                action: ToggleDoor(door)
            ) {
                Label(
                    $0 ? "Open" : "Closed",
                    systemImage: $0 ? "door.open" : "door.closed"
                )
            }
        }
    }
}
```

Every control has a unique `kind`, a string that you choose. You use this
string to identify your control when reloading its template with
[`ControlCenter`](/documentation/WidgetKit/ControlCenter).

The value provider is an object that determines a value to use to render
your template. This provider receives an intent containing user-editable
parameters.

The content closure defines the template that WidgetKit needs to render the
control. If you create the configuration using a value provider, when
WidgetKit invokes the content closure, it passes a value created by the
provider’s `AppIntentControlValueProvider/previewValue` property or
`AppIntentControlValueProvider/currentValue()` function.

---

Copyright &copy; 2026 Apple Inc. All rights reserved. | [Terms of Use](https://www.apple.com/legal/internet-services/terms/site.html) | [Privacy Policy](https://www.apple.com/privacy/privacy-policy)