# sideswap-io/sideswap_rust architecture

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

- Interactive diagram: https://gitdiagram.com/sideswap-io/sideswap_rust
- Repository: https://github.com/sideswap-io/sideswap_rust

## Overview

SideSwap Rust is a Liquid-focused client, protocol, and service toolkit: users construct and manage wallets, trade or swap assets, and run self-hosted market makers or an asset manager. The client worker mediates UI requests and dispatches wallet, market, and network work; market operations use the shared API model and AMP connectivity, while wallet tasks include transaction creation, signing, and optional Payjoin. Separate service branches implement manager and dealer processes, and Jade provides a hardware-wallet integration. Unsampled subsystems are retained where the README or source index establishes their role; links without visible call evidence are omitted.

Main entry points: [`sideswap_client/src/worker.rs`](https://github.com/sideswap-io/sideswap_rust/blob/main/sideswap_client/src/worker.rs) (Client worker), [`sideswap_client/src/worker/market_worker.rs`](https://github.com/sideswap-io/sideswap_rust/blob/main/sideswap_client/src/worker/market_worker.rs) (Market worker), [`sideswap_manager/src/worker.rs`](https://github.com/sideswap-io/sideswap_rust/blob/main/sideswap_manager/src/worker.rs) (Manager worker), [`sideswap_manager/src/main.rs`](https://github.com/sideswap-io/sideswap_rust/blob/main/sideswap_manager/src/main.rs) (Asset manager)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["Client runtime"]
  node_ffi["Client interface<br/>[ffi.rs]"]
  node_worker["Client worker<br/>[worker.rs]"]
  node_marketworker["Market worker<br/>[market_worker.rs]"]
end

subgraph group_protocol["Market protocol"]
  node_ampclient["AMP client<br/>[lib.rs]"]
  node_wamp["WAMP messages<br/>[message.rs]"]
  node_api["SideSwap API<br/>[lib.rs]"]
  node_marketmodels["Market models<br/>[mkt.rs]"]
end

subgraph group_wallet["Wallet services"]
  node_gdk["GDK sessions<br/>[gdk_ses_rust.rs]"]
  node_walletconnect["Wallet Connect<br/>[wallet_connect.rs]"]
  node_lwk["LWK wallet<br/>[lib.rs]"]
  node_payjoin["PayJoin<br/>[lib.rs]"]
  node_types["Shared value types<br/>[lib.rs]"]
end

subgraph group_services["Self-hosted services"]
  node_manager["Asset manager<br/>[main.rs]"]
  node_managerworker["Manager worker<br/>[worker.rs]"]
  node_managerdb[("Manager database<br/>[db.rs]")]
  node_dealermarket["Dealer markets<br/>[market.rs]"]
  node_dealercontroller["Market controller<br/>[controller.rs]"]
  node_bitfinex["Bitfinex dealer<br/>[main.rs]"]
  node_bitfinexbalance["Exchange balancing<br/>[balancing.rs]"]
end

subgraph group_integrations["External integrations"]
  node_jade["Jade hardware<br/>[jade_mng.rs]"]
  node_bitfinexws["Exchange websocket<br/>[bfx_ws_api.rs]"]
  node_pincrypto["PIN cryptography<br/>[crypto.rs]"]
end

node_user(("Application user"))

node_user -.->|"calls"| node_ffi
node_ffi -.->|"dispatches"| node_worker
node_worker -->|"delegates to"| node_marketworker
node_worker -->|"uses"| node_gdk
node_worker -->|"uses"| node_walletconnect
node_worker -->|"creates PayJoin"| node_payjoin
node_marketworker -.->|"sends requests"| node_api
node_marketworker -->|"uses models"| node_marketmodels
node_ampclient -->|"uses messages"| node_wamp
node_worker -.->|"connects through"| node_ampclient
node_worker -->|"signs with"| node_jade
node_manager -->|"runs"| node_managerworker
node_manager -->|"opens"| node_managerdb
node_managerworker -->|"commands wallet"| node_lwk
node_managerworker -.->|"persists state"| node_managerdb
node_dealermarket -->|"uses controller"| node_dealercontroller
node_bitfinex -->|"coordinates"| node_bitfinexbalance
node_bitfinex -->|"handles exchange events"| node_bitfinexws
node_pincrypto -.->|"encodes shared values"| node_types

click node_ffi "https://github.com/sideswap-io/sideswap_rust/blob/main/sideswap_client/src/ffi.rs"
click node_worker "https://github.com/sideswap-io/sideswap_rust/blob/main/sideswap_client/src/worker.rs"
click node_marketworker "https://github.com/sideswap-io/sideswap_rust/blob/main/sideswap_client/src/worker/market_worker.rs"
click node_ampclient "https://github.com/sideswap-io/sideswap_rust/blob/main/sideswap_amp/src/lib.rs"
click node_wamp "https://github.com/sideswap-io/sideswap_rust/blob/main/sideswap_amp/src/wamp/message.rs"
click node_api "https://github.com/sideswap-io/sideswap_rust/blob/main/sideswap_api/src/lib.rs"
click node_marketmodels "https://github.com/sideswap-io/sideswap_rust/blob/main/sideswap_api/src/mkt.rs"
click node_gdk "https://github.com/sideswap-io/sideswap_rust/blob/main/sideswap_client/src/gdk_ses_rust.rs"
click node_walletconnect "https://github.com/sideswap-io/sideswap_rust/blob/main/sideswap_client/src/worker/wallet_connect.rs"
click node_lwk "https://github.com/sideswap-io/sideswap_rust/blob/main/sideswap_lwk/src/lib.rs"
click node_payjoin "https://github.com/sideswap-io/sideswap_rust/blob/main/sideswap_payjoin/src/lib.rs"
click node_jade "https://github.com/sideswap-io/sideswap_rust/blob/main/sideswap_jade/src/jade_mng.rs"
click node_manager "https://github.com/sideswap-io/sideswap_rust/blob/main/sideswap_manager/src/main.rs"
click node_managerworker "https://github.com/sideswap-io/sideswap_rust/blob/main/sideswap_manager/src/worker.rs"
click node_managerdb "https://github.com/sideswap-io/sideswap_rust/blob/main/sideswap_manager/src/db.rs"
click node_dealermarket "https://github.com/sideswap-io/sideswap_rust/blob/main/sideswap_dealer/src/market.rs"
click node_dealercontroller "https://github.com/sideswap-io/sideswap_rust/blob/main/sideswap_dealer/src/market/controller.rs"
click node_bitfinex "https://github.com/sideswap-io/sideswap_rust/blob/main/sideswap_dealer_bitfinex/src/main.rs"
click node_bitfinexbalance "https://github.com/sideswap-io/sideswap_rust/blob/main/sideswap_dealer_bitfinex/src/balancing.rs"
click node_bitfinexws "https://github.com/sideswap-io/sideswap_rust/blob/main/sideswap_dealer_bitfinex/src/bfx_ws_api.rs"
click node_pincrypto "https://github.com/sideswap-io/sideswap_rust/blob/main/gdk_rust/gdk_pin_client/src/crypto.rs"
click node_types "https://github.com/sideswap-io/sideswap_rust/blob/main/sideswap_types/src/lib.rs"

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_ffi,node_worker,node_marketworker,node_user toneBlue
class node_ampclient,node_wamp,node_api,node_marketmodels toneAmber
class node_gdk,node_walletconnect,node_lwk,node_payjoin,node_types toneMint
class node_manager,node_managerworker,node_managerdb,node_dealermarket,node_dealercontroller,node_bitfinex,node_bitfinexbalance toneRose
class node_jade,node_bitfinexws,node_pincrypto toneIndigo
```

## Components

### Client runtime

- [Client interface](https://github.com/sideswap-io/sideswap_rust/blob/main/sideswap_client/src/ffi.rs): `sideswap_client/src/ffi.rs`
- [Client worker](https://github.com/sideswap-io/sideswap_rust/blob/main/sideswap_client/src/worker.rs): `sideswap_client/src/worker.rs`
- [Market worker](https://github.com/sideswap-io/sideswap_rust/blob/main/sideswap_client/src/worker/market_worker.rs): `sideswap_client/src/worker/market_worker.rs`

### Market protocol

- [AMP client](https://github.com/sideswap-io/sideswap_rust/blob/main/sideswap_amp/src/lib.rs): `sideswap_amp/src/lib.rs`
- [WAMP messages](https://github.com/sideswap-io/sideswap_rust/blob/main/sideswap_amp/src/wamp/message.rs): `sideswap_amp/src/wamp/message.rs`
- [SideSwap API](https://github.com/sideswap-io/sideswap_rust/blob/main/sideswap_api/src/lib.rs): `sideswap_api/src/lib.rs`
- [Market models](https://github.com/sideswap-io/sideswap_rust/blob/main/sideswap_api/src/mkt.rs): `sideswap_api/src/mkt.rs`

### Wallet services

- [GDK sessions](https://github.com/sideswap-io/sideswap_rust/blob/main/sideswap_client/src/gdk_ses_rust.rs): `sideswap_client/src/gdk_ses_rust.rs`
- [Wallet Connect](https://github.com/sideswap-io/sideswap_rust/blob/main/sideswap_client/src/worker/wallet_connect.rs): `sideswap_client/src/worker/wallet_connect.rs`
- [LWK wallet](https://github.com/sideswap-io/sideswap_rust/blob/main/sideswap_lwk/src/lib.rs): `sideswap_lwk/src/lib.rs`
- [PayJoin](https://github.com/sideswap-io/sideswap_rust/blob/main/sideswap_payjoin/src/lib.rs): `sideswap_payjoin/src/lib.rs`
- [Shared value types](https://github.com/sideswap-io/sideswap_rust/blob/main/sideswap_types/src/lib.rs): `sideswap_types/src/lib.rs`

### Self-hosted services

- [Asset manager](https://github.com/sideswap-io/sideswap_rust/blob/main/sideswap_manager/src/main.rs): `sideswap_manager/src/main.rs`
- [Manager worker](https://github.com/sideswap-io/sideswap_rust/blob/main/sideswap_manager/src/worker.rs): `sideswap_manager/src/worker.rs`
- [Manager database](https://github.com/sideswap-io/sideswap_rust/blob/main/sideswap_manager/src/db.rs): `sideswap_manager/src/db.rs`
- [Dealer markets](https://github.com/sideswap-io/sideswap_rust/blob/main/sideswap_dealer/src/market.rs): `sideswap_dealer/src/market.rs`
- [Market controller](https://github.com/sideswap-io/sideswap_rust/blob/main/sideswap_dealer/src/market/controller.rs): `sideswap_dealer/src/market/controller.rs`
- [Bitfinex dealer](https://github.com/sideswap-io/sideswap_rust/blob/main/sideswap_dealer_bitfinex/src/main.rs): `sideswap_dealer_bitfinex/src/main.rs`
- [Exchange balancing](https://github.com/sideswap-io/sideswap_rust/blob/main/sideswap_dealer_bitfinex/src/balancing.rs): `sideswap_dealer_bitfinex/src/balancing.rs`

### External integrations

- [Jade hardware](https://github.com/sideswap-io/sideswap_rust/blob/main/sideswap_jade/src/jade_mng.rs): `sideswap_jade/src/jade_mng.rs`
- [Exchange websocket](https://github.com/sideswap-io/sideswap_rust/blob/main/sideswap_dealer_bitfinex/src/bfx_ws_api.rs): `sideswap_dealer_bitfinex/src/bfx_ws_api.rs`
- [PIN cryptography](https://github.com/sideswap-io/sideswap_rust/blob/main/gdk_rust/gdk_pin_client/src/crypto.rs): `gdk_rust/gdk_pin_client/src/crypto.rs`

### Other components

- **Application user**

## Connections

- Application user → Client interface: calls
- Client interface → Client worker: dispatches (evidence: `sideswap_client/src/worker.rs`)
- Client worker → Market worker: delegates to (evidence: `sideswap_client/src/worker.rs`)
- Client worker → GDK sessions: uses (evidence: `sideswap_client/src/worker.rs`)
- Client worker → Wallet Connect: uses (evidence: `sideswap_client/src/worker.rs`)
- Client worker → PayJoin: creates PayJoin (evidence: `sideswap_client/src/worker.rs`)
- Market worker → SideSwap API: sends requests
- Market worker → Market models: uses models (evidence: `sideswap_client/src/worker/market_worker.rs`)
- AMP client → WAMP messages: uses messages (evidence: `sideswap_amp/src/lib.rs`)
- Client worker → AMP client: connects through
- Client worker → Jade hardware: signs with (evidence: `sideswap_client/src/worker.rs`)
- Asset manager → Manager worker: runs (evidence: `sideswap_manager/src/main.rs`)
- Asset manager → Manager database: opens (evidence: `sideswap_manager/src/main.rs`)
- Manager worker → LWK wallet: commands wallet (evidence: `sideswap_manager/src/worker.rs`)
- Manager worker → Manager database: persists state
- Dealer markets → Market controller: uses controller (evidence: `sideswap_dealer/src/market/controller.rs`)
- Bitfinex dealer → Exchange balancing: coordinates (evidence: `sideswap_dealer_bitfinex/src/main.rs`)
- Bitfinex dealer → Exchange websocket: handles exchange events (evidence: `sideswap_dealer_bitfinex/src/main.rs`)
- PIN cryptography → Shared value types: encodes shared values
