CrimsonInventoryv1.0Coming to FabPersonal $49.99 · Professional $99.99
Join the Discord

A layout-agnostic, fully replicated inventory: pluggable topology (flat / grid / weight / custom), nested bags, a runtime-mutable constraint stack, fragment-composed items, currency, scoped world containers, pickups, and zero hand-written Server RPCs.

Gameplay · Inventory · Unreal Engine 5

Diablo grid, Skyrim weight, MMO slots. One replicated component.

Topology is a UCrimsonInventoryLayout data asset: flat slots, 2D grid, weight list, or your own. Rules live in a runtime-mutable constraint stack; items are Blueprint classes composed from fragments. Nested bags, currency, world containers and pickups are included, fully replicated. You bring the items, layouts and UI.

Why CrimsonInventory

The topology-agnostic inventory core that action RPGs, survival games, and MMOs can all ship on, replication included.

Topology is a data asset, not a rewrite

A UCrimsonInventoryLayout asset picks the shape: _FlatSlot for MMO slot lists, _Grid for Tetris grids, _Weight for Skyrim-style weight lists, or a C++ subclass for your own. Layouts hold no numbers: capacities are tags on the component, so swapping the asset swaps genre.

A constraint stack you mutate at runtime

Caps and rules are replicated UCrimsonInventoryConstraint objects: slot caps, tag-keyed budgets, type allow/block lists, per-region grid rules, or a Blueprint child of your own. Equipping a backpack is two calls that both replicate automatically, so a UI bound to OnConstraintChanged refreshes itself.

Items are Blueprint classes composed from fragments

A UCrimsonInventoryItemDefinition is a Blueprint class whose Fragments array defines it: stacking, footprint, visuals, tooltip, bag interior, consumable, currency. StateFragments like durability are instantiated per item and replicated. Live items are addressed by a stable server-assigned EntryId, never a slot index.

Pickups and containers with real ownership

ACrimsonPickupActorBase covers single-item drops and multi-item bags and reports partial takes when the taker's bag fills up. ACrimsonContainerActorBase gives world chests four scopes (Shared, PerPlayer, PerParty, PerMapInstance), with per-party and per-map instances net-relevant only to the players actually looking at them.

Zero hand-written Server RPCs

UCrimsonInventoryRoutingComponent on the PlayerController owns every Server RPC (move, transfer, split, sort, drop, containers, pickups), each with a _Validate that rejects nonsense first. Your UI calls it directly, and every request answers on OnOperationResult, so a refusal is never silent.

Currency, save structs, and a live inspector

Currencies come from data tables and replicate on every inventory; save data is plain structs with no save-system dependency. An editor-only Inventory Dev Tools window inspects and mutates any live inventory during PIE, and console cheats take the real client-to-server path.

A closer look

A replicated inventory running in a sitting

The Quick Start goes from an empty project to a moving, replicated inventory whose client sends a validated move request. Blueprint-only projects never touch a .uproject or a .Build.cs.

  • Register a scan path for your item Blueprints and create a layout asset
  • Put UCrimsonInventoryManagerComponent on your PlayerState and initialize it with your caps
  • Drop the routing component on your PlayerController and grant an item from the server

Change genre by swapping one asset

The same component becomes an MMO slot list, a Tarkov grid with rotation, or a Skyrim weight list by assigning a different layout asset. Constraints compose on top.

  • Typed grid cells for a potion belt, or a weight cap plus per-type count caps
  • Layouts, entries and capacity tags all replicate, so the client runs PreviewPlacement against the server's exact numbers
  • A drag ghost turns red before anything is sent, with the reason the server would have given
The same items in two inventory layouts side by side: a slot list with one item per slot, and a grid pouch where a sword lies rotated across three cells

Bags inside bags, moved as one piece

Add the Bag fragment to an item and it becomes an inventory: its own layout, its own caps, its own constraints, up to four levels deep. Moving a bag moves a subtree, so a bag never arrives empty.

  • Each bag is a layout group keyed by its entry id, so UI draws one panel per group
  • An OnLayoutGroupsChanged delegate fires when the set shifts
  • Or let a bag widen the root capacity instead of getting its own panel
  • Extract and add are the primitives; transfers and drops use the same path

Chests, banks, and party loot without netcode

Place a container actor and pick its scope: shared for everyone, per-player so each looter gets their own instance, per-party, or per-map-instance for dungeon runs. Every open, close and transfer flows through the routing component, so the whole loop is authoritative from day one.

  • Per-player containers live on that player's routing component and persist with its save struct
  • Party and map-instance containers resolve to a spawned instanced actor keyed by a scope key you supply
  • Server-side distance check on every open, close and transfer
  • Open from any input via OpenContainer; CrimsonCore adds an interact prompt and open conditions

One ability serves every consumable

Add the Consumable fragment to an item and it answers ICrimsonUsableObject. One use-ability granted once serves every consumable, so a hundred potions still cost the ability system a single spec. Trigger your own on the item's UseEventTag, or use the one CrimsonCore ships.

  • The fragment declares the gameplay event, effects, SetByCaller magnitudes, stack cost and cooldown tag
  • Your UI sends the use with SendUseEvent; CrimsonCore adds context-menu Use and action-bar presses
  • Every entry point sends the same use event, so a menu and a hotbar cannot drift apart

Technical details

Engine
UE 5.8
Tested platforms
Windows
Blueprint-ready
Yes
C++ required
No
Network replicated
Yes
Dependencies
GameplayTags, GameplayAbilities, NetCore, GameFeatures, ModularGameplay, DeveloperSettings, UMG, IrisCore, AssetRegistry

Frequently asked questions

Do I need C++ to use it?
No. For a Blueprint project, ticking the plugin in Edit → Plugins is the entire install; there is no .uproject or .Build.cs to edit. Layouts, item definitions, fragments, constraints and capacity values are all authored in the editor, and custom rules are a Blueprint child of UCrimsonInventoryConstraint overriding CanAcceptItem. Two things are C++-only today: a brand-new layout topology, and the personal-container accessors on the routing component (per-player containers call those for you). One trap worth knowing: a Blueprint constraint's rule variables are not replicated unless you tick Replicated on each one, and without that the client's placement preview disagrees with the server.
Does it work in multiplayer?
Yes: it is fully replicated by design. Entries live in a FastArray keyed by a stable EntryId that survives reorders and sorting; item instances, state fragments, constraints and currency handlers are all registered replicated subobjects; capacity tags replicate as their own fast arrays; and every mutator on the manager is authority-only. The routing component provides the client-to-server path, so you never write inventory RPCs. And because a failed request changes no state and would replicate nothing, the server always answers the requesting client through OnOperationResult, success or failure.
Does it come with an inventory UI?
No. It ships no widgets and no game content, deliberately, so it carries no dependency on any UI plugin. What it gives a UI is the data layer: flat entry, capacity and currency views built from replicated state, layout groups to draw one panel per bag, a client-side PreviewPlacement for drag validity, and a delegate per kind of change. CrimsonCore ships a complete inventory screen with drag-and-drop, tooltips and a context menu on top of this plugin; it is free to download, but compiles only with all Crimson plugins installed.
Does it depend on other Crimson plugins?
No. It builds and runs standalone with only engine plugins (GameplayAbilities, GameFeatures, ModularGameplay), and it owns its item-host and usable-object interfaces and its tag stacks. On its own it does not talk to other Crimson plugins: wire your own through ItemInstanceClass, SetEntryEquipped, ICrimsonItemHost, ICrimsonUsableObject and its delegates. CrimsonCore, the free full-suite integration layer (it requires every Crimson plugin), adds item context menus, the equip flow with CrimsonEquipment, action-bar binding, interactable containers and the shared use ability. There is deliberately no save-system dependency either: save data is plain structs.
Do I need CrimsonCommon?
No. CrimsonCommon is an optional toolbox that nothing depends on. The item-host and usable-object contracts it used to hold now live in this plugin, and every event is a delegate on the inventory's own components rather than a message-bus broadcast.
Can one game mix a grid stash, a weight backpack, and a flat hotbar?
Yes. Layout is chosen per component, so every inventory in your game picks its own topology, and caps come from each component's capacity tags rather than the layout asset. UI binds by EntryId regardless of topology, and moving items between them is one TransferItem call on the routing component, which carries a bag and its contents with it as a subtree.
Will my item Blueprints survive packaging?
Only if the asset manager knows about them. Item definitions are reached by id at runtime, which the cooker does not follow, so add the folders holding them to Item Definition Scan Paths in Project Settings and the plugin registers them as AlwaysCook primary assets. An item outside a scanned path that nothing hard-references is cooked out of a packaged build: it works perfectly in the editor and is simply missing in the shipped game, so the docs include a page on verifying this before you ship.

Ship inventory features, not inventory plumbing

Assign a layout, stack your constraints, add the routing component, and replication, bags, pickups, containers and currency are already done. Then swap topologies as your design evolves without rewriting a thing.

Pricing

CrimsonInventory is sold on Fab under Epic’s two standard licenses. Both include the full plugin, source, and updates.

Personal$49.99For individuals & teams under $100K revenueComing to Fab. Join the Discord
Professional$99.99For companies over $100K revenueComing to Fab. Join the Discord