# flarum/framework architecture

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

- Interactive diagram: https://gitdiagram.com/flarum/framework
- Repository: https://github.com/flarum/framework

## Overview

Flarum is extensible discussion-forum software. A visitor uses the forum to participate in a community; its framework supplies request, user, and extension foundations, while extensions add capabilities such as AI, moderation, privacy, audit, and integrations. The tree exposes only a subset of the core forum runtime, so the graph emphasizes supported extension-management and realtime relationships rather than inventing a complete discussion API flow. Several product branches are represented by their exact enclosing directories because their implementation files were not sampled.

Main entry points: [`extensions/realtime/src/Websocket/Channel/Manager.php`](https://github.com/flarum/framework/blob/2.x/extensions/realtime/src/Websocket/Channel/Manager.php) (Channel manager), [`extensions/realtime/src/Websocket/Connection/Websocket.php`](https://github.com/flarum/framework/blob/2.x/extensions/realtime/src/Websocket/Connection/Websocket.php) (WebSocket connection handler), [`framework/core/src/Extend/Filesystem.php`](https://github.com/flarum/framework/blob/2.x/framework/core/src/Extend/Filesystem.php) (Filesystem extender), [`framework/core/src/Extension/ExtensionManager.php`](https://github.com/flarum/framework/blob/2.x/framework/core/src/Extension/ExtensionManager.php) (Extension manager)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_framework["Forum framework"]
  node_forum["Discussion platform"]
  node_user["User accounts<br/>[User.php]"]
  node_request["Request utilities<br/>[RequestUtil.php]"]
  node_settings[("Settings")]
  node_paths["Installation paths<br/>[Paths.php]"]
  node_filesystem["Filesystem extender<br/>[Filesystem.php]"]
  node_extension_manager["Extension manager"]
  node_extension["Extension runtime<br/>[Extension.php]"]
end

subgraph group_realtime["Realtime messaging"]
  node_realtime_api["Realtime extension API<br/>[Realtime.php]"]
  node_ws_controller["WebSocket connection<br/>[Controller.php]"]
  node_ws_manager["Channel manager<br/>[Manager.php]"]
  node_ws_channel["Channel<br/>[Channel.php]"]
  node_ws_message["WebSocket messages<br/>[Message.php]"]
  node_ws_socket["WebSocket connection handler<br/>[Websocket.php]"]
end

subgraph group_community["Community extensions"]
  node_ai["AI features"]
  node_audit["Audit logging"]
  node_flags["Post flags"]
  node_gdpr["Privacy workflows"]
end

subgraph group_services["Platform extensions"]
  node_mcp["MCP integration"]
  node_oauth["OAuth provider"]
  node_package_manager["Extension management"]
end

node_visitor(("Forum visitor"))

node_visitor -->|"participates in"| node_forum
node_forum -.->|"supports accounts"| node_user
node_extension_manager -->|"enables and disables"| node_extension
node_extension -->|"applies extenders"| node_filesystem
node_filesystem -->|"configures disks"| node_paths
node_ws_controller -->|"manages channels"| node_ws_manager
node_ws_manager -->|"subscribes and broadcasts"| node_ws_channel
node_ws_socket -->|"cleans subscriptions"| node_ws_manager
node_ws_socket -->|"dispatches messages"| node_ws_message
node_ws_message -->|"checks channel identity"| node_ws_manager
node_realtime_api -.->|"configures realtime"| node_ws_manager
node_ai -.->|"adds AI capabilities"| node_forum
node_audit -.->|"records activity"| node_forum
node_flags -.->|"adds moderation flags"| node_forum
node_gdpr -.->|"provides privacy actions"| node_forum
node_mcp -.->|"exposes capabilities"| node_forum
node_oauth -.->|"provides authorization"| node_forum
node_package_manager -.->|"manages installed extensions"| node_extension_manager

click node_user "https://github.com/flarum/framework/blob/2.x/framework/core/src/User/User.php"
click node_request "https://github.com/flarum/framework/blob/2.x/framework/core/src/Http/RequestUtil.php"
click node_settings "https://github.com/flarum/framework/blob/2.x/framework/core/src/Settings/SettingsRepositoryInterface.php"
click node_paths "https://github.com/flarum/framework/blob/2.x/framework/core/src/Foundation/Paths.php"
click node_filesystem "https://github.com/flarum/framework/blob/2.x/framework/core/src/Extend/Filesystem.php"
click node_extension_manager "https://github.com/flarum/framework/blob/2.x/framework/core/src/Extension/ExtensionManager.php"
click node_extension "https://github.com/flarum/framework/blob/2.x/framework/core/src/Extension/Extension.php"
click node_realtime_api "https://github.com/flarum/framework/blob/2.x/extensions/realtime/src/Extend/Realtime.php"
click node_ws_controller "https://github.com/flarum/framework/blob/2.x/extensions/realtime/src/Websocket/Connection/Controller.php"
click node_ws_manager "https://github.com/flarum/framework/blob/2.x/extensions/realtime/src/Websocket/Channel/Manager.php"
click node_ws_channel "https://github.com/flarum/framework/blob/2.x/extensions/realtime/src/Websocket/Channel/Channel.php"
click node_ws_message "https://github.com/flarum/framework/blob/2.x/extensions/realtime/src/Websocket/Message/Message.php"
click node_ws_socket "https://github.com/flarum/framework/blob/2.x/extensions/realtime/src/Websocket/Connection/Websocket.php"
click node_ai "https://github.com/flarum/framework/tree/2.x/extensions/ai/src"
click node_audit "https://github.com/flarum/framework/tree/2.x/extensions/audit/src"
click node_flags "https://github.com/flarum/framework/tree/2.x/extensions/flags/src"
click node_gdpr "https://github.com/flarum/framework/tree/2.x/extensions/gdpr/src"
click node_mcp "https://github.com/flarum/framework/tree/2.x/extensions/mcp/src"
click node_oauth "https://github.com/flarum/framework/tree/2.x/extensions/oauth-provider/src"
click node_package_manager "https://github.com/flarum/framework/tree/2.x/extensions/package-manager/src"

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_forum,node_user,node_request,node_settings,node_paths,node_filesystem,node_extension_manager,node_extension toneBlue
class node_realtime_api,node_ws_controller,node_ws_manager,node_ws_channel,node_ws_message,node_ws_socket toneAmber
class node_ai,node_audit,node_flags,node_gdpr toneMint
class node_mcp,node_oauth,node_package_manager toneRose
class node_visitor toneIndigo
```

## Components

### Forum framework

- **Discussion platform**
- [User accounts](https://github.com/flarum/framework/blob/2.x/framework/core/src/User/User.php): `framework/core/src/User/User.php`
- [Request utilities](https://github.com/flarum/framework/blob/2.x/framework/core/src/Http/RequestUtil.php): `framework/core/src/Http/RequestUtil.php`
- [Settings](https://github.com/flarum/framework/blob/2.x/framework/core/src/Settings/SettingsRepositoryInterface.php): `framework/core/src/Settings/SettingsRepositoryInterface.php`
- [Installation paths](https://github.com/flarum/framework/blob/2.x/framework/core/src/Foundation/Paths.php): `framework/core/src/Foundation/Paths.php`
- [Filesystem extender](https://github.com/flarum/framework/blob/2.x/framework/core/src/Extend/Filesystem.php): `framework/core/src/Extend/Filesystem.php`
- [Extension manager](https://github.com/flarum/framework/blob/2.x/framework/core/src/Extension/ExtensionManager.php): `framework/core/src/Extension/ExtensionManager.php`
- [Extension runtime](https://github.com/flarum/framework/blob/2.x/framework/core/src/Extension/Extension.php): `framework/core/src/Extension/Extension.php`

### Realtime messaging

- [Realtime extension API](https://github.com/flarum/framework/blob/2.x/extensions/realtime/src/Extend/Realtime.php): `extensions/realtime/src/Extend/Realtime.php`
- [WebSocket connection](https://github.com/flarum/framework/blob/2.x/extensions/realtime/src/Websocket/Connection/Controller.php): `extensions/realtime/src/Websocket/Connection/Controller.php`
- [Channel manager](https://github.com/flarum/framework/blob/2.x/extensions/realtime/src/Websocket/Channel/Manager.php): `extensions/realtime/src/Websocket/Channel/Manager.php`
- [Channel](https://github.com/flarum/framework/blob/2.x/extensions/realtime/src/Websocket/Channel/Channel.php): `extensions/realtime/src/Websocket/Channel/Channel.php`
- [WebSocket messages](https://github.com/flarum/framework/blob/2.x/extensions/realtime/src/Websocket/Message/Message.php): `extensions/realtime/src/Websocket/Message/Message.php`
- [WebSocket connection handler](https://github.com/flarum/framework/blob/2.x/extensions/realtime/src/Websocket/Connection/Websocket.php): `extensions/realtime/src/Websocket/Connection/Websocket.php`

### Community extensions

- [AI features](https://github.com/flarum/framework/tree/2.x/extensions/ai/src): `extensions/ai/src`
- [Audit logging](https://github.com/flarum/framework/tree/2.x/extensions/audit/src): `extensions/audit/src`
- [Post flags](https://github.com/flarum/framework/tree/2.x/extensions/flags/src): `extensions/flags/src`
- [Privacy workflows](https://github.com/flarum/framework/tree/2.x/extensions/gdpr/src): `extensions/gdpr/src`

### Platform extensions

- [MCP integration](https://github.com/flarum/framework/tree/2.x/extensions/mcp/src): `extensions/mcp/src`
- [OAuth provider](https://github.com/flarum/framework/tree/2.x/extensions/oauth-provider/src): `extensions/oauth-provider/src`
- [Extension management](https://github.com/flarum/framework/tree/2.x/extensions/package-manager/src): `extensions/package-manager/src`

### Other components

- **Forum visitor**

## Connections

- Forum visitor → Discussion platform: participates in
- Discussion platform → User accounts: supports accounts
- Extension manager → Extension runtime: enables and disables (evidence: `framework/core/src/Extension/ExtensionManager.php`)
- Extension runtime → Filesystem extender: applies extenders (evidence: `framework/core/src/Extension/Extension.php`)
- Filesystem extender → Installation paths: configures disks (evidence: `framework/core/src/Extend/Filesystem.php`)
- WebSocket connection → Channel manager: manages channels (evidence: `extensions/realtime/src/Websocket/Connection/Controller.php`)
- Channel manager → Channel: subscribes and broadcasts (evidence: `extensions/realtime/src/Websocket/Channel/Manager.php`)
- WebSocket connection handler → Channel manager: cleans subscriptions (evidence: `extensions/realtime/src/Websocket/Connection/Websocket.php`)
- WebSocket connection handler → WebSocket messages: dispatches messages (evidence: `extensions/realtime/src/Websocket/Connection/Websocket.php`)
- WebSocket messages → Channel manager: checks channel identity (evidence: `extensions/realtime/src/Websocket/Message/Message.php`)
- Realtime extension API → Channel manager: configures realtime (evidence: `extensions/realtime/src/Websocket/Channel/Manager.php`)
- AI features → Discussion platform: adds AI capabilities
- Audit logging → Discussion platform: records activity
- Post flags → Discussion platform: adds moderation flags
- Privacy workflows → Discussion platform: provides privacy actions
- MCP integration → Discussion platform: exposes capabilities
- OAuth provider → Discussion platform: provides authorization
- Extension management → Extension manager: manages installed extensions (evidence: `extensions/package-manager/src/Host/StorageDir.php`)
