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

# QuartzUIHtmlProjection: 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/QuartzUIHtmlProjection.h`) · [integration recipe](https://betterbuilt.games/docs/quartz-ui/inventory#quartzuihtmlprojection) · [practical guide](https://betterbuilt.games/docs/quartz-ui/rendering)

## FQuartzUIHtmlAnchor

**Experimental type.** A world anchor for pixels painted by an HTML document. No native widget artwork.

**Prerequisites / integration:** Exact-player app/view and real supported RHI for rendering; project-owned HTML/materials. Use the [QuartzUIHtmlProjection recipe](https://betterbuilt.games/docs/quartz-ui/inventory#quartzuihtmlprojection) in the host module `QuartzUIRuntime`.

**Minimal example / lifecycle:** Create once; Update copied anchors; PublishContent only on artwork change. Native owner destroys compositor before player/view lifetime ends.

**Avoid:** Reusing cells without paint consistency or assuming world occlusion. Match the exact declaration below; dependent DTOs/enums are values used by this owner, not independent systems.

Exact source line (source: `Source/QuartzUIRuntime/Public/QuartzUIHtmlProjection.h#L9`)

## FQuartzUIHtmlProjectionGeometry

**Experimental type.** Pixel geometry shared by current-view rendering and focused automation.

**Prerequisites / integration:** Exact-player app/view and real supported RHI for rendering; project-owned HTML/materials. Use the [QuartzUIHtmlProjection recipe](https://betterbuilt.games/docs/quartz-ui/inventory#quartzuihtmlprojection) in the host module `QuartzUIRuntime`.

**Minimal example / lifecycle:** Create once; Update copied anchors; PublishContent only on artwork change. Native owner destroys compositor before player/view lifetime ends.

**Avoid:** Reusing cells without paint consistency or assuming world occlusion. Match the exact declaration below; dependent DTOs/enums are values used by this owner, not independent systems.

Exact source line (source: `Source/QuartzUIRuntime/Public/QuartzUIHtmlProjection.h#L22`)

## FQuartzUIHtmlProjection

**Experimental type.** Experimental retained HTML surface compositor. A small browser paints a bounded atlas of rectangular HTML cells. Unreal positions those pixels using the current render view. HTML still owns the artwork and activation event.

**Prerequisites / integration:** Exact-player app/view and real supported RHI for rendering; project-owned HTML/materials. Use the [QuartzUIHtmlProjection recipe](https://betterbuilt.games/docs/quartz-ui/inventory#quartzuihtmlprojection) in the host module `QuartzUIRuntime`.

**Minimal example / lifecycle:** Create once; Update copied anchors; PublishContent only on artwork change. Native owner destroys compositor before player/view lifetime ends.

**Avoid:** Reusing cells without paint consistency or assuming world occlusion. Match the exact declaration below; dependent DTOs/enums are values used by this owner, not independent systems.

Exact source line (source: `Source/QuartzUIRuntime/Public/QuartzUIHtmlProjection.h#L34`)

## 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"

class ULocalPlayer;
class UQuartzUIView;
class FQuartzUIHtmlProjectionImpl;

/** A world anchor for pixels painted by an HTML document. No native widget artwork. */
struct FQuartzUIHtmlAnchor
{
    FString Key;
    FVector Position = FVector::ZeroVector;
    int32 Cell = 0;
    int32 HoverCell = 1;
    int32 PressedCell = 1;
    float HitRadius = 14.0f;
    /** Fraction of the HTML cell placed at Position; centered by default. */
    FVector2D Pivot = FVector2D(0.5, 0.5);
};

/** Pixel geometry shared by current-view rendering and focused automation. */
class QUARTZUIRUNTIME_API FQuartzUIHtmlProjectionGeometry
{
public:
    static bool IsValidAnchor(const FQuartzUIHtmlAnchor& Anchor);
    static FVector4f PixelRect(FVector2D Point, FVector2D OutputScale, FIntPoint CellPixels, FVector2D Pivot);
};

/**
 * Experimental retained HTML surface compositor. A small browser paints a
 * bounded atlas of rectangular HTML cells. Unreal positions those pixels using the
 * current render view. HTML still owns the artwork and activation event.
 */
class QUARTZUIRUNTIME_API FQuartzUIHtmlProjection final
{
public:
    FQuartzUIHtmlProjection(ULocalPlayer* Player, UQuartzUIView* View, const FString& Url,
        FIntPoint AtlasCells = FIntPoint(2, 1), FIntPoint CellPixels = FIntPoint(64, 64), bool bInteractive = true);
    ~FQuartzUIHtmlProjection();
    bool Update(TArray<FQuartzUIHtmlAnchor> Anchors, float DeltaSeconds);
    void SetCallbacks(TFunction<void(const FString&)> Activate, TFunction<void(const FString&)> Hover);
    /** Retained, bounded projection.content state. Publish only artwork changes, never camera positions. */
    bool PublishContent(const FString& PayloadJson);
private:
    TSharedPtr<FQuartzUIHtmlProjectionImpl> Impl;
};
```

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