# openexch/assets architecture

> Architecture diagram of the GitHub repository openexch/assets, 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/openexch/assets
- Repository: https://github.com/openexch/assets

## Overview

The tree describes an assets ledger/cluster with a journal-to-money bridge, balance-feed components, and a settlement projector. The likely workflow spans journal ingestion, ledger commands and settlement, then feed or journal outputs. No README or source excerpts were provided, so component roles are inferred from names; uncertain call and data-flow relationships are omitted.

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_bridge["Journal Bridge"]
  node_journal_source["Journal source<br/>[JournalSource.java]"]
  node_feed_client["AE feed client<br/>[AeFeedClient.java]"]
  node_translator["Journal translator"]
  node_bridge_agent["Bridge agent<br/>[BridgeAgent.java]"]
  node_bridge_main["Bridge entry<br/>[BridgeMain.java]"]
end

subgraph group_ledger["Ledger Runtime"]
  node_engine["Assets engine<br/>[AssetsEngine.java]"]
  node_account["Account state<br/>[Account.java]"]
  node_settlement["Settlement service"]
  node_projector["Settlement projector"]
end

subgraph group_transport["Cluster I/O"]
  node_cluster_service["Cluster service"]
  node_demuxer["Message demuxer"]
  node_feed_runtime["Balance feed"]
  node_journal_runtime["Money journal"]
  node_publisher["Event publisher"]
end

subgraph group_shared["Shared Protocol"]
  node_money_types["Money protocol"]
  node_journal_types["Journal protocol"]
end

node_feed_source(("Journal feed"))
node_clients(("Consumers"))

click node_journal_source "https://github.com/openexch/assets/blob/main/assets-bridge/src/main/java/com/openexchange/assets/bridge/JournalSource.java"
click node_feed_client "https://github.com/openexch/assets/blob/main/assets-bridge/src/main/java/com/openexchange/assets/bridge/AeFeedClient.java"
click node_translator "https://github.com/openexch/assets/blob/main/assets-bridge/src/main/java/com/openexchange/assets/bridge/JournalToMoneyTranslator.java"
click node_bridge_agent "https://github.com/openexch/assets/blob/main/assets-bridge/src/main/java/com/openexchange/assets/bridge/BridgeAgent.java"
click node_bridge_main "https://github.com/openexch/assets/blob/main/assets-bridge/src/main/java/com/openexchange/assets/bridge/BridgeMain.java"
click node_engine "https://github.com/openexch/assets/blob/main/assets-cluster/src/main/java/com/openexchange/assets/application/engine/AssetsEngine.java"
click node_account "https://github.com/openexch/assets/blob/main/assets-cluster/src/main/java/com/openexchange/assets/domain/Account.java"
click node_settlement "https://github.com/openexch/assets/blob/main/assets-cluster/src/main/java/com/openexchange/assets/domain/SettlementService.java"
click node_projector "https://github.com/openexch/assets/blob/main/assets-cluster/src/main/java/com/openexchange/assets/application/projection/SettlementProjector.java"
click node_cluster_service "https://github.com/openexch/assets/blob/main/assets-cluster/src/main/java/com/openexchange/assets/infrastructure/persistence/AssetsClusteredService.java"
click node_demuxer "https://github.com/openexch/assets/blob/main/assets-cluster/src/main/java/com/openexchange/assets/infrastructure/persistence/AssetsSbeDemuxer.java"
click node_feed_runtime "https://github.com/openexch/assets/blob/main/assets-cluster/src/main/java/com/openexchange/assets/infrastructure/feed/BalanceFeedRuntime.java"
click node_journal_runtime "https://github.com/openexch/assets/blob/main/assets-cluster/src/main/java/com/openexchange/assets/infrastructure/journal/MoneyJournalRuntime.java"
click node_publisher "https://github.com/openexch/assets/blob/main/assets-cluster/src/main/java/com/openexchange/assets/infrastructure/publisher/AssetsEventPublisher.java"
click node_money_types "https://github.com/openexch/assets/tree/main/assets-common/src/main/java/com/openexchange/assets/infrastructure/generated"
click node_journal_types "https://github.com/openexch/assets/tree/main/assets-common/src/main/java/com/openexchange/assets/infrastructure/journal/generated"

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_journal_source,node_feed_client,node_translator,node_bridge_agent,node_bridge_main toneBlue
class node_engine,node_account,node_settlement,node_projector toneAmber
class node_cluster_service,node_demuxer,node_feed_runtime,node_journal_runtime,node_publisher toneMint
class node_money_types,node_journal_types toneRose
class node_feed_source,node_clients toneIndigo
```

## Components

### Journal Bridge

- [Journal source](https://github.com/openexch/assets/blob/main/assets-bridge/src/main/java/com/openexchange/assets/bridge/JournalSource.java): `assets-bridge/src/main/java/com/openexchange/assets/bridge/JournalSource.java`
- [AE feed client](https://github.com/openexch/assets/blob/main/assets-bridge/src/main/java/com/openexchange/assets/bridge/AeFeedClient.java): `assets-bridge/src/main/java/com/openexchange/assets/bridge/AeFeedClient.java`
- [Journal translator](https://github.com/openexch/assets/blob/main/assets-bridge/src/main/java/com/openexchange/assets/bridge/JournalToMoneyTranslator.java): `assets-bridge/src/main/java/com/openexchange/assets/bridge/JournalToMoneyTranslator.java`
- [Bridge agent](https://github.com/openexch/assets/blob/main/assets-bridge/src/main/java/com/openexchange/assets/bridge/BridgeAgent.java): `assets-bridge/src/main/java/com/openexchange/assets/bridge/BridgeAgent.java`
- [Bridge entry](https://github.com/openexch/assets/blob/main/assets-bridge/src/main/java/com/openexchange/assets/bridge/BridgeMain.java): `assets-bridge/src/main/java/com/openexchange/assets/bridge/BridgeMain.java`

### Ledger Runtime

- [Assets engine](https://github.com/openexch/assets/blob/main/assets-cluster/src/main/java/com/openexchange/assets/application/engine/AssetsEngine.java): `assets-cluster/src/main/java/com/openexchange/assets/application/engine/AssetsEngine.java`
- [Account state](https://github.com/openexch/assets/blob/main/assets-cluster/src/main/java/com/openexchange/assets/domain/Account.java): `assets-cluster/src/main/java/com/openexchange/assets/domain/Account.java`
- [Settlement service](https://github.com/openexch/assets/blob/main/assets-cluster/src/main/java/com/openexchange/assets/domain/SettlementService.java): `assets-cluster/src/main/java/com/openexchange/assets/domain/SettlementService.java`
- [Settlement projector](https://github.com/openexch/assets/blob/main/assets-cluster/src/main/java/com/openexchange/assets/application/projection/SettlementProjector.java): `assets-cluster/src/main/java/com/openexchange/assets/application/projection/SettlementProjector.java`

### Cluster I/O

- [Cluster service](https://github.com/openexch/assets/blob/main/assets-cluster/src/main/java/com/openexchange/assets/infrastructure/persistence/AssetsClusteredService.java): `assets-cluster/src/main/java/com/openexchange/assets/infrastructure/persistence/AssetsClusteredService.java`
- [Message demuxer](https://github.com/openexch/assets/blob/main/assets-cluster/src/main/java/com/openexchange/assets/infrastructure/persistence/AssetsSbeDemuxer.java): `assets-cluster/src/main/java/com/openexchange/assets/infrastructure/persistence/AssetsSbeDemuxer.java`
- [Balance feed](https://github.com/openexch/assets/blob/main/assets-cluster/src/main/java/com/openexchange/assets/infrastructure/feed/BalanceFeedRuntime.java): `assets-cluster/src/main/java/com/openexchange/assets/infrastructure/feed/BalanceFeedRuntime.java`
- [Money journal](https://github.com/openexch/assets/blob/main/assets-cluster/src/main/java/com/openexchange/assets/infrastructure/journal/MoneyJournalRuntime.java): `assets-cluster/src/main/java/com/openexchange/assets/infrastructure/journal/MoneyJournalRuntime.java`
- [Event publisher](https://github.com/openexch/assets/blob/main/assets-cluster/src/main/java/com/openexchange/assets/infrastructure/publisher/AssetsEventPublisher.java): `assets-cluster/src/main/java/com/openexchange/assets/infrastructure/publisher/AssetsEventPublisher.java`

### Shared Protocol

- [Money protocol](https://github.com/openexch/assets/tree/main/assets-common/src/main/java/com/openexchange/assets/infrastructure/generated): `assets-common/src/main/java/com/openexchange/assets/infrastructure/generated`
- [Journal protocol](https://github.com/openexch/assets/tree/main/assets-common/src/main/java/com/openexchange/assets/infrastructure/journal/generated): `assets-common/src/main/java/com/openexchange/assets/infrastructure/journal/generated`

### Other components

- **Journal feed**
- **Consumers**
