Quick Start

Get one experience loading in a level, from nothing. At the end a Print String fires when the experience is live and the log shows the state machine reaching Loaded.

1. Enable the plugin

Open Edit -> Plugins, type Crimson in the search box, tick CrimsonExperience's checkbox, and restart when prompted. GameFeatures and ModularGameplay come in as declared dependencies - there is nothing to tick separately. For a Blueprint project that is the whole installation; you never hand-edit the .uproject.

Verify
Restart the editor. Edit -> Project Settings has a Crimson -> Crimson Experience section, and Window -> Developer Tools -> Asset Manager lists the plugin's three primary asset types.

2. Point the plugin at your experience folders, and set the policy

The plugin registers its three primary asset types itself, as soon as the asset manager exists, and marks them AlwaysCook - you only tell it which folders to scan. Set them in Project Settings -> Crimson -> Crimson Experience -> Asset Discovery -> Primary Asset Scan Paths, using the mount path the Content Browser's Copy Reference gives you for that folder. The panel writes Config/DefaultCrimsonExperience.ini. The Game Features subsystem still has to be told which policy class to use, and that one lives in Config/DefaultGame.ini.

ini
; Config/DefaultCrimsonExperience.ini (written for you by the Project Settings panel)
[/Script/CrimsonExperience.CrimsonExperienceSettings]
+PrimaryAssetScanPaths=(Path="<your experience folder>")
; Config/DefaultGame.ini (add this by hand)
[/Script/GameFeatures.GameFeaturesSubsystemSettings]
GameFeaturesManagerClassName=/Script/CrimsonExperience.CrimsonGameFeaturePolicy
Scan paths are what keep experiences in a cook
An experience is reached through an FPrimaryAssetId, which the cooker does not follow. The plugin marks the types AlwaysCook, but it can only do that for folders you name here - an experience outside them loads in the editor and is missing from the package. You do not need PrimaryAssetTypesToScan entries in DefaultGame.ini; leaving old ones there as well would register each type twice.
Verify
Restart the editor. Window -> Developer Tools -> Asset Manager (or the Asset Audit window) lists all three types with a non-zero count once you have authored an asset in step 3.

3. Create an Experience asset

UCrimsonExperienceDefinition is Const and Blueprintable: create a Blueprint Class deriving from it, not a data asset instance. Name it ExpDef_MyMode and put it in the directory you scanned.

PropertyWhat to put in it
GameFeaturesToEnableNames of Game Feature plugins to activate. Leave empty for now.
ActionsInstanced UGameFeatureActions run for this experience only. Leave empty for now.
ActionSetsReusable bundles - see How-To: Share Actions with an Action Set.
DefaultPawnDataOptional. A UCrimsonPawnDataBase subclass your game mode reads back.
LoadingScreenOptional presentation for loads while this experience is current.
Verify
The asset saves without a data validation error. An empty Actions array is valid - a null entry in it is not.

4. Host the manager component on your GameState

UCrimsonExperienceManagerComponent is a UGameStateComponent and must live on the game state, because that is what replicates the current experience to clients.

Open your GameState Blueprint -> Add Component -> Crimson Experience Manager Component. No configuration on the component itself; the game mode drives it.

Verify
Play In Editor and check the GameState in the World Outliner - the component is present on both server and client.

5. Tell the game mode which experience to load

SetCurrentExperience is server only and takes an FPrimaryAssetId. Call it once, after the game state exists - InitGame is too early, so defer a tick.

SetCurrentExperience is C++ only, because FPrimaryAssetId resolution and the authority gate are not things to hand-roll in a graph. Use the C++ tab for this step; everything after it is available in Blueprint.

Verify
Play In Editor. The log shows the experience resolving and loading. A Failed to identify experience error means the FPrimaryAssetId did not resolve - re-check the type name and asset name against step 2.

6. React when it is ready

Anything that builds on what the experience set up waits for it rather than assuming BeginPlay ordering.

In any actor: Event BeginPlay -> Wait For Experience Ready -> (On Ready) -> Print String. The node fires immediately if the experience already loaded, so it is safe regardless of ordering.

Verify
The print fires on both server and client. Now Play As Client with 2 players: it fires for each client too, because the experience replicates and every machine runs its own load. If it fires only on the server, the manager component is not on the game state.
What's next
Learn the getter chains once (How-To: Get the Building Blocks), then hold your code until the experience is live (How-To: Wait for the Experience), share actions between experiences (How-To: Share Actions with an Action Set), and add a front end (How-To: Add a Front-End Experience). For the model, read Concept: What an Experience Is and Concept: The Load Sequence.