# arcsoftlabs/mouseshare architecture

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

## Overview

MouseShare lets a person use one machine’s keyboard and mouse across networked computers, with automatic peer discovery, pairing, shared screen layout, clipboard sharing, and file transfer. The main path runs from the web UI through App orchestration and pairing to a host/client session; cursor and keyboard events then pass through platform capture or injection. README-described capabilities are included, but several implementation links rely on documentation because the relevant source was not sampled.

Main entry points: [`mouseshare/app.py`](https://github.com/arcsoftlabs/mouseshare/blob/main/mouseshare/app.py) (App orchestration), [`mouseshare/ui/web/app.js`](https://github.com/arcsoftlabs/mouseshare/blob/main/mouseshare/ui/web/app.js) (Web UI), [`mouseshare/session.py`](https://github.com/arcsoftlabs/mouseshare/blob/main/mouseshare/session.py) (Host session), [`mouseshare/network.py`](https://github.com/arcsoftlabs/mouseshare/blob/main/mouseshare/network.py) (Network transport)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_interaction["User interaction"]
  node_ui["Web UI<br/>[app.js]"]
  node_app["App orchestration<br/>[app.py]"]
  node_state["UI state<br/>[state.py]"]
  node_config[("Settings and peers<br/>[config.py]")]
end

subgraph group_connection["Connection and trust"]
  node_discovery["Peer discovery<br/>[discovery.py]"]
  node_network["Network transport<br/>[network.py]"]
  node_pairing["Pairing<br/>[pairing.py]"]
  node_protocol["Message protocol<br/>[protocol.py]"]
end

subgraph group_input["Input sharing"]
  node_host["Host session<br/>[session.py]"]
  node_client["Client session<br/>[session.py]"]
  node_capture["Input capture<br/>[capture.py]"]
  node_inject["Input injection<br/>[inject.py]"]
  node_platform["Platform input<br/>[linux.py]"]
end

subgraph group_sharing["Layout and sharing"]
  node_layout["Shared layout<br/>[layout.py]"]
  node_monitors["Monitor enumeration<br/>[monitors.py]"]
  node_clipboard["Clipboard sharing<br/>[clipboard.py]"]
  node_transfer["File transfer<br/>[transfer.py]"]
  node_outbox["Transfer outbox<br/>[outbox.py]"]
end

node_user(("User"))
node_peer(("Other devices"))

node_user -->|"uses"| node_ui
node_ui -->|"calls API"| node_app
node_app -->|"pushes snapshots"| node_ui
node_app -->|"updates"| node_state
node_app -->|"reads and saves"| node_config
node_app -->|"starts discovery"| node_discovery
node_discovery -->|"finds peers"| node_peer
node_app -->|"listens and connects"| node_network
node_network -->|"exchanges messages"| node_peer
node_app -->|"coordinates pairing"| node_pairing
node_app -->|"encodes messages"| node_protocol
node_network -->|"decodes messages"| node_protocol
node_app -->|"starts host session"| node_host
node_app -->|"starts client session"| node_client
node_capture -->|"reports input"| node_host
node_host -->|"suppresses input"| node_capture
node_host -->|"sends input events"| node_protocol
node_client -->|"applies events"| node_inject
node_inject -->|"uses platform APIs"| node_platform
node_capture -->|"uses platform APIs"| node_platform
node_app -->|"updates geometry"| node_layout
node_app -->|"enumerates screens"| node_monitors
node_ui -->|"sets layout offsets"| node_app
node_app -->|"coordinates sharing"| node_clipboard
node_app -->|"coordinates transfers"| node_transfer
node_app -->|"queues transfers"| node_outbox
node_transfer -->|"transfers files"| node_peer
node_clipboard -->|"shares text"| node_peer

click node_ui "https://github.com/arcsoftlabs/mouseshare/blob/main/mouseshare/ui/web/app.js"
click node_app "https://github.com/arcsoftlabs/mouseshare/blob/main/mouseshare/app.py"
click node_state "https://github.com/arcsoftlabs/mouseshare/blob/main/mouseshare/state.py"
click node_config "https://github.com/arcsoftlabs/mouseshare/blob/main/mouseshare/config.py"
click node_discovery "https://github.com/arcsoftlabs/mouseshare/blob/main/mouseshare/discovery.py"
click node_network "https://github.com/arcsoftlabs/mouseshare/blob/main/mouseshare/network.py"
click node_pairing "https://github.com/arcsoftlabs/mouseshare/blob/main/mouseshare/pairing.py"
click node_protocol "https://github.com/arcsoftlabs/mouseshare/blob/main/mouseshare/protocol.py"
click node_host "https://github.com/arcsoftlabs/mouseshare/blob/main/mouseshare/session.py"
click node_client "https://github.com/arcsoftlabs/mouseshare/blob/main/mouseshare/session.py"
click node_capture "https://github.com/arcsoftlabs/mouseshare/blob/main/mouseshare/capture.py"
click node_inject "https://github.com/arcsoftlabs/mouseshare/blob/main/mouseshare/inject.py"
click node_platform "https://github.com/arcsoftlabs/mouseshare/blob/main/mouseshare/linux.py"
click node_layout "https://github.com/arcsoftlabs/mouseshare/blob/main/mouseshare/layout.py"
click node_monitors "https://github.com/arcsoftlabs/mouseshare/blob/main/mouseshare/monitors.py"
click node_clipboard "https://github.com/arcsoftlabs/mouseshare/blob/main/mouseshare/clipboard.py"
click node_transfer "https://github.com/arcsoftlabs/mouseshare/blob/main/mouseshare/transfer.py"
click node_outbox "https://github.com/arcsoftlabs/mouseshare/blob/main/mouseshare/outbox.py"

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_ui,node_app,node_state,node_config,node_user toneBlue
class node_discovery,node_network,node_pairing,node_protocol toneAmber
class node_host,node_client,node_capture,node_inject,node_platform toneMint
class node_layout,node_monitors,node_clipboard,node_transfer,node_outbox toneRose
class node_peer toneIndigo
```

## Components

### User interaction

- [Web UI](https://github.com/arcsoftlabs/mouseshare/blob/main/mouseshare/ui/web/app.js): `mouseshare/ui/web/app.js`
- [App orchestration](https://github.com/arcsoftlabs/mouseshare/blob/main/mouseshare/app.py): `mouseshare/app.py`
- [UI state](https://github.com/arcsoftlabs/mouseshare/blob/main/mouseshare/state.py): `mouseshare/state.py`
- [Settings and peers](https://github.com/arcsoftlabs/mouseshare/blob/main/mouseshare/config.py): `mouseshare/config.py`

### Connection and trust

- [Peer discovery](https://github.com/arcsoftlabs/mouseshare/blob/main/mouseshare/discovery.py): `mouseshare/discovery.py`
- [Network transport](https://github.com/arcsoftlabs/mouseshare/blob/main/mouseshare/network.py): `mouseshare/network.py`
- [Pairing](https://github.com/arcsoftlabs/mouseshare/blob/main/mouseshare/pairing.py): `mouseshare/pairing.py`
- [Message protocol](https://github.com/arcsoftlabs/mouseshare/blob/main/mouseshare/protocol.py): `mouseshare/protocol.py`

### Input sharing

- [Host session](https://github.com/arcsoftlabs/mouseshare/blob/main/mouseshare/session.py): `mouseshare/session.py`
- [Client session](https://github.com/arcsoftlabs/mouseshare/blob/main/mouseshare/session.py): `mouseshare/session.py`
- [Input capture](https://github.com/arcsoftlabs/mouseshare/blob/main/mouseshare/capture.py): `mouseshare/capture.py`
- [Input injection](https://github.com/arcsoftlabs/mouseshare/blob/main/mouseshare/inject.py): `mouseshare/inject.py`
- [Platform input](https://github.com/arcsoftlabs/mouseshare/blob/main/mouseshare/linux.py): `mouseshare/linux.py`

### Layout and sharing

- [Shared layout](https://github.com/arcsoftlabs/mouseshare/blob/main/mouseshare/layout.py): `mouseshare/layout.py`
- [Monitor enumeration](https://github.com/arcsoftlabs/mouseshare/blob/main/mouseshare/monitors.py): `mouseshare/monitors.py`
- [Clipboard sharing](https://github.com/arcsoftlabs/mouseshare/blob/main/mouseshare/clipboard.py): `mouseshare/clipboard.py`
- [File transfer](https://github.com/arcsoftlabs/mouseshare/blob/main/mouseshare/transfer.py): `mouseshare/transfer.py`
- [Transfer outbox](https://github.com/arcsoftlabs/mouseshare/blob/main/mouseshare/outbox.py): `mouseshare/outbox.py`

### Other components

- **User**
- **Other devices**

## Connections

- User → Web UI: uses
- Web UI → App orchestration: calls API
- App orchestration → Web UI: pushes snapshots
- App orchestration → UI state: updates
- App orchestration → Settings and peers: reads and saves
- App orchestration → Peer discovery: starts discovery
- Peer discovery → Other devices: finds peers
- App orchestration → Network transport: listens and connects
- Network transport → Other devices: exchanges messages
- App orchestration → Pairing: coordinates pairing
- App orchestration → Message protocol: encodes messages
- Network transport → Message protocol: decodes messages
- App orchestration → Host session: starts host session
- App orchestration → Client session: starts client session
- Input capture → Host session: reports input
- Host session → Input capture: suppresses input
- Host session → Message protocol: sends input events
- Client session → Input injection: applies events
- Input injection → Platform input: uses platform APIs
- Input capture → Platform input: uses platform APIs
- App orchestration → Shared layout: updates geometry
- App orchestration → Monitor enumeration: enumerates screens
- Web UI → App orchestration: sets layout offsets
- App orchestration → Clipboard sharing: coordinates sharing
- App orchestration → File transfer: coordinates transfers
- App orchestration → Transfer outbox: queues transfers
- File transfer → Other devices: transfers files
- Clipboard sharing → Other devices: shares text
