Quick Start

By the end you will walk up to a chest, press the interact key, and have the chest react - in singleplayer and multiplayer - using only CrimsonInteraction. The plugin's Crimson Basic Interact ability does the scanning and the input; you author one small handler ability and the chest.

Prerequisites
Your pawn (or player state) has a UAbilitySystemComponent and you can grant abilities on the server. You have one IA_Interact Input Action mapped in an Input Mapping Context that is active for the player. How-To: Get the Building Blocks covers every node and getter used below.
Have all the Crimson plugins?
CrimsonCore (free to download, but it only compiles when all Crimson plugins are installed) ships a fuller interact ability with hold timing, duration channels and prompt widgets, a default handler, and a drop-in ACrimsonInteractableActor. If your project can use it, grant UCrimsonCoreGameplayAbility_Interact in step 5 instead of Crimson Basic Interact.

1. Enable the plugin

Enable CrimsonInteraction.

Open Edit -> Plugins, type Crimson in the search box, tick CrimsonInteraction's checkbox, and restart when prompted. For a Blueprint project that is the whole installation; there is no .uproject or .Build.cs to hand-edit.

Verify
Open Project Settings -> Crimson -> Crimson Interaction and confirm the settings page exists with default values.

2. Check the interaction tag

Interactions fire as a gameplay event. Crimson Basic Interact sends Ability.Interaction.Activate by default, and the plugin registers that tag, so there is nothing to add. (To use your own tag, change Interaction Event Tag on the ability and trigger your handler on the same tag.)

Verify
Ability.Interaction.Activate appears in the Gameplay Tag picker (open any Gameplay Tag property and search 'Interaction').

3. Author the handler ability

This is the ability an option grants via InteractionAbilityToGrant. It triggers on your activate event, reads the interactable from the payload, does its work, and ends. This one calls NotifyInteractionSuccess on the target so any interactable can react - a good generic default.

Create a Gameplay Ability Blueprint GA_InteractionHandler (Content Browser -> right-click -> Blueprint Class -> Gameplay Ability). In Class Defaults, add one entry to Ability Triggers: Trigger Tag = Ability.Interaction.Activate, Trigger Source = Gameplay Event. Leave the instancing and net policies at their defaults.

Then the graph: Event ActivateAbilityFromEvent -> Break GameplayEventData -> Notify Interaction Success -> End Ability (Target = the broken payload's Target pin, In Instigator = Get Avatar Actor From Actor Info). Notify Interaction Success is an interface message call - drag off the Target pin and it is listed under Interfaces -> Crimson Interactable Target, so it is safe to call on any actor and does nothing on one that has not implemented the interface.

Authority in the handler
LocalPredicted handlers run on the owning client and the server. Anything that mutates authoritative state (loot, doors, quest flags) must be guarded with HasAuthority() on the receiving side.

4. Make the chest interactable

Implement ICrimsonInteractableTarget on the chest and return one instant option pointing at your handler. Then react to success: the handler calls NotifyInteractionSuccess, so override that to open the chest (guard authoritative changes with HasAuthority).

On the chest Blueprint: Class Settings -> Details -> Interfaces -> Add -> Crimson Interactable Target. In My Blueprint -> Interfaces, double-click K2 Gather Interaction Options to open its graph.

In that graph: Make CrimsonInteractionOption -> Add -> Return Node, where the Make node sets Text = Open, Input Type = Instant and Interaction Ability To Grant = GA_InteractionHandler, and the Add node's Target Array is the event's Out Options pin. Leave Interactable Target unwired - the interface stamps it onto every option you add.

Then double-click Notify Interaction Success in the same Interfaces list and implement it: Event Notify Interaction Success -> Switch Has Authority -> (Authority) your loot / door / quest change, with cosmetic-only work on the Remote pin.

Verify
Place the chest in the level. It needs collision that overlaps the Visibility channel - any default static mesh qualifies. Nothing detects it yet; that is the next step.

5. Grant Crimson Basic Interact

UCrimsonGameplayAbility_BasicInteract ("Crimson Basic Interact") is a persistent, locally-predicted ability. Once granted it activates itself on the owning client, runs the scan there, grants nearby options' abilities on the server, binds your interact action, and fires the focused option on press. Make a Blueprint subclass so you can set the input action.

Content Browser -> right-click -> Blueprint Class, search for Crimson Basic Interact, and name it GA_BasicInteract. In Class Defaults set Interact Input Action = IA_Interact and Scan Mode = Line Trace (Top Down for a cursor game). Range, rate and trace channel are already seeded from Project Settings -> Crimson -> Crimson Interaction.

Grant it on the server. On the pawn: Event BeginPlay -> Switch Has Authority. From Authority: Get Ability System Component (Actor = the actor that owns your ability system component - the pawn, or its player state) -> Give Ability (Ability Class = GA_BasicInteract, Level = 1, Input ID = -1). There is no activation wire: Activate On Avatar Set (on by default) starts it on the owning client, and that local-predicted activation also starts the server instance.

Input
The ability binds IA_Interact (Started) on the local player controller's Enhanced Input component, so your pawn needs no input code. The action must be mapped in an active Input Mapping Context, and the controller must use EnhancedInputComponent (the engine default). To route input yourself, leave Interact Input Action empty and call Trigger Interaction on the ability.

6. Show a prompt (optional)

The ability keeps the options in range, focused target first, and announces every change.

In GA_BasicInteract: My Blueprint -> Functions -> Override -> Update Interactions. Keep the Parent: Update Interactions call (it stores the options and fires On Interaction Options Changed), then read Interactive Options -> Get (a copy) (Index = 0) -> Break CrimsonInteractionOption -> Text to show or hide your prompt widget. Guard the empty array with Length -> Greater (integer) first.

Verify - the full loop
PIE: walk to the chest and press interact - NotifyInteractionSuccess fires on the chest and it reacts. Tick Show Debug on GA_BasicInteract to draw the scan. Test as a client too (Net Mode: Play As Client): the very first press right after entering range can be ignored while the grant replicates; that is by design. If nothing happens, check that IA_Interact is in an active mapping context, and that the handler does not fail CanActivateAbility (cost/cooldown/tag block) - see Concept: Scan, Gather, Filter, Broadcast.
What's next
Crimson Basic Interact is instant only: hold options fire on press and duration options are not run. For hold-to-open, timed channels (mining) and a progress prompt, build your own interact ability in How-To: Write Your Own Interact Ability, then extend it with How-To: Add Holds, Channels & a Progress Prompt. Give targets per-actor feedback in How-To: World Indicators & Hold-Progress Feedback.