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

# QuartzUIGASBindingComponent: 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/QuartzUIGAS/Public/QuartzUIGASBindingComponent.h`) · [integration recipe](https://betterbuilt.games/docs/quartz-ui/inventory#quartzuigasbindingcomponent) · [practical guide](https://betterbuilt.games/docs/quartz-ui/integrations)

## EQuartzUIGASBindingComponentState

**Public type.** High-level lifecycle state for the feature-owned GAS adapter component.

**Prerequisites / integration:** Exact-player view plus native asset/source ownership; GAS additionally requires GameplayAbilities. Use the [QuartzUIGASBindingComponent recipe](https://betterbuilt.games/docs/quartz-ui/inventory#quartzuigasbindingcomponent) in the host module `QuartzUIGAS`.

**Minimal example / lifecycle:** Enable GameplayAbilities; add component; leave action policy Disabled. Component owns scope/retries/source subscriptions.

**Avoid:** Enabling AllDiscovered without intended gameplay authority. Match the exact declaration below; dependent DTOs/enums are values used by this owner, not independent systems.

Exact source line (source: `Source/QuartzUIGAS/Public/QuartzUIGASBindingComponent.h#L16`)

## FQuartzUIGASBindingComponentStateChanged

**Public delegate.** GASBinding Component State Changed: callback signature for optional gas activation/retry component for exact player.

**Prerequisites / integration:** Exact-player view plus native asset/source ownership; GAS additionally requires GameplayAbilities. Use the [QuartzUIGASBindingComponent recipe](https://betterbuilt.games/docs/quartz-ui/inventory#quartzuigasbindingcomponent) in the host module `QuartzUIGAS`.

**Minimal example / lifecycle:** Enable GameplayAbilities; add component; leave action policy Disabled. Component owns scope/retries/source subscriptions.

**Avoid:** Enabling AllDiscovered without intended gameplay authority. Match the exact declaration below; dependent DTOs/enums are values used by this owner, not independent systems.

Exact source line (source: `Source/QuartzUIGAS/Public/QuartzUIGASBindingComponent.h#L25`)

## FQuartzUIGASBindingComponentFailed

**Public delegate.** GASBinding Component Failed: callback signature for optional gas activation/retry component for exact player.

**Prerequisites / integration:** Exact-player view plus native asset/source ownership; GAS additionally requires GameplayAbilities. Use the [QuartzUIGASBindingComponent recipe](https://betterbuilt.games/docs/quartz-ui/inventory#quartzuigasbindingcomponent) in the host module `QuartzUIGAS`.

**Minimal example / lifecycle:** Enable GameplayAbilities; add component; leave action policy Disabled. Component owns scope/retries/source subscriptions.

**Avoid:** Enabling AllDiscovered without intended gameplay authority. Match the exact declaration below; dependent DTOs/enums are values used by this owner, not independent systems.

Exact source line (source: `Source/QuartzUIGAS/Public/QuartzUIGASBindingComponent.h#L30`)

## UQuartzUIGASBindingComponent

**Public type.** Feature-friendly GAS adapter for one exact local player. Add this component (or a project Blueprint subclass with optional policy defaults) to a local PlayerController, HUD, pawn, or bounded owner chain. GameFeatureAction_AddComponents can therefore own registration and teardown without a project C++ module or custom target. The component owns only the binding scope; the GameInstance subsystem keeps ownership of the retained browser shell across map travel.

**Prerequisites / integration:** Exact-player view plus native asset/source ownership; GAS additionally requires GameplayAbilities. Use the [QuartzUIGASBindingComponent recipe](https://betterbuilt.games/docs/quartz-ui/inventory#quartzuigasbindingcomponent) in the host module `QuartzUIGAS`.

**Minimal example / lifecycle:** Enable GameplayAbilities; add component; leave action policy Disabled. Component owns scope/retries/source subscriptions.

**Avoid:** Enabling AllDiscovered without intended gameplay authority. Match the exact declaration below; dependent DTOs/enums are values used by this owner, not independent systems.

Exact source line (source: `Source/QuartzUIGAS/Public/QuartzUIGASBindingComponent.h#L46`)

## 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 "QuartzUIGASConfig.h"

#include "QuartzUIGASBindingComponent.generated.h"

class ULocalPlayer;
class UQuartzUIGASBindingScope;
class UQuartzUIGASResolver;

/** High-level lifecycle state for the feature-owned GAS adapter component. */
UENUM(BlueprintType)
enum class EQuartzUIGASBindingComponentState : uint8
{
	Inactive,
	WaitingForLocalPlayer,
	WaitingForShell,
	Bound,
	Failed
};

DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(
	FQuartzUIGASBindingComponentStateChanged,
	EQuartzUIGASBindingComponentState, PreviousState,
	EQuartzUIGASBindingComponentState, NewState);

DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(
	FQuartzUIGASBindingComponentFailed,
	FName, ErrorCode);

/**
 * Feature-friendly GAS adapter for one exact local player.
 *
 * Add this component (or a project Blueprint subclass with optional policy
 * defaults) to a local PlayerController, HUD, pawn, or bounded owner chain.
 * GameFeatureAction_AddComponents can therefore own registration and teardown
 * without a project C++ module or custom target. The component owns only the
 * binding scope; the GameInstance subsystem keeps ownership of the retained
 * browser shell across map travel.
 */
UCLASS(BlueprintType, Blueprintable, ClassGroup = (QuartzUI),
	meta = (BlueprintSpawnableComponent, DisplayName = "QuartzUI GAS Binding"))
class QUARTZUIGAS_API UQuartzUIGASBindingComponent : public UQuartzUIBindingComponentBase
{
	GENERATED_BODY()

public:
	UQuartzUIGASBindingComponent();

	/** Requests binding now and keeps reconciling ordinary startup races. */
	UFUNCTION(BlueprintCallable, Category = "QuartzUI|GAS", meta = (DisplayName = "Activate GAS UI Binding"))
	bool ActivateGASBinding();

	/** Idempotently cancels retries and releases all GAS/UI subscriptions. */
	UFUNCTION(BlueprintCallable, Category = "QuartzUI|GAS", meta = (DisplayName = "Deactivate GAS UI Binding"))
	bool DeactivateGASBinding();

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

	UFUNCTION(BlueprintPure, Category = "QuartzUI|GAS")
	UQuartzUIGASBindingScope* GetBindingScope() const { return BindingScope; }

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

	UPROPERTY(BlueprintAssignable, Category = "QuartzUI|GAS")
	FQuartzUIGASBindingComponentStateChanged OnBindingStateChanged;

	UPROPERTY(BlueprintAssignable, Category = "QuartzUI|GAS")
	FQuartzUIGASBindingComponentFailed OnBindingFailed;

	/** Optional aliases/policy overrides. Null performs zero-authoring automatic discovery. */
	UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "QuartzUI|GAS")
	TObjectPtr<UQuartzUIGASConfig> Config;

	/** Observation is automatic; browser gameplay mutation remains an explicit policy choice. */
	UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "QuartzUI|GAS")
	EQuartzUIGASBrowserAbilityActionPolicy BrowserAbilityActionPolicy =
		EQuartzUIGASBrowserAbilityActionPolicy::Disabled;

	/** Optional project resolver override; the generic exact-player resolver is the default. */
	UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "QuartzUI|GAS")
	TSubclassOf<UQuartzUIGASResolver> ResolverClass;

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

private:
	void ReleaseScope();

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

	UFUNCTION()
	void HandleScopeFailed(FName ErrorCode);

	UPROPERTY(Transient)
	TObjectPtr<UQuartzUIGASBindingScope> BindingScope;

	EQuartzUIGASBindingComponentState BindingState = EQuartzUIGASBindingComponentState::Inactive;
};
```

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