# leafysmoke/rframework architecture

> Architecture diagram of the GitHub repository leafysmoke/rframework, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-13). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/leafysmoke/rframework
- Repository: https://github.com/leafysmoke/rframework

## Overview

RFramework is a FiveM roleplay framework. Its documented player workflow begins when a player joins, loads and manages player data, and presents current stats in a HUD. Developers can also use framework APIs for jobs, money, spawning, and client-server callbacks. The tree identifies server, client, shared, and QB-compatibility code, but no source excerpts were provided; edges therefore show only relationships documented in the README, not inferred calls between implementation modules.

Main entry points: [`[RFramework]/rf-core/server/player.lua`](https://github.com/leafysmoke/rframework/blob/main/%5BRFramework%5D/rf-core/server/player.lua) (Player management), [`[RFramework]/rf-core/server/functions.lua`](https://github.com/leafysmoke/rframework/blob/main/%5BRFramework%5D/rf-core/server/functions.lua) (Framework API), [`[RFramework]/rf-core/cllient/main.lua`](https://github.com/leafysmoke/rframework/blob/main/%5BRFramework%5D/rf-core/cllient/main.lua) (Client API), [`[RFramework]/rf-core/server/events.lua`](https://github.com/leafysmoke/rframework/blob/main/%5BRFramework%5D/rf-core/server/events.lua) (Server callbacks)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_player["Player lifecycle"]
  node_player_mgmt["Player management<br/>[player.lua]"]
  node_character["Character handling<br/>[character.lua]"]
  node_characters["Character collection<br/>[characters.lua]"]
  node_client_player["Client player state<br/>[character.lua]"]
  node_hud["Stats HUD"]
end

subgraph group_gameplay["Gameplay services"]
  node_jobs["Job system<br/>[jobs.lua]"]
  node_money["Money and bank<br/>[money.lua]"]
  node_inventory["Inventory<br/>[inventory.lua]"]
  node_vehicles["Vehicles<br/>[vehicles.lua]"]
  node_groups["Groups<br/>[groups.lua]"]
end

subgraph group_interface["Framework interfaces"]
  node_framework_api["Framework API<br/>[functions.lua]"]
  node_client_api["Client API<br/>[main.lua]"]
  node_callbacks["Server callbacks<br/>[events.lua]"]
  node_qb_bridge["QB compatibility"]
  node_shared_utils["Shared utilities<br/>[utils.lua]"]
end

subgraph group_persistence["Persistence"]
  node_mysql[("MySQL service")]
  node_player_table[("Player records<br/>[sql.sql]")]
end

node_player(("FiveM player"))

node_player -->|"joins; loads data"| node_player_mgmt
node_player_mgmt -->|"manages stats shown"| node_hud
node_player_mgmt -.->|"persists data"| node_player_table
node_mysql -.->|"stores records"| node_player_table
node_framework_api -->|"gets player"| node_player_mgmt
node_framework_api -->|"adds or removes money"| node_money
node_framework_api -->|"sets job"| node_jobs
node_client_api -->|"requests callback"| node_callbacks
node_callbacks -->|"returns result"| node_client_api
node_client_api -->|"gets player data"| node_client_player

click node_player_mgmt "https://github.com/leafysmoke/rframework/blob/main/%5BRFramework%5D/rf-core/server/player.lua"
click node_character "https://github.com/leafysmoke/rframework/blob/main/%5BRFramework%5D/rf-core/server/character.lua"
click node_characters "https://github.com/leafysmoke/rframework/blob/main/%5BRFramework%5D/rf-core/server/characters.lua"
click node_client_player "https://github.com/leafysmoke/rframework/blob/main/%5BRFramework%5D/rf-core/cllient/character.lua"
click node_hud "https://github.com/leafysmoke/rframework/tree/main/%5BRFramework%5D/rf-core/cllient"
click node_jobs "https://github.com/leafysmoke/rframework/blob/main/%5BRFramework%5D/rf-core/server/jobs.lua"
click node_money "https://github.com/leafysmoke/rframework/blob/main/%5BRFramework%5D/rf-core/server/money.lua"
click node_inventory "https://github.com/leafysmoke/rframework/blob/main/%5BRFramework%5D/rf-core/server/inventory.lua"
click node_vehicles "https://github.com/leafysmoke/rframework/blob/main/%5BRFramework%5D/rf-core/server/vehicles.lua"
click node_groups "https://github.com/leafysmoke/rframework/blob/main/%5BRFramework%5D/rf-core/server/groups.lua"
click node_framework_api "https://github.com/leafysmoke/rframework/blob/main/%5BRFramework%5D/rf-core/server/functions.lua"
click node_client_api "https://github.com/leafysmoke/rframework/blob/main/%5BRFramework%5D/rf-core/cllient/main.lua"
click node_callbacks "https://github.com/leafysmoke/rframework/blob/main/%5BRFramework%5D/rf-core/server/events.lua"
click node_qb_bridge "https://github.com/leafysmoke/rframework/tree/main/%5BRFramework%5D/rf-core/bridge/qb"
click node_shared_utils "https://github.com/leafysmoke/rframework/blob/main/%5BRFramework%5D/rf-core/shared/utils.lua"
click node_player_table "https://github.com/leafysmoke/rframework/blob/main/%5BRFramework%5D/rf-core/sql.sql"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_player_mgmt,node_character,node_characters,node_client_player,node_hud toneBlue
class node_jobs,node_money,node_inventory,node_vehicles,node_groups toneAmber
class node_framework_api,node_client_api,node_callbacks,node_qb_bridge,node_shared_utils toneMint
class node_mysql,node_player_table toneRose
class node_player toneIndigo
```

## Components

### Player lifecycle

- [Player management](https://github.com/leafysmoke/rframework/blob/main/%5BRFramework%5D/rf-core/server/player.lua): `[RFramework]/rf-core/server/player.lua`
- [Character handling](https://github.com/leafysmoke/rframework/blob/main/%5BRFramework%5D/rf-core/server/character.lua): `[RFramework]/rf-core/server/character.lua`
- [Character collection](https://github.com/leafysmoke/rframework/blob/main/%5BRFramework%5D/rf-core/server/characters.lua): `[RFramework]/rf-core/server/characters.lua`
- [Client player state](https://github.com/leafysmoke/rframework/blob/main/%5BRFramework%5D/rf-core/cllient/character.lua): `[RFramework]/rf-core/cllient/character.lua`
- [Stats HUD](https://github.com/leafysmoke/rframework/tree/main/%5BRFramework%5D/rf-core/cllient): `[RFramework]/rf-core/cllient`

### Gameplay services

- [Job system](https://github.com/leafysmoke/rframework/blob/main/%5BRFramework%5D/rf-core/server/jobs.lua): `[RFramework]/rf-core/server/jobs.lua`
- [Money and bank](https://github.com/leafysmoke/rframework/blob/main/%5BRFramework%5D/rf-core/server/money.lua): `[RFramework]/rf-core/server/money.lua`
- [Inventory](https://github.com/leafysmoke/rframework/blob/main/%5BRFramework%5D/rf-core/server/inventory.lua): `[RFramework]/rf-core/server/inventory.lua`
- [Vehicles](https://github.com/leafysmoke/rframework/blob/main/%5BRFramework%5D/rf-core/server/vehicles.lua): `[RFramework]/rf-core/server/vehicles.lua`
- [Groups](https://github.com/leafysmoke/rframework/blob/main/%5BRFramework%5D/rf-core/server/groups.lua): `[RFramework]/rf-core/server/groups.lua`

### Framework interfaces

- [Framework API](https://github.com/leafysmoke/rframework/blob/main/%5BRFramework%5D/rf-core/server/functions.lua): `[RFramework]/rf-core/server/functions.lua`
- [Client API](https://github.com/leafysmoke/rframework/blob/main/%5BRFramework%5D/rf-core/cllient/main.lua): `[RFramework]/rf-core/cllient/main.lua`
- [Server callbacks](https://github.com/leafysmoke/rframework/blob/main/%5BRFramework%5D/rf-core/server/events.lua): `[RFramework]/rf-core/server/events.lua`
- [QB compatibility](https://github.com/leafysmoke/rframework/tree/main/%5BRFramework%5D/rf-core/bridge/qb): `[RFramework]/rf-core/bridge/qb`
- [Shared utilities](https://github.com/leafysmoke/rframework/blob/main/%5BRFramework%5D/rf-core/shared/utils.lua): `[RFramework]/rf-core/shared/utils.lua`

### Persistence

- **MySQL service**
- [Player records](https://github.com/leafysmoke/rframework/blob/main/%5BRFramework%5D/rf-core/sql.sql): `[RFramework]/rf-core/sql.sql`

### Other components

- **FiveM player**

## Connections

- FiveM player → Player management: joins; loads data (evidence: `README.md`)
- Player management → Stats HUD: manages stats shown (evidence: `README.md`)
- Player management → Player records: persists data (evidence: `README.md`)
- MySQL service → Player records: stores records (evidence: `README.md`)
- Framework API → Player management: gets player (evidence: `README.md`)
- Framework API → Money and bank: adds or removes money (evidence: `README.md`)
- Framework API → Job system: sets job (evidence: `README.md`)
- Client API → Server callbacks: requests callback (evidence: `README.md`)
- Server callbacks → Client API: returns result (evidence: `README.md`)
- Client API → Client player state: gets player data (evidence: `README.md`)
