Quartz UI ↗
Browse docs
On this page
Private preview · 0.57.0-devView Markdown

QuartzUIProjectSettings: 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.

Pinned source (source: Source/QuartzUIRuntime/Public/QuartzUIProjectSettings.h) · integration recipe · practical guide

EQuartzUIStartupPolicy

Internal type. Whether the canonical shell is started by a later host adapter or explicitly by game code.

Prerequisites / integration: Compatible C++ Unreal 5.8 Win64 host, installed plugin and host-owned app files. Use the QuartzUIProjectSettings recipe in the host module QuartzUIRuntime.

Minimal example / lifecycle: Select DefaultApp and Manual startup, then Start UI Shell. Config=Game; saved in project defaults.

Avoid: Putting Node paths or secrets into shared runtime policy. This named helper is runtime-owned; inspect/use it through the owner above rather than constructing it in gameplay.

Exact source line (source: Source/QuartzUIRuntime/Public/QuartzUIProjectSettings.h#L19)

EQuartzUINativeFallbackPolicy

Internal type. Native presentation used when Chromium is unavailable or terminally failed.

Prerequisites / integration: Compatible C++ Unreal 5.8 Win64 host, installed plugin and host-owned app files. Use the QuartzUIProjectSettings recipe in the host module QuartzUIRuntime.

Minimal example / lifecycle: Select DefaultApp and Manual startup, then Start UI Shell. Config=Game; saved in project defaults.

Avoid: Putting Node paths or secrets into shared runtime policy. This named helper is runtime-owned; inspect/use it through the owner above rather than constructing it in gameplay.

Exact source line (source: Source/QuartzUIRuntime/Public/QuartzUIProjectSettings.h#L27)

EQuartzUICookPolicy

Internal type. Version-one packaging contract. Unknown values fail validation.

Prerequisites / integration: Compatible C++ Unreal 5.8 Win64 host, installed plugin and host-owned app files. Use the QuartzUIProjectSettings recipe in the host module QuartzUIRuntime.

Minimal example / lifecycle: Select DefaultApp and Manual startup, then Start UI Shell. Config=Game; saved in project defaults.

Avoid: Putting Node paths or secrets into shared runtime policy. This named helper is runtime-owned; inspect/use it through the owner above rather than constructing it in gameplay.

Exact source line (source: Source/QuartzUIRuntime/Public/QuartzUIProjectSettings.h#L35)

EQuartzUISecurityPolicy

Internal type. Compiled Shipping boundary. Per-app assets cannot override this policy.

Prerequisites / integration: Compatible C++ Unreal 5.8 Win64 host, installed plugin and host-owned app files. Use the QuartzUIProjectSettings recipe in the host module QuartzUIRuntime.

Minimal example / lifecycle: Select DefaultApp and Manual startup, then Start UI Shell. Config=Game; saved in project defaults.

Avoid: Putting Node paths or secrets into shared runtime policy. This named helper is runtime-owned; inspect/use it through the owner above rather than constructing it in gameplay.

Exact source line (source: Source/QuartzUIRuntime/Public/QuartzUIProjectSettings.h#L42)

UQuartzUIProjectSettings

Public type. Shareable runtime policy shown at Project Settings > Plugins > QuartzUI. Machine-local Node, Vite, and DevTools preferences remain in UQuartzUIEditorSettings (EditorPerProjectUserSettings).

Prerequisites / integration: Compatible C++ Unreal 5.8 Win64 host, installed plugin and host-owned app files. Use the QuartzUIProjectSettings recipe in the host module QuartzUIRuntime.

Minimal example / lifecycle: Select DefaultApp and Manual startup, then Start UI Shell. Config=Game; saved in project defaults.

Avoid: Putting Node paths or secrets into shared runtime policy. Match the exact declaration below; dependent DTOs/enums are values used by this owner, not independent systems.

Exact source line (source: Source/QuartzUIRuntime/Public/QuartzUIProjectSettings.h#L53)

Complete header

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

#pragma once

#include "CoreMinimal.h"
#include "Engine/DeveloperSettings.h"
#include "QuartzUIApp.h"
#include "QuartzUIInput.h"
#include "QuartzUILoadRecovery.h"
#include "QuartzUIReadiness.h"

#include "QuartzUIProjectSettings.generated.h"

class UStringTable;
class UUserWidget;
class UQuartzUISoundHandler;
class UQuartzUISoundSet;

/** Whether the canonical shell is started by a later host adapter or explicitly by game code. */
UENUM(BlueprintType)
enum class EQuartzUIStartupPolicy : uint8
{
	Manual,
	Automatic
};

/** Native presentation used when Chromium is unavailable or terminally failed. */
UENUM(BlueprintType)
enum class EQuartzUINativeFallbackPolicy : uint8
{
	BuiltIn,
	ProjectWidget
};

/** Version-one packaging contract. Unknown values fail validation. */
UENUM(BlueprintType)
enum class EQuartzUICookPolicy : uint8
{
	UFSOnly
};

/** Compiled Shipping boundary. Per-app assets cannot override this policy. */
UENUM(BlueprintType)
enum class EQuartzUISecurityPolicy : uint8
{
	LockedDown
};

/**
 * Shareable runtime policy shown at Project Settings > Plugins > QuartzUI.
 * Machine-local Node, Vite, and DevTools preferences remain in
 * UQuartzUIEditorSettings (EditorPerProjectUserSettings).
 */
UCLASS(Config = Game, DefaultConfig, meta = (DisplayName = "QuartzUI"))
class QUARTZUIRUNTIME_API UQuartzUIProjectSettings final : public UDeveloperSettings
{
	GENERATED_BODY()

public:
	static const UQuartzUIProjectSettings* Get();

	virtual FName GetContainerName() const override { return TEXT("Project"); }
	virtual FName GetCategoryName() const override { return TEXT("Plugins"); }
	virtual FName GetSectionName() const override { return TEXT("QuartzUI"); }

	/** Canonical project-owned shell app. Empty is valid while startup is Manual. */
	UPROPERTY(Config, EditAnywhere, Category = "Default Shell", meta = (AllowedClasses = "/Script/QuartzUIRuntime.QuartzUIAppAsset"))
	TSoftObjectPtr<UQuartzUIAppAsset> DefaultApp;

	/** Additional advanced apps registered by project configuration. */
	UPROPERTY(Config, EditAnywhere, Category = "Default Shell", meta = (AllowedClasses = "/Script/QuartzUIRuntime.QuartzUIAppAsset"))
	TArray<TSoftObjectPtr<UQuartzUIAppAsset>> RegisteredApps;

	UPROPERTY(Config, EditAnywhere, Category = "Startup")
	EQuartzUIStartupPolicy StartupPolicy = EQuartzUIStartupPolicy::Manual;

	/** Initial client-side screen/route intent. */
	UPROPERTY(Config, EditAnywhere, Category = "Startup")
	FName DefaultScreen = TEXT("main-menu");

	/** Initial built-in layer used by the canonical shell host. */
	UPROPERTY(Config, EditAnywhere, Category = "Startup")
	FName StartupLayer = TEXT("quartzui.hud");

	UPROPERTY(Config, EditAnywhere, Category = "Startup", meta = (ClampMin = "-10000", ClampMax = "10000"))
	int32 ViewportZOrder = 1000;

	/** Project-relative frontend source root; never written beneath an installed plugin. */
	UPROPERTY(Config, EditAnywhere, Category = "Resource Roots")
	FString FrontendSourceRoot = TEXT("QuartzUI/Source");

	/** Project-relative compiled-output root. */
	UPROPERTY(Config, EditAnywhere, Category = "Resource Roots")
	FString FrontendBuildRoot = TEXT("QuartzUI/Build");

	/** Fixed project Content-relative production app parent for v1. */
	UPROPERTY(Config, EditAnywhere, Category = "Resource Roots")
	FString CookedAppRoot = TEXT("Content/QuartzUI/Apps");

	/** Optional Unreal String Table retained as localization authority. */
	UPROPERTY(Config, EditAnywhere, Category = "Localization")
	TSoftObjectPtr<UStringTable> LocalizationStringTable;

	/** Project-relative generated localization catalog root. */
	UPROPERTY(Config, EditAnywhere, Category = "Localization")
	FString GeneratedLocalizationRoot = TEXT("QuartzUI/Generated/Localization");

	/** BCP-47-style cultures compiled for the web shell. Empty defers to project localization settings. */
	UPROPERTY(Config, EditAnywhere, Category = "Localization")
	TArray<FString> SupportedCultures;

	/** Optional app used while the retained shell cannot present loading state. */
	UPROPERTY(Config, EditAnywhere, Category = "Loading and Fallback", meta = (AllowedClasses = "/Script/QuartzUIRuntime.QuartzUIAppAsset"))
	TSoftObjectPtr<UQuartzUIAppAsset> LoadingApp;

	UPROPERTY(Config, EditAnywhere, Category = "Loading and Fallback")
	EQuartzUINativeFallbackPolicy NativeFallbackPolicy = EQuartzUINativeFallbackPolicy::BuiltIn;

	/** Required only when NativeFallbackPolicy is ProjectWidget. */
	UPROPERTY(Config, EditAnywhere, Category = "Loading and Fallback", meta = (EditCondition = "NativeFallbackPolicy == EQuartzUINativeFallbackPolicy::ProjectWidget"))
	TSoftClassPtr<UUserWidget> NativeFallbackWidgetClass;

	UPROPERTY(Config, EditAnywhere, Category = "Presentation", meta = (ClampMin = "0.75", ClampMax = "2.0"))
	float DefaultTextScale = 1.0f;

	UPROPERTY(Config, EditAnywhere, Category = "Presentation")
	bool bDefaultReducedMotion = false;

	UPROPERTY(Config, EditAnywhere, Category = "Presentation")
	bool bDefaultHighContrast = false;

	UPROPERTY(Config, EditAnywhere, Category = "Presentation")
	bool bDefaultTransparency = true;

	UPROPERTY(Config, EditAnywhere, Category = "Presentation")
	bool bDefaultTextSelection = false;

	UPROPERTY(Config, EditAnywhere, Category = "Presentation")
	bool bDefaultSceneBackdrop = true;

	UPROPERTY(Config, EditAnywhere, Category = "Input")
	FQuartzUIInputConfig DefaultInputConfig;

	/** Base semantic cue mapping for every local player's sound-set stack. */
	UPROPERTY(Config, EditAnywhere, Category = "Audio")
	TSoftObjectPtr<UQuartzUISoundSet> DefaultSoundSet;

	/** Project-wide backend used when a resolving sound set has no override. */
	UPROPERTY(Config, EditAnywhere, Category = "Audio")
	TSoftClassPtr<UQuartzUISoundHandler> DefaultSoundHandlerClass;

	UPROPERTY(Config, EditAnywhere, Category = "Performance", meta = (ClampMin = "1", ClampMax = "120"))
	int32 DefaultBrowserFrameRate = 60;

	UPROPERTY(Config, EditAnywhere, Category = "Performance", meta = (ClampMin = "1", ClampMax = "8"))
	int32 MaxViewsPerPlayer = 1;

	UPROPERTY(Config, EditAnywhere, Category = "Performance", meta = (ClampMin = "1", ClampMax = "16"))
	int32 MaxTotalViews = 4;

	UPROPERTY(Config, EditAnywhere, Category = "Performance", meta = (ClampMin = "100", ClampMax = "30000"))
	int32 MaxStartupMilliseconds = 5000;

	UPROPERTY(Config, EditAnywhere, Category = "Performance", meta = (ClampMin = "16", ClampMax = "2048"))
	int32 MaxSurfaceMemoryMiB = 256;

	UPROPERTY(Config, EditAnywhere, Category = "Recovery", meta = (ClampMin = "0", ClampMax = "8"))
	int32 DefaultMaxLoadRecoveryAttempts = FQuartzUILoadRecoveryPolicy::DefaultMaxAttempts;

	UPROPERTY(Config, EditAnywhere, Category = "Recovery", meta = (ClampMin = "0.1", ClampMax = "30.0"))
	float DefaultHandshakeTimeoutSeconds = FQuartzUIReadinessPolicy::DefaultHandshakeTimeoutSeconds;

	UPROPERTY(Config, EditAnywhere, Category = "Cooking")
	EQuartzUICookPolicy CookPolicy = EQuartzUICookPolicy::UFSOnly;

	/** Project-relative deterministic manifest output. */
	UPROPERTY(Config, EditAnywhere, Category = "Cooking")
	FString ManifestOutput = TEXT("Saved/QuartzUI/quartzui-staging-manifest.json");

	UPROPERTY(Config, EditAnywhere, Category = "Cooking")
	bool bRejectSourceMaps = true;

	UPROPERTY(Config, EditAnywhere, Category = "Cooking")
	bool bRequireCurrentContract = true;

	UPROPERTY(Config, EditAnywhere, Category = "Cooking")
	bool bRequireCurrentLocalization = true;

	UPROPERTY(Config, EditAnywhere, Category = "Diagnostics")
	bool bEnableRuntimeDiagnostics = true;

	/** Shipping validation rejects this even if configuration data is edited by hand. */
	UPROPERTY(Config, EditAnywhere, Category = "Diagnostics")
	bool bEnableVerboseShippingDiagnostics = false;

	/** Shareable permission; the machine-local editor setting still chooses whether to start DevTools. */
	UPROPERTY(Config, EditAnywhere, Category = "Secure Runtime Policy")
	bool bPermitEditorDevTools = true;

	/** Shareable permission; actual Node path, Vite port, and process ownership remain per-user. */
	UPROPERTY(Config, EditAnywhere, Category = "Secure Runtime Policy")
	bool bPermitEditorDevelopmentOrigins = true;

	UPROPERTY(Config, EditAnywhere, Category = "Secure Runtime Policy")
	EQuartzUISecurityPolicy ShippingSecurityPolicy = EQuartzUISecurityPolicy::LockedDown;

	/** Explicitly loads the configured default app, or returns null when none is selected. */
	UQuartzUIAppAsset* LoadDefaultAppAsset() const;

	/** C++ resolution path used by the canonical shell and validation service. */
	bool TryResolveAppDefinition(
		const UQuartzUIAppAsset* App,
		FQuartzUIAppDefinition& OutDefinition,
		FString& OutError) const;

#if WITH_EDITOR
	virtual void PostEditChangeProperty(FPropertyChangedEvent& PropertyChangedEvent) override;
#endif
};