# slaxxer/xentium architecture

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

- Interactive diagram: https://gitdiagram.com/slaxxer/xentium
- Repository: https://github.com/slaxxer/xentium

## Overview

Xentium is a TypeScript community platform and CMS, deployed as a modular monolith with an API, browser client, and background worker. The principal workflow is a visitor using the web application to access community and CMS features through the API, which persists state in PostgreSQL and uses Redis-backed jobs for background work. Major branches include installation, authentication, articles and search, moderation, appearance and Theme Studio, plugins, and migration from other platforms. Relationships below rely on the README and supplied source excerpts/index; unsampled modules are represented by their existing directories.

Main entry points: [`apps/api/src/app/app.ts`](https://github.com/slaxxer/xentium/blob/main/apps/api/src/app/app.ts) (HTTP application), [`apps/api/src/infrastructure/db.ts`](https://github.com/slaxxer/xentium/blob/main/apps/api/src/infrastructure/db.ts) (PostgreSQL), [`apps/api/src/modules/articles`](https://github.com/slaxxer/xentium/tree/main/apps/api/src/modules/articles) (Articles and comments), [`apps/api/src/modules/installer`](https://github.com/slaxxer/xentium/tree/main/apps/api/src/modules/installer) (Browser installer)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["Web client"]
  node_web["React application<br/>[App.tsx]"]
  node_webapi["API client<br/>[api.ts]"]
  node_adminui["Admin console"]
end

subgraph group_api["API and domain"]
  node_apiapp["HTTP application<br/>[app.ts]"]
  node_auth["Sign-in and sessions"]
  node_profiles["Profiles and groups"]
  node_articles["Articles and comments"]
  node_search["Full-text search<br/>[search.service.ts]"]
  node_moderation["Moderation cases"]
  node_notifications["Notifications"]
  node_progression["Progression and badges"]
  node_appearance["Appearance and layouts"]
end

subgraph group_platform["Platform services"]
  node_worker["Background worker<br/>[worker.ts]"]
  node_jobs["Scheduled and queued jobs"]
  node_database[("PostgreSQL<br/>[db.ts]")]
  node_redis[("Redis and queue<br/>[redis.ts]")]
  node_storage["Upload storage"]
end

subgraph group_extensions["Extensions and themes"]
  node_theme["Theme Studio<br/>[themeStudio.ts]"]
  node_plugins["Plugin lifecycle<br/>[plugin-engine.ts]"]
  node_pluginapi["Typed plugin API<br/>[index.ts]"]
  node_marketplace["Marketplace service"]
end

subgraph group_operations["Setup and migration"]
  node_installer["Browser installer"]
  node_installengine["Install steps"]
  node_importers["Platform importers<br/>[loader.ts]"]
end

node_visitor(("Community user"))
node_admin(("Site administrator"))

node_visitor -->|"uses"| node_web
node_admin -->|"administers"| node_web
node_web -->|"requests data"| node_webapi
node_webapi -->|"calls API"| node_apiapp
node_apiapp -.->|"routes requests"| node_auth
node_apiapp -.->|"routes requests"| node_articles
node_apiapp -.->|"routes requests"| node_moderation
node_apiapp -.->|"routes requests"| node_profiles
node_apiapp -.->|"routes requests"| node_search
node_apiapp -.->|"routes requests"| node_notifications
node_apiapp -.->|"routes requests"| node_appearance
node_apiapp -.->|"routes requests"| node_installer
node_adminui -.->|"calls API"| node_webapi
node_articles -.->|"indexed for search"| node_search
node_auth -.->|"persists sessions"| node_database
node_articles -.->|"stores content"| node_database
node_moderation -.->|"records cases"| node_database
node_profiles -.->|"stores profiles"| node_database
node_installer -->|"runs setup"| node_installengine
node_installengine -->|"applies schema"| node_database
node_installer -->|"creates account"| node_admin
node_theme -->|"edits layouts"| node_appearance
node_plugins -->|"checks entitlements"| node_marketplace
node_plugins -->|"records installs"| node_database
node_pluginapi -->|"extends platform"| node_plugins
node_worker -.->|"runs jobs"| node_jobs
node_jobs -.->|"queues work"| node_redis
node_importers -.->|"imports content"| node_database
node_articles -.->|"stores uploads"| node_storage

click node_web "https://github.com/slaxxer/xentium/blob/main/apps/web/src/app/App.tsx"
click node_webapi "https://github.com/slaxxer/xentium/blob/main/apps/web/src/lib/api.ts"
click node_apiapp "https://github.com/slaxxer/xentium/blob/main/apps/api/src/app/app.ts"
click node_auth "https://github.com/slaxxer/xentium/tree/main/apps/api/src/modules/auth"
click node_profiles "https://github.com/slaxxer/xentium/tree/main/apps/api/src/modules/users"
click node_articles "https://github.com/slaxxer/xentium/tree/main/apps/api/src/modules/articles"
click node_search "https://github.com/slaxxer/xentium/blob/main/apps/api/src/modules/search/search.service.ts"
click node_moderation "https://github.com/slaxxer/xentium/blob/main/apps/api/src/modules/moderation/moderation.service.ts"
click node_notifications "https://github.com/slaxxer/xentium/blob/main/apps/api/src/modules/notifications/notification.service.ts"
click node_progression "https://github.com/slaxxer/xentium/tree/main/apps/api/src/modules/progression"
click node_adminui "https://github.com/slaxxer/xentium/tree/main/apps/web/src/features/admin"
click node_appearance "https://github.com/slaxxer/xentium/blob/main/apps/api/src/modules/appearance/appearance.service.ts"
click node_theme "https://github.com/slaxxer/xentium/blob/main/apps/api/src/modules/themes/themeStudio.ts"
click node_plugins "https://github.com/slaxxer/xentium/blob/main/apps/api/src/core/plugin-engine/plugin-engine.ts"
click node_pluginapi "https://github.com/slaxxer/xentium/blob/main/packages/plugin-sdk/src/index.ts"
click node_installer "https://github.com/slaxxer/xentium/tree/main/apps/api/src/modules/installer"
click node_installengine "https://github.com/slaxxer/xentium/tree/main/apps/api/src/core/installer-engine"
click node_importers "https://github.com/slaxxer/xentium/blob/main/packages/migrate-core/src/loader.ts"
click node_worker "https://github.com/slaxxer/xentium/blob/main/apps/api/src/worker.ts"
click node_jobs "https://github.com/slaxxer/xentium/tree/main/apps/api/src/jobs"
click node_database "https://github.com/slaxxer/xentium/blob/main/apps/api/src/infrastructure/db.ts"
click node_redis "https://github.com/slaxxer/xentium/blob/main/apps/api/src/infrastructure/redis.ts"
click node_storage "https://github.com/slaxxer/xentium/blob/main/apps/api/src/infrastructure/storage/LocalStorageProvider.ts"

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_web,node_webapi,node_adminui,node_visitor toneBlue
class node_apiapp,node_auth,node_profiles,node_articles,node_search,node_moderation,node_notifications,node_progression,node_appearance toneAmber
class node_worker,node_jobs,node_database,node_redis,node_storage toneMint
class node_theme,node_plugins,node_pluginapi,node_marketplace toneRose
class node_installer,node_installengine,node_importers,node_admin toneIndigo
```

## Components

### Web client

- [React application](https://github.com/slaxxer/xentium/blob/main/apps/web/src/app/App.tsx): `apps/web/src/app/App.tsx`
- [API client](https://github.com/slaxxer/xentium/blob/main/apps/web/src/lib/api.ts): `apps/web/src/lib/api.ts`
- [Admin console](https://github.com/slaxxer/xentium/tree/main/apps/web/src/features/admin): `apps/web/src/features/admin`

### API and domain

- [HTTP application](https://github.com/slaxxer/xentium/blob/main/apps/api/src/app/app.ts): `apps/api/src/app/app.ts`
- [Sign-in and sessions](https://github.com/slaxxer/xentium/tree/main/apps/api/src/modules/auth): `apps/api/src/modules/auth`
- [Profiles and groups](https://github.com/slaxxer/xentium/tree/main/apps/api/src/modules/users): `apps/api/src/modules/users`
- [Articles and comments](https://github.com/slaxxer/xentium/tree/main/apps/api/src/modules/articles): `apps/api/src/modules/articles`
- [Full-text search](https://github.com/slaxxer/xentium/blob/main/apps/api/src/modules/search/search.service.ts): `apps/api/src/modules/search/search.service.ts`
- [Moderation cases](https://github.com/slaxxer/xentium/blob/main/apps/api/src/modules/moderation/moderation.service.ts): `apps/api/src/modules/moderation/moderation.service.ts`
- [Notifications](https://github.com/slaxxer/xentium/blob/main/apps/api/src/modules/notifications/notification.service.ts): `apps/api/src/modules/notifications/notification.service.ts`
- [Progression and badges](https://github.com/slaxxer/xentium/tree/main/apps/api/src/modules/progression): `apps/api/src/modules/progression`
- [Appearance and layouts](https://github.com/slaxxer/xentium/blob/main/apps/api/src/modules/appearance/appearance.service.ts): `apps/api/src/modules/appearance/appearance.service.ts`

### Platform services

- [Background worker](https://github.com/slaxxer/xentium/blob/main/apps/api/src/worker.ts): `apps/api/src/worker.ts`
- [Scheduled and queued jobs](https://github.com/slaxxer/xentium/tree/main/apps/api/src/jobs): `apps/api/src/jobs`
- [PostgreSQL](https://github.com/slaxxer/xentium/blob/main/apps/api/src/infrastructure/db.ts): `apps/api/src/infrastructure/db.ts`
- [Redis and queue](https://github.com/slaxxer/xentium/blob/main/apps/api/src/infrastructure/redis.ts): `apps/api/src/infrastructure/redis.ts`
- [Upload storage](https://github.com/slaxxer/xentium/blob/main/apps/api/src/infrastructure/storage/LocalStorageProvider.ts): `apps/api/src/infrastructure/storage/LocalStorageProvider.ts`

### Extensions and themes

- [Theme Studio](https://github.com/slaxxer/xentium/blob/main/apps/api/src/modules/themes/themeStudio.ts): `apps/api/src/modules/themes/themeStudio.ts`
- [Plugin lifecycle](https://github.com/slaxxer/xentium/blob/main/apps/api/src/core/plugin-engine/plugin-engine.ts): `apps/api/src/core/plugin-engine/plugin-engine.ts`
- [Typed plugin API](https://github.com/slaxxer/xentium/blob/main/packages/plugin-sdk/src/index.ts): `packages/plugin-sdk/src/index.ts`
- **Marketplace service**

### Setup and migration

- [Browser installer](https://github.com/slaxxer/xentium/tree/main/apps/api/src/modules/installer): `apps/api/src/modules/installer`
- [Install steps](https://github.com/slaxxer/xentium/tree/main/apps/api/src/core/installer-engine): `apps/api/src/core/installer-engine`
- [Platform importers](https://github.com/slaxxer/xentium/blob/main/packages/migrate-core/src/loader.ts): `packages/migrate-core/src/loader.ts`

### Other components

- **Community user**
- **Site administrator**

## Connections

- Community user → React application: uses (evidence: `README.md`)
- Site administrator → React application: administers (evidence: `README.md`)
- React application → API client: requests data (evidence: `apps/web/src/app/App.tsx`)
- API client → HTTP application: calls API (evidence: `apps/web/src/lib/api.ts`)
- HTTP application → Sign-in and sessions: routes requests
- HTTP application → Articles and comments: routes requests
- HTTP application → Moderation cases: routes requests
- HTTP application → Profiles and groups: routes requests
- HTTP application → Full-text search: routes requests
- HTTP application → Notifications: routes requests
- HTTP application → Appearance and layouts: routes requests
- HTTP application → Browser installer: routes requests
- Admin console → API client: calls API (evidence: `apps/web/src/features/admin/useAcpNav.ts`)
- Articles and comments → Full-text search: indexed for search
- Sign-in and sessions → PostgreSQL: persists sessions (evidence: `apps/api/src/modules/auth/auth.service.ts`)
- Articles and comments → PostgreSQL: stores content
- Moderation cases → PostgreSQL: records cases (evidence: `apps/api/src/modules/moderation/moderation.service.ts`)
- Profiles and groups → PostgreSQL: stores profiles (evidence: `apps/api/src/modules/users/users.controller.ts`)
- Browser installer → Install steps: runs setup (evidence: `README.md`)
- Install steps → PostgreSQL: applies schema (evidence: `README.md`)
- Browser installer → Site administrator: creates account (evidence: `README.md`)
- Theme Studio → Appearance and layouts: edits layouts (evidence: `apps/api/src/modules/themes/theme.routes.ts`)
- Plugin lifecycle → Marketplace service: checks entitlements (evidence: `apps/api/src/core/plugin-engine/plugin-engine.ts`)
- Plugin lifecycle → PostgreSQL: records installs (evidence: `apps/api/src/core/plugin-engine/plugin-engine.ts`)
- Typed plugin API → Plugin lifecycle: extends platform (evidence: `README.md`)
- Background worker → Scheduled and queued jobs: runs jobs
- Scheduled and queued jobs → Redis and queue: queues work
- Platform importers → PostgreSQL: imports content
- Articles and comments → Upload storage: stores uploads
