---
title: Conventions & guidelines
product: Advanced Framework Pro
version: 1.0
engine: Unreal Engine 5.8
updated: 2026-10-05
canonical: https://docs.human-codeable.com/guides/conventions.html
---

# Conventions & guidelines

The rules the framework follows internally. Following them in your own content keeps everything consistent and makes the framework's own tooling work on your assets.

## Naming

| Prefix | Meaning |
|---|---|
| `BP_` | Actor or object Blueprint |
| `BPC_` | Component |
| `BPI_` / `Interface_` | Blueprint interface |
| `WBP_` / `AF` | Widget Blueprint (`AF` for design-system primitives) |
| `PDA_` / `DA_` | Primary data asset class / instance |
| `FL_` / `BFL_` | Blueprint function library |
| `ML_` | Blueprint macro library |
| `ST_` / `Struct_` | Struct |
| `E_` | Enum |
| `SM_` / `M_` / `MI_` / `T_` | Static mesh / material / material instance / texture |

Plugin prefixes are `AFS_` for systems, `AFM_` for modules, `AFA_` for assets, `AFE_` for environments and `AFU_` for utilities.

## Folder layout inside a plugin

`Blueprints`, `Components`, `DataAssets`, `Enums`, `Helper`, `Interfaces`, `Libraries`, `Structs`, `Widgets`. Helper actors spawned at runtime go in `Helper`; anything a user places goes in `Blueprints`.

## Design rules

- **Prefer tags over classes** when looking components up. `GetComponentsByTag` lets a user add several instances with different roles; `GetComponentByClass` does not.
- **Prefer blockers over booleans.** Never set `bEnabled` directly on an ability — use the blocker API so other systems can suppress it independently.
- **Pass Source Info through every interaction.** Even when unused.
- **Veto through interfaces, not through subclassing.** If behaviour needs to be conditional, implement the interface rather than deriving a new component class.
- **Keep theme code in `WidgetElement_UpdateTheme`.** Styling anywhere else will not update on a live theme change.
