<!--
{
  "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/StaticControlConfiguration",
  "metadataVersion" : "0.1.0",
  "role" : "Structure",
  "symbol" : {
    "kind" : "Structure",
    "modules" : [
      "WidgetKit"
    ],
    "preciseIdentifier" : "s:9WidgetKit26StaticControlConfigurationV"
  },
  "title" : "StaticControlConfiguration"
}
-->

# StaticControlConfiguration

The description of a control that has no user-configurable options.

```
@MainActor @preconcurrency struct StaticControlConfiguration<Content> where Content : ControlWidgetTemplate
```

## Overview

The following example shows the configuration for a garage door opener
control.

```
struct GarageDoorOpener: ControlWidget {
    var body: some ControlWidgetConfiguration {
        StaticControlConfiguration(
            kind: "com.yourcompany.GarageDoorOpener",
            provider: GarageDoorValueProvider()
        ) { isOpen in
            ControlWidgetToggle(
                "Garage Door",
                isOn: isOpen,
                action: ToggleGarageDoor()
            ) {
                Label(
                    $0 ? "Open" : "Closed",
                    systemImage: $0 ? "door.garage.open" : "door.garage.closed"
                )
            }
        }
    }
}
```

Every control has a unique `kind`, a string that you choose to uniquely
identify the type of control. 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.

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 [`previewValue`](/documentation/WidgetKit/ControlValueProvider/previewValue) property or
[`currentValue()`](/documentation/WidgetKit/ControlValueProvider/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)