GASKit Lite v0.1.0
Free Unreal Engine 5 Gameplay Ability System starter for multiplayer, in C++: ASC on the PlayerState in Mixed mode, Character init on server and client, a Health/Stamina/Mana AttributeSet with correct OnReps and clamping, a base ability with predicted cost and cooldown, native tags, and five sample abilities. Passes the GAS Net Audit.
- The problem
- Getting a replicated GAS setup right from zero: ASC on the PlayerState, init on server and client, predicted cost and cooldown, attributes that replicate and clamp.
- What it replaces
- Assembling the setup from tutorials and forum threads, then debugging it at latency.
- What it saves
- Our estimate: one to two weeks of setup and debugging. It passes the GAS Net Audit with 0 errors out of the box.
- Who it is for
- A team starting a multiplayer UE5 project on GAS, or replacing a setup that keeps breaking.
A free C++ starter for the Unreal Engine 5 Gameplay Ability System in multiplayer games. Drop it in, point your GameMode at two classes, and you have a replicated ability setup that passes the GAS Net Audit. MIT licensed, no sign-up, no assets needed.
Unreal Engine 5.3 to 5.8. Compiled clean on 5.3 to 5.8; automation tests on 5.5 to 5.8 run Heal, Strike, Regen and Death, the cost and cooldown checks, and respawn against a real Ability System Component (server side; replication itself is not simulated). Still a preview: test it in your project with two clients at 150 ms, and send problems to contact@reignancestudios.com.
What is in it
| Class | What it does |
|---|---|
AGKLPlayerState | Owns the Ability System Component and AttributeSet, so they survive respawn. Mixed replication, net update frequency 100, grants startup abilities on the server |
AGKLCharacter | Sets the ASC avatar on the server (PossessedBy) and on the owning client (OnRep_PlayerState). ActivateAbilityByTag for your input |
UGKLAttributeSet | Health, Stamina, Mana and their max values, plus a Damage meta attribute. OnReps with GAMEPLAYATTRIBUTE_REPNOTIFY, REPNOTIFY_Always, clamping of current and base values, Event.Death at 0 health |
UGKLGameplayAbility | Base ability: LocalPredicted, stamina/mana cost and cooldown set as numbers, applied with the activation's prediction key |
UGKLCostEffect, UGKLCooldownEffect, ... | Gameplay effects in C++, driven by SetByCaller, so no effect assets are needed |
GKLTags | Native gameplay tags: Ability.*, Cooldown.*, Event.Death, State.Dead, Data.* |
Five sample abilities
| Ability | Tag | Pattern it shows |
|---|---|---|
| Jump | Ability.Jump | Predicted stamina cost on top of movement the CharacterMovementComponent already predicts |
| Heal | Ability.Heal | Mana cost, 6 s cooldown and a heal on self, all predicted |
| Strike | Ability.Strike | Predicted cost and cooldown, damage applied by the server only |
| Regen | Ability.Passive.Regen | ServerOnly passive that starts when granted and runs an infinite periodic effect |
| Death | Ability.Death | ServerOnly, triggered by Event.Death, cancels abilities and adds a replicated State.Dead |
Set up
- Unzip into
YourProject/Plugins/GASKitLite, regenerate project files, build. - Make Blueprint children of
AGKLPlayerStateandAGKLCharacter(add a mesh and camera to the character). - In your GameMode, set Player State Class and Default Pawn Class to them.
- Bind input: in the character Blueprint, call Activate Ability By Tag with
Ability.Jump,Ability.HealorAbility.Strikefrom your Enhanced Input events. - Test with 2 players, Play As Client, and network emulation at 150 ms (how).
To respawn, call ResetForRespawn on the PlayerState (server) before possessing the new pawn.
Make your own ability
UCLASS()
class UMyFireball : public UGKLGameplayAbility
{
GENERATED_BODY()
public:
UMyFireball()
{
AddAbilityTag(FGameplayTag::RequestGameplayTag(TEXT("Ability.Fireball")));
ManaCost = 40.f;
CooldownDuration = 3.f;
CooldownTags.AddTag(FGameplayTag::RequestGameplayTag(TEXT("Cooldown.Fireball")));
}
};Call CommitAbility first in ActivateAbility, before any latent task, so the cost and cooldown are predicted (why). Add it to StartupAbilities on your PlayerState.
Net Audit result
Run the GAS Net Audit with the kit installed and you get 0 errors, 0 warnings, and 2 info findings that are expected:
- GA-01 on Regen: ServerOnly without triggers. Correct for a passive.
- AS-01 on Damage: not replicated. Correct for a meta attribute.
Where Lite stops
Lite has no input binding, prediction helpers or replicated montage wrapper. You will feel that the first time you need an ability that plays a montage, waits for a hit frame and stays in sync at 150 ms. That is where GASKit Pro (coming to Fab) starts: tag-driven Enhanced Input, AbilitySet bundles, tick-free UI listeners, a damage execution, and projectile, pickup and interaction frameworks.
If your own project already has these problems, the Diagnostic finds them in two days.
Changelog
v0.1.0 (2026-10-30)
- First preview release, cut from GASKit Pro.
- PlayerState with ASC (Mixed, rate 100), Character init on server and client, Health/Stamina/Mana AttributeSet.
- Base ability with predicted stamina/mana cost and SetByCaller cooldown; effects defined in C++.
- Five sample abilities: Jump, Heal, Strike, Regen (passive), Death.
- Attribute clamps write the base value only when the clamp changes it, so attribute watchers get one event per effect, not two.
- On UE 5.7 and later, State.Dead is removed through the container overload, which fires tag count events reliably.
- Automation tests on UE 5.5 to 5.8: setup and avatar, Heal cost and cooldown, cost check, Strike damage on the server, Death and respawn, Regen.