---
title: "QuartzUIProviderBindingComponent: declaration reference"
description: "Quartz UI 0.57.0-dev: QuartzUIProviderBindingComponent: declaration reference. Source-reviewed guidance, usage and limitations."
status: approved
visibility: public
sourceRevision: fe5b709ec900e282b50e58b819a25041945005f9
reviewedAt: 2026-09-24
---

# QuartzUIProviderBindingComponent: declaration reference

> **0.57.0-dev · beta source documentation.** Native, Blueprint, Editor and rendering examples are source-reviewed, not executed in Unreal during this scan. See [validation and limits](https://betterbuilt.games/docs/quartz-ui/evidence).

Pinned source (source: `Source/QuartzUIRuntime/Public/QuartzUIProviderBindingComponent.h`) · [integration recipe](https://betterbuilt.games/docs/quartz-ui/inventory#quartzuiproviderbindingcomponent) · [practical guide](https://betterbuilt.games/docs/quartz-ui/providers-contracts)

## EQuartzUIProviderBindingComponentState

**Public type.** Feature-owned provider activation state for one exact local player.

**Prerequisites / integration:** Configured app, explicit reflected value types, saved assets and freshly generated app contract. Use the [QuartzUIProviderBindingComponent recipe](https://betterbuilt.games/docs/quartz-ui/inventory#quartzuiproviderbindingcomponent) in the host module `QuartzUIRuntime`.

**Minimal example / lifecycle:** Add component to local controller; assign ProviderSet; inspect binding state. Component deactivation/destruction detaches providers, not shell.

**Avoid:** Using an unrelated actor without a supported owner chain. Match the exact declaration below; dependent DTOs/enums are values used by this owner, not independent systems.

Exact source line (source: `Source/QuartzUIRuntime/Public/QuartzUIProviderBindingComponent.h#L16`)

## FQuartzUIProviderBindingComponentStateChanged

**Public delegate.** Provider Binding Component State Changed: callback signature for actor-owned provider activation with exact-player resolution and retry.

**Prerequisites / integration:** Configured app, explicit reflected value types, saved assets and freshly generated app contract. Use the [QuartzUIProviderBindingComponent recipe](https://betterbuilt.games/docs/quartz-ui/inventory#quartzuiproviderbindingcomponent) in the host module `QuartzUIRuntime`.

**Minimal example / lifecycle:** Add component to local controller; assign ProviderSet; inspect binding state. Component deactivation/destruction detaches providers, not shell.

**Avoid:** Using an unrelated actor without a supported owner chain. Match the exact declaration below; dependent DTOs/enums are values used by this owner, not independent systems.

Exact source line (source: `Source/QuartzUIRuntime/Public/QuartzUIProviderBindingComponent.h#L26`)

## FQuartzUIProviderBindingComponentFailed

**Public delegate.** Provider Binding Component Failed: callback signature for actor-owned provider activation with exact-player resolution and retry.

**Prerequisites / integration:** Configured app, explicit reflected value types, saved assets and freshly generated app contract. Use the [QuartzUIProviderBindingComponent recipe](https://betterbuilt.games/docs/quartz-ui/inventory#quartzuiproviderbindingcomponent) in the host module `QuartzUIRuntime`.

**Minimal example / lifecycle:** Add component to local controller; assign ProviderSet; inspect binding state. Component deactivation/destruction detaches providers, not shell.

**Avoid:** Using an unrelated actor without a supported owner chain. Match the exact declaration below; dependent DTOs/enums are values used by this owner, not independent systems.

Exact source line (source: `Source/QuartzUIRuntime/Public/QuartzUIProviderBindingComponent.h#L31`)

## UQuartzUIProviderBindingComponent

**Public type.** Instantiates app-registered providers for the exact local player resolved through this component's controller, HUD, pawn, or owner chain. A project can add this component, or a Blueprint subclass with a provider subset, through stock GameFeatureAction_AddComponents. Component removal releases every provider while the GameInstance-owned browser shell remains.

**Prerequisites / integration:** Configured app, explicit reflected value types, saved assets and freshly generated app contract. Use the [QuartzUIProviderBindingComponent recipe](https://betterbuilt.games/docs/quartz-ui/inventory#quartzuiproviderbindingcomponent) in the host module `QuartzUIRuntime`.

**Minimal example / lifecycle:** Add component to local controller; assign ProviderSet; inspect binding state. Component deactivation/destruction detaches providers, not shell.

**Avoid:** Using an unrelated actor without a supported owner chain. Match the exact declaration below; dependent DTOs/enums are values used by this owner, not independent systems.

Exact source line (source: `Source/QuartzUIRuntime/Public/QuartzUIProviderBindingComponent.h#L45`)

## Complete header

Source snapshot, not an additional example. Unreal annotations distinguish exposed Blueprint nodes from native-only/private methods.

```cpp
#pragma once

#include "CoreMinimal.h"
#include "QuartzUIBindingScope.h"
#include "QuartzUIBindingComponentBase.h"

#include "QuartzUIProviderBindingComponent.generated.h"

class ULocalPlayer;
class UQuartzUIProvider;
class UQuartzUIProviderSet;
class UQuartzUIView;

/** Feature-owned provider activation state for one exact local player. */
UENUM(BlueprintType)
enum class EQuartzUIProviderBindingComponentState : uint8
{
	Inactive,
	WaitingForLocalPlayer,
	WaitingForShell,
	WaitingForProviders,
	Bound,
	Failed
};

DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(
	FQuartzUIProviderBindingComponentStateChanged,
	EQuartzUIProviderBindingComponentState, PreviousState,
	EQuartzUIProviderBindingComponentState, NewState);

DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(
	FQuartzUIProviderBindingComponentFailed,
	FName, ErrorCode);

/**
 * Instantiates app-registered providers for the exact local player resolved
 * through this component's controller, HUD, pawn, or owner chain.
 *
 * A project can add this component, or a Blueprint subclass with a provider
 * subset, through stock GameFeatureAction_AddComponents. Component removal
 * releases every provider while the GameInstance-owned browser shell remains.
 */
UCLASS(BlueprintType, Blueprintable, ClassGroup = (QuartzUI),
	meta = (BlueprintSpawnableComponent, DisplayName = "QuartzUI Provider Binding"))
class QUARTZUIRUNTIME_API UQuartzUIProviderBindingComponent : public UQuartzUIBindingComponentBase
{
	GENERATED_BODY()

public:
	UQuartzUIProviderBindingComponent();

	/** Requests provider activation now and reconciles ordinary startup races. */
	UFUNCTION(BlueprintCallable, Category = "QuartzUI|Providers",
		meta = (DisplayName = "Activate UI Providers"))
	bool ActivateProviderBinding();

	/** Idempotently cancels retries and releases all feature-owned providers. */
	UFUNCTION(BlueprintCallable, Category = "QuartzUI|Providers",
		meta = (DisplayName = "Deactivate UI Providers"))
	bool DeactivateProviderBinding();

	/** Rebuilds a failed or pending binding without recreating the component. */
	UFUNCTION(BlueprintCallable, Category = "QuartzUI|Providers",
		meta = (DisplayName = "Retry UI Providers"))
	bool RetryProviderBinding();

	UFUNCTION(BlueprintPure, Category = "QuartzUI|Providers")
	TArray<UQuartzUIProvider*> GetBoundProviders() const;

	UFUNCTION(BlueprintPure, Category = "QuartzUI|Providers")
	UQuartzUIProvider* GetBoundProvider(TSubclassOf<UQuartzUIProvider> ProviderClass) const;

	UFUNCTION(BlueprintPure, Category = "QuartzUI|Providers")
	EQuartzUIProviderBindingComponentState GetBindingState() const { return BindingState; }

	UPROPERTY(BlueprintAssignable, Category = "QuartzUI|Providers")
	FQuartzUIProviderBindingComponentStateChanged OnBindingStateChanged;

	UPROPERTY(BlueprintAssignable, Category = "QuartzUI|Providers")
	FQuartzUIProviderBindingComponentFailed OnBindingFailed;

	/**
	 * Optional feature subset. Empty binds every provider registered by the shell
	 * app. Every listed exact class must also be registered in that app asset.
	 */
	UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "QuartzUI|Providers")
	TArray<TSubclassOf<UQuartzUIProvider>> ProviderClasses;

	/** Optional reusable set merged with ProviderClasses before exact-class validation. */
	UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "QuartzUI|Providers")
	TSoftObjectPtr<UQuartzUIProviderSet> ProviderSet;

protected:
	virtual bool HasLiveBinding() const override;
	virtual EQuartzUIBindingAttachResult AttachBinding(
		ULocalPlayer* LocalPlayer,
		UQuartzUIView* Shell,
		FName& OutError) override;
	virtual void ReleaseBinding() override;
	virtual void HandleBindingAttached() override;
	virtual void HandleBindingLifecycleStateChanged(
		EQuartzUIBindingComponentLifecycleState PreviousState,
		EQuartzUIBindingComponentLifecycleState NewState) override;
	virtual void HandleBindingFailure(FName ErrorCode) override;

private:
	bool ResolveProviderClasses(
		UQuartzUIView* View,
		TArray<UClass*>& OutClasses,
		FName& OutError) const;
	void ReleaseProviders();
	void ReconcileProviderStates();

	UFUNCTION()
	void HandleProviderStateChanged(
		EQuartzUIBindingScopeState PreviousState,
		EQuartzUIBindingScopeState NewState);

	UFUNCTION()
	void HandleProviderFailed(FName ErrorCode);

	UPROPERTY(Transient)
	TArray<TObjectPtr<UQuartzUIProvider>> BoundProviders;

	UPROPERTY(Transient)
	TObjectPtr<UQuartzUIView> BoundView;

	EQuartzUIProviderBindingComponentState BindingState =
		EQuartzUIProviderBindingComponentState::Inactive;
	bool bReleasingProviders = false;
};
```

Canonical HTML: https://betterbuilt.games/docs/quartz-ui/reference-quartzuiproviderbindingcomponent
