# nextcloud/xwiki architecture

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

- Interactive diagram: https://gitdiagram.com/nextcloud/xwiki
- Repository: https://github.com/nextcloud/xwiki

## Overview

This Nextcloud app connects configured XWiki instances to users through search, page viewing/browsing, and per-wiki sign-in. Administrators register and check wikis; users can authenticate with the XWiki OpenID Connect flow, browse pages in experimental integrated mode, and save a page as PDF to Nextcloud files. Search, reference linking, and notifications are registered as Nextcloud capabilities. The tree and excerpts support the page and settings flows; search/reference internals and some settings UI wiring are unsampled, so their details are limited to documented capabilities and registration.

Main entry points: [`lib/Controller/PageController.php`](https://github.com/nextcloud/xwiki/blob/main/lib/Controller/PageController.php) (Page controller), [`lib/Controller/SettingsController.php`](https://github.com/nextcloud/xwiki/blob/main/lib/Controller/SettingsController.php) (Settings controller), [`lib/AppInfo/Application.php`](https://github.com/nextcloud/xwiki/blob/main/lib/AppInfo/Application.php) (App bootstrap), [`lib/SettingsManager.php`](https://github.com/nextcloud/xwiki/blob/main/lib/SettingsManager.php) (Settings manager)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_setup["App and setup"]
  node_app["App bootstrap<br/>[Application.php]"]
  node_routes["HTTP routes<br/>[routes.php]"]
end

subgraph group_identity["Identity and settings"]
  node_settings["Settings controller"]
  node_settingsmanager["Settings manager"]
  node_config[("Nextcloud config")]
  node_adminui["Admin settings<br/>[admin.php]"]
  node_userui["Personal settings<br/>[usersettings.php]"]
end

subgraph group_content["Search and browsing"]
  node_page["Page controller<br/>[PageController.php]"]
  node_pageview["Page display<br/>[index.php]"]
  node_navigation["Browse navigation<br/>[index.php]"]
  node_search["Search provider<br/>[Provider.php]"]
  node_reference["Reference provider"]
end

subgraph group_extras["Files and notifications"]
  node_pdfui["PDF save action<br/>[main.js]"]
  node_files[("Nextcloud files")]
  node_notifier["Instance notifier<br/>[XWikiNotifier.php]"]
end

node_user(("Nextcloud user"))
node_admin(("Nextcloud admin"))
node_nextcloud{{"Nextcloud platform"}}
node_xwiki{{"XWiki instance"}}

node_app -->|"registers"| node_search
node_app -->|"registers"| node_reference
node_app -->|"registers"| node_notifier
node_nextcloud -->|"dispatches"| node_routes
node_user -->|"requests pages"| node_page
node_page -->|"loads wiki settings"| node_settingsmanager
node_settingsmanager -->|"reads settings"| node_config
node_page -->|"fetches page and summaries"| node_xwiki
node_page -->|"renders content"| node_pageview
node_pageview -->|"includes navigation"| node_navigation
node_nextcloud -->|"queries"| node_search
node_search -->|"searches content"| node_xwiki
node_nextcloud -->|"resolves references"| node_reference
node_admin -->|"manages wikis"| node_adminui
node_user -->|"manages preferences"| node_userui
node_adminui -->|"submits changes"| node_settings
node_userui -->|"submits preferences"| node_settings
node_settings -->|"reads and updates"| node_settingsmanager
node_settings -->|"checks wiki; exchanges tokens"| node_xwiki
node_settings -->|"dispatches notification"| node_notifier
node_user -->|"chooses PDF save"| node_pdfui
node_pdfui -->|"requests PDF export"| node_page
node_page -->|"fetches PDF"| node_xwiki
node_page -->|"writes PDF"| node_files

click node_app "https://github.com/nextcloud/xwiki/blob/main/lib/AppInfo/Application.php"
click node_routes "https://github.com/nextcloud/xwiki/blob/main/appinfo/routes.php"
click node_page "https://github.com/nextcloud/xwiki/blob/main/lib/Controller/PageController.php"
click node_pageview "https://github.com/nextcloud/xwiki/blob/main/templates/content/index.php"
click node_navigation "https://github.com/nextcloud/xwiki/blob/main/templates/navigation/index.php"
click node_search "https://github.com/nextcloud/xwiki/blob/main/lib/Search/Provider.php"
click node_reference "https://github.com/nextcloud/xwiki/blob/main/lib/Reference/XWikiReferenceProvider.php"
click node_settings "https://github.com/nextcloud/xwiki/blob/main/lib/Controller/SettingsController.php"
click node_settingsmanager "https://github.com/nextcloud/xwiki/blob/main/lib/SettingsManager.php"
click node_adminui "https://github.com/nextcloud/xwiki/blob/main/templates/admin.php"
click node_userui "https://github.com/nextcloud/xwiki/blob/main/templates/usersettings.php"
click node_pdfui "https://github.com/nextcloud/xwiki/blob/main/src/main.js"
click node_notifier "https://github.com/nextcloud/xwiki/blob/main/lib/XWikiNotifier.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_app,node_routes,node_user toneBlue
class node_settings,node_settingsmanager,node_config,node_adminui,node_userui toneAmber
class node_page,node_pageview,node_navigation,node_search,node_reference toneMint
class node_pdfui,node_files,node_notifier toneRose
class node_admin,node_nextcloud,node_xwiki toneIndigo
```

## Components

### App and setup

- [App bootstrap](https://github.com/nextcloud/xwiki/blob/main/lib/AppInfo/Application.php): `lib/AppInfo/Application.php`
- [HTTP routes](https://github.com/nextcloud/xwiki/blob/main/appinfo/routes.php): `appinfo/routes.php`

### Identity and settings

- [Settings controller](https://github.com/nextcloud/xwiki/blob/main/lib/Controller/SettingsController.php): `lib/Controller/SettingsController.php`
- [Settings manager](https://github.com/nextcloud/xwiki/blob/main/lib/SettingsManager.php): `lib/SettingsManager.php`
- **Nextcloud config**
- [Admin settings](https://github.com/nextcloud/xwiki/blob/main/templates/admin.php): `templates/admin.php`
- [Personal settings](https://github.com/nextcloud/xwiki/blob/main/templates/usersettings.php): `templates/usersettings.php`

### Search and browsing

- [Page controller](https://github.com/nextcloud/xwiki/blob/main/lib/Controller/PageController.php): `lib/Controller/PageController.php`
- [Page display](https://github.com/nextcloud/xwiki/blob/main/templates/content/index.php): `templates/content/index.php`
- [Browse navigation](https://github.com/nextcloud/xwiki/blob/main/templates/navigation/index.php): `templates/navigation/index.php`
- [Search provider](https://github.com/nextcloud/xwiki/blob/main/lib/Search/Provider.php): `lib/Search/Provider.php`
- [Reference provider](https://github.com/nextcloud/xwiki/blob/main/lib/Reference/XWikiReferenceProvider.php): `lib/Reference/XWikiReferenceProvider.php`

### Files and notifications

- [PDF save action](https://github.com/nextcloud/xwiki/blob/main/src/main.js): `src/main.js`
- **Nextcloud files**
- [Instance notifier](https://github.com/nextcloud/xwiki/blob/main/lib/XWikiNotifier.php): `lib/XWikiNotifier.php`

### Other components

- **Nextcloud user**
- **Nextcloud admin**
- **Nextcloud platform**
- **XWiki instance**

## Connections

- App bootstrap → Search provider: registers
- App bootstrap → Reference provider: registers
- App bootstrap → Instance notifier: registers
- Nextcloud platform → HTTP routes: dispatches
- Nextcloud user → Page controller: requests pages
- Page controller → Settings manager: loads wiki settings
- Settings manager → Nextcloud config: reads settings
- Page controller → XWiki instance: fetches page and summaries
- Page controller → Page display: renders content
- Page display → Browse navigation: includes navigation
- Nextcloud platform → Search provider: queries
- Search provider → XWiki instance: searches content
- Nextcloud platform → Reference provider: resolves references
- Nextcloud admin → Admin settings: manages wikis
- Nextcloud user → Personal settings: manages preferences
- Admin settings → Settings controller: submits changes
- Personal settings → Settings controller: submits preferences
- Settings controller → Settings manager: reads and updates
- Settings controller → XWiki instance: checks wiki; exchanges tokens
- Settings controller → Instance notifier: dispatches notification
- Nextcloud user → PDF save action: chooses PDF save
- PDF save action → Page controller: requests PDF export
- Page controller → XWiki instance: fetches PDF
- Page controller → Nextcloud files: writes PDF
