# phplist/phplist3 architecture

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

- Interactive diagram: https://gitdiagram.com/phplist/phplist3
- Repository: https://github.com/phplist/phplist3

## Overview

phpList is a self-hosted email marketing manager. Administrators create and schedule campaigns, manage subscriber lists and attributes, then queue and dispatch personalized messages; subscribers interact through public subscribe/unsubscribe pages. Delivery outcomes feed analytics and bounce management. The README also documents import/export, RSS campaigns, plugins, APIs, and multiple sending options. The tree and excerpts identify likely runtime entry points, but most feature implementations were not sampled, so links between those components are limited to documented workflow relationships.

Main entry points: [`public_html/lists/admin/processqueue.php`](https://github.com/phplist/phplist3/blob/main/public_html/lists/admin/processqueue.php) (Queue processing), [`public_html/lists/admin/admin.php`](https://github.com/phplist/phplist3/blob/main/public_html/lists/admin/admin.php) (Admin interface), [`public_html/lists/admin/message.php`](https://github.com/phplist/phplist3/blob/main/public_html/lists/admin/message.php) (Campaign editing), [`public_html/lists/admin/send_core.php`](https://github.com/phplist/phplist3/blob/main/public_html/lists/admin/send_core.php) (Message sending)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_campaigns["Campaign management"]
  node_admin_ui["Admin interface<br/>[admin.php]"]
  node_campaign_editor["Campaign editing<br/>[message.php]"]
  node_preview["Message preview"]
  node_rss["RSS campaigns<br/>[onyx-rss.php]"]
end

subgraph group_audiences["Subscriber management"]
  node_audience_admin["List management<br/>[list.php]"]
  node_subscriber_admin["Subscriber management<br/>[users.php]"]
  node_import_export["Import and export<br/>[import.php]"]
  node_public_signup["Public subscriptions<br/>[index.php]"]
end

subgraph group_delivery["Campaign delivery"]
  node_queue["Queue processing<br/>[processqueue.php]"]
  node_send["Message sending<br/>[send_core.php]"]
  node_mailer["Mail transport<br/>[EmailSender.php]"]
end

subgraph group_engagement["Engagement and analytics"]
  node_analytics["Campaign analytics<br/>[analytics.php]"]
  node_bounce_processing["Bounce processing<br/>[processbounces.php]"]
end

subgraph group_platform["Runtime services"]
  node_subscriber_data[("Subscriber database")]
  node_plugin_runtime["Plugin runtime<br/>[pluginlib.php]"]
  node_api["Public APIs<br/>[api.php]"]
end

node_admin(("Administrator"))
node_subscriber(("Subscriber"))
node_scheduler(("Scheduled runner"))
node_smtp["SMTP service"]

node_admin -->|"uses"| node_admin_ui
node_admin_ui -->|"opens"| node_campaign_editor
node_campaign_editor -->|"requests preview"| node_preview
node_admin -->|"manages lists"| node_audience_admin
node_admin -->|"manages subscribers"| node_subscriber_admin
node_admin -->|"imports or exports"| node_import_export
node_subscriber -->|"subscribes"| node_public_signup
node_public_signup -->|"updates records"| node_subscriber_data
node_audience_admin -->|"reads and writes"| node_subscriber_data
node_subscriber_admin -->|"reads and writes"| node_subscriber_data
node_import_export -->|"imports or exports"| node_subscriber_data
node_campaign_editor -->|"queues campaign"| node_queue
node_scheduler -->|"runs queue"| node_queue
node_queue -->|"dispatches messages"| node_send
node_send -->|"sends through"| node_mailer
node_mailer -->|"delivers mail"| node_smtp
node_queue -->|"reads recipients"| node_subscriber_data
node_send -->|"records outcomes"| node_subscriber_data
node_subscriber -->|"responds to messages"| node_analytics
node_analytics -->|"reads engagement data"| node_subscriber_data
node_bounce_processing -->|"updates bounce status"| node_subscriber_data
node_admin -->|"processes bounces"| node_bounce_processing
node_admin_ui -->|"loads extensions"| node_plugin_runtime
node_admin -->|"calls API"| node_api
node_rss -.->|"prepares campaigns"| node_queue

click node_admin_ui "https://github.com/phplist/phplist3/blob/main/public_html/lists/admin/admin.php"
click node_campaign_editor "https://github.com/phplist/phplist3/blob/main/public_html/lists/admin/message.php"
click node_preview "https://github.com/phplist/phplist3/blob/main/public_html/lists/admin/actions/generatetextpreview.php"
click node_queue "https://github.com/phplist/phplist3/blob/main/public_html/lists/admin/processqueue.php"
click node_send "https://github.com/phplist/phplist3/blob/main/public_html/lists/admin/send_core.php"
click node_mailer "https://github.com/phplist/phplist3/blob/main/public_html/lists/admin/EmailSender.php"
click node_audience_admin "https://github.com/phplist/phplist3/blob/main/public_html/lists/admin/list.php"
click node_subscriber_admin "https://github.com/phplist/phplist3/blob/main/public_html/lists/admin/users.php"
click node_import_export "https://github.com/phplist/phplist3/blob/main/public_html/lists/admin/import.php"
click node_public_signup "https://github.com/phplist/phplist3/blob/main/public_html/lists/index.php"
click node_analytics "https://github.com/phplist/phplist3/blob/main/public_html/lists/admin/analytics.php"
click node_bounce_processing "https://github.com/phplist/phplist3/blob/main/public_html/lists/admin/processbounces.php"
click node_plugin_runtime "https://github.com/phplist/phplist3/blob/main/public_html/lists/admin/pluginlib.php"
click node_api "https://github.com/phplist/phplist3/blob/main/public_html/lists/api.php"
click node_rss "https://github.com/phplist/phplist3/blob/main/public_html/lists/admin/onyxrss/onyx-rss.php"

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_admin_ui,node_campaign_editor,node_preview,node_rss toneBlue
class node_audience_admin,node_subscriber_admin,node_import_export,node_public_signup toneAmber
class node_queue,node_send,node_mailer toneMint
class node_analytics,node_bounce_processing toneRose
class node_subscriber_data,node_plugin_runtime,node_api,node_admin,node_subscriber,node_scheduler,node_smtp toneIndigo
```

## Components

### Campaign management

- [Admin interface](https://github.com/phplist/phplist3/blob/main/public_html/lists/admin/admin.php): `public_html/lists/admin/admin.php`
- [Campaign editing](https://github.com/phplist/phplist3/blob/main/public_html/lists/admin/message.php): `public_html/lists/admin/message.php`
- [Message preview](https://github.com/phplist/phplist3/blob/main/public_html/lists/admin/actions/generatetextpreview.php): `public_html/lists/admin/actions/generatetextpreview.php`
- [RSS campaigns](https://github.com/phplist/phplist3/blob/main/public_html/lists/admin/onyxrss/onyx-rss.php): `public_html/lists/admin/onyxrss/onyx-rss.php`

### Subscriber management

- [List management](https://github.com/phplist/phplist3/blob/main/public_html/lists/admin/list.php): `public_html/lists/admin/list.php`
- [Subscriber management](https://github.com/phplist/phplist3/blob/main/public_html/lists/admin/users.php): `public_html/lists/admin/users.php`
- [Import and export](https://github.com/phplist/phplist3/blob/main/public_html/lists/admin/import.php): `public_html/lists/admin/import.php`
- [Public subscriptions](https://github.com/phplist/phplist3/blob/main/public_html/lists/index.php): `public_html/lists/index.php`

### Campaign delivery

- [Queue processing](https://github.com/phplist/phplist3/blob/main/public_html/lists/admin/processqueue.php): `public_html/lists/admin/processqueue.php`
- [Message sending](https://github.com/phplist/phplist3/blob/main/public_html/lists/admin/send_core.php): `public_html/lists/admin/send_core.php`
- [Mail transport](https://github.com/phplist/phplist3/blob/main/public_html/lists/admin/EmailSender.php): `public_html/lists/admin/EmailSender.php`

### Engagement and analytics

- [Campaign analytics](https://github.com/phplist/phplist3/blob/main/public_html/lists/admin/analytics.php): `public_html/lists/admin/analytics.php`
- [Bounce processing](https://github.com/phplist/phplist3/blob/main/public_html/lists/admin/processbounces.php): `public_html/lists/admin/processbounces.php`

### Runtime services

- **Subscriber database**
- [Plugin runtime](https://github.com/phplist/phplist3/blob/main/public_html/lists/admin/pluginlib.php): `public_html/lists/admin/pluginlib.php`
- [Public APIs](https://github.com/phplist/phplist3/blob/main/public_html/lists/api.php): `public_html/lists/api.php`

### Other components

- **Administrator**
- **Subscriber**
- **Scheduled runner**
- **SMTP service**

## Connections

- Administrator → Admin interface: uses
- Admin interface → Campaign editing: opens
- Campaign editing → Message preview: requests preview
- Administrator → List management: manages lists
- Administrator → Subscriber management: manages subscribers
- Administrator → Import and export: imports or exports
- Subscriber → Public subscriptions: subscribes
- Public subscriptions → Subscriber database: updates records
- List management → Subscriber database: reads and writes
- Subscriber management → Subscriber database: reads and writes
- Import and export → Subscriber database: imports or exports
- Campaign editing → Queue processing: queues campaign
- Scheduled runner → Queue processing: runs queue
- Queue processing → Message sending: dispatches messages
- Message sending → Mail transport: sends through
- Mail transport → SMTP service: delivers mail
- Queue processing → Subscriber database: reads recipients
- Message sending → Subscriber database: records outcomes
- Subscriber → Campaign analytics: responds to messages
- Campaign analytics → Subscriber database: reads engagement data
- Bounce processing → Subscriber database: updates bounce status
- Administrator → Bounce processing: processes bounces
- Admin interface → Plugin runtime: loads extensions
- Administrator → Public APIs: calls API
- RSS campaigns → Queue processing: prepares campaigns
