> ## Documentation Index
> Fetch the complete documentation index at: https://docsdrop.erikraft.com/llms.txt
> Use this file to discover all available pages before exploring further.

# System Overview

> High-level architecture of ErikrafT Drop's peer-to-peer file sharing system.

# ErikrafT Drop Architecture Diagram

This diagram shows the internal architecture and system flow of ErikrafT Drop, a WebRTC-based peer-to-peer file transfer system inspired by PairDrop.

The architecture is divided into logical layers that work together to enable secure and fast P2P file transfers.

## Layer 1 — HTTP + Configuration

The Express server provides static files and configuration data.

### Responsibilities:

* Serve HTML, CSS, and JavaScript files
* Provide `/config` endpoint
* Deliver application settings
* Initialize client configuration

### Components:

* Express Server (`server/index.js`)
* Static Files
* Configuration API

***

## Layer 2 — WebSocket Signaling

The WebSocket server handles peer discovery and signaling required for WebRTC connections.

### Responsibilities:

* Peer discovery
* Room management
* Signaling message exchange
* Session coordination

### Components:

* WebSocket Signaling Server (`server/ws-server.js`)
* Rooms Manager
* Peer Manager

**Signaling is only used during connection setup.**

**No files pass through the signaling server.**

***

## Layer 3 — WebRTC P2P Transfer

File transfers occur directly between browsers using WebRTC DataChannels.

### Responsibilities:

* Direct peer-to-peer communication
* Encrypted file transfer
* Chunked file streaming
* Transfer reliability

### Components:

* RTCPeer connections
* RTCDataChannel
* FileChunker
* FileDigester

**All transfers are encrypted using DTLS.**

**The server is not involved during file transfer.**

***

## NAT Traversal

STUN and TURN servers enable connectivity across different networks.

### Components:

* STUN Server (NAT discovery)
* TURN Server (Relay fallback)

**STUN is used to discover public network addresses.**

**TURN is used only if direct P2P connection fails.**

***

## System Flow

1. Browser loads configuration from the Express server
2. Browser connects to WebSocket signaling server
3. Peers discover each other
4. WebRTC handshake is performed
5. Secure P2P connection is established
6. Files transfer directly between devices

***

## System Architecture (Technical View)

```mermaid theme={null}
flowchart LR

%% Users (Outside)
UA["User A"]
UB["User B"]

%% External Services
subgraph External_Services
    STUN["STUN Server<br/>NAT discovery"]
    TURN["TURN Server<br/>Relay fallback"]
end

%% Network Layers
subgraph Network_Layers
    L1["Layer 1<br/>HTTP + Config + Static"]
    L2["Layer 2<br/>WebSocket Signaling"]
    L3["Layer 3<br/>WebRTC P2P Transfer"]
end

%% Server Side
subgraph Server_Side
    ES["Express Server<br/>HTTP + Static files<br/>server/index.js"]

    WSS["WebSocket Signaling Server<br/>Peer discovery<br/>server/ws-server.js"]

    RM["Rooms Manager<br/>IP / Secret / Public"]

    PMGR["Peer Manager<br/>Peer tracking"]
end

%% Client Side
subgraph Client_Side

    UI["UI Interface<br/>PeersUI / PeerUI"]

    PM["PeersManager"]

    RTC["RTCPeer<br/>WebRTC P2P"]

    WS["WSPeer fallback<br/>WebSocket relay"]

    FC["FileChunker<br/>64KB chunks"]

    FD["FileDigester<br/>File reassembly"]

    DB["IndexedDB<br/>PersistentStorage"]

end


%% Users connect
UA --> UI
UB --> UI


%% HTTP Flow
UI -->|"HTTP"| L1
L1 --> ES


%% Signaling Flow
PM -->|"WebSocket"| L2
L2 --> WSS

WSS --> RM
WSS --> PMGR


%% Peer Creation
UI --> PM

PM --> RTC
PM --> WS


%% Transfer Flow
RTC -->|"Chunks"| FC
FC --> FD

WS -->|"Fallback"| FC


%% Storage
UI --> DB


%% WebRTC
RTC -->|"ICE"| L3
L3 --> STUN
L3 --> TURN


%% Peer Connection
UA -.->|"WebSocket signaling"| UB
UA <-->|"WebRTC P2P"| UB


%% Discovery Phase
PM -.->|"Discovery Phase"| WSS


%% Signaling Phase
RTC -.->|"SDP Exchange"| WSS


%% Transfer Phase
RTC -.->|"Transfer Phase"| FD
```

This diagram represents the full signaling and peer-to-peer transfer workflow used by ErikrafT Drop.
