# pmsosa/pylogger architecture

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

## Overview

Pylogger is a Windows keylogger. Its runtime workflow captures keyboard events, adds foreground-window context and clipboard paste text, checks typed trigger commands, and writes captured text to rotating log files. The README also documents pause/resume, status, dump, quit, and log-deletion triggers. Source supports the main event and file paths; the dependency-driven Windows hook setup is shown without expanding packaging machinery.

Main entry points: [`pylogger.py`](https://github.com/pmsosa/pylogger/blob/master/pylogger.py) (Trigger checks)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_capture["Input capture"]
  node_pylogger["Pylogger runtime<br/>[pylogger.py]"]
  node_foreground["Foreground context<br/>[pylogger.py]"]
  node_clipboard["Clipboard text<br/>[pylogger.py]"]
end

subgraph group_commands["Trigger controls"]
  node_triggers["Trigger checks<br/>[pylogger.py]"]
  node_pause["Pause and resume<br/>[pylogger.py]"]
  node_status["Status beep<br/>[pylogger.py]"]
  node_quit["Quit command<br/>[pylogger.py]"]
  node_kill["Log deletion<br/>[pylogger.py]"]
  node_dump["Drive dump<br/>[pylogger.py]"]
end

subgraph group_logging["Log handling"]
  node_writer["Log writer<br/>[pylogger.py]"]
  node_rotation["Log rotation<br/>[pylogger.py]"]
  node_logs["Log files<br/>[pylogger.py]"]
end

node_user(("Computer user"))
node_keyboard["Keyboard events"]
node_windows["Windows APIs"]
node_clipboard_api["Clipboard API"]
node_destination["Drive destination"]

node_user -->|"types keys"| node_keyboard
node_keyboard -->|"delivers events"| node_pylogger
node_pylogger -->|"queries on change"| node_foreground
node_foreground -->|"queries process"| node_windows
node_pylogger -->|"reads paste"| node_clipboard_api
node_clipboard_api -->|"returns text"| node_clipboard
node_pylogger -->|"checks characters"| node_triggers
node_triggers -->|"dispatches"| node_pause
node_triggers -->|"dispatches"| node_status
node_triggers -->|"dispatches"| node_quit
node_triggers -->|"dispatches"| node_kill
node_triggers -->|"dispatches"| node_dump
node_pylogger -->|"writes captured text"| node_writer
node_foreground -->|"writes context"| node_writer
node_clipboard -->|"writes paste"| node_writer
node_pause -->|"gates writes"| node_writer
node_writer -->|"checks size"| node_rotation
node_writer -->|"writes"| node_logs
node_rotation -->|"archives oversized"| node_logs
node_kill -->|"deletes"| node_logs
node_dump -->|"copies"| node_logs
node_dump -->|"copies to drive"| node_destination

click node_pylogger "https://github.com/pmsosa/pylogger/blob/master/pylogger.py"
click node_foreground "https://github.com/pmsosa/pylogger/blob/master/pylogger.py"
click node_clipboard "https://github.com/pmsosa/pylogger/blob/master/pylogger.py"
click node_triggers "https://github.com/pmsosa/pylogger/blob/master/pylogger.py"
click node_pause "https://github.com/pmsosa/pylogger/blob/master/pylogger.py"
click node_status "https://github.com/pmsosa/pylogger/blob/master/pylogger.py"
click node_quit "https://github.com/pmsosa/pylogger/blob/master/pylogger.py"
click node_kill "https://github.com/pmsosa/pylogger/blob/master/pylogger.py"
click node_dump "https://github.com/pmsosa/pylogger/blob/master/pylogger.py"
click node_writer "https://github.com/pmsosa/pylogger/blob/master/pylogger.py"
click node_rotation "https://github.com/pmsosa/pylogger/blob/master/pylogger.py"
click node_logs "https://github.com/pmsosa/pylogger/blob/master/pylogger.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_pylogger,node_foreground,node_clipboard,node_user toneBlue
class node_triggers,node_pause,node_status,node_quit,node_kill,node_dump toneAmber
class node_writer,node_rotation,node_logs,node_windows,node_clipboard_api toneMint
class node_keyboard,node_destination toneIndigo
```

## Components

### Input capture

- [Pylogger runtime](https://github.com/pmsosa/pylogger/blob/master/pylogger.py): `pylogger.py`
- [Foreground context](https://github.com/pmsosa/pylogger/blob/master/pylogger.py): `pylogger.py`
- [Clipboard text](https://github.com/pmsosa/pylogger/blob/master/pylogger.py): `pylogger.py`

### Trigger controls

- [Trigger checks](https://github.com/pmsosa/pylogger/blob/master/pylogger.py): `pylogger.py`
- [Pause and resume](https://github.com/pmsosa/pylogger/blob/master/pylogger.py): `pylogger.py`
- [Status beep](https://github.com/pmsosa/pylogger/blob/master/pylogger.py): `pylogger.py`
- [Quit command](https://github.com/pmsosa/pylogger/blob/master/pylogger.py): `pylogger.py`
- [Log deletion](https://github.com/pmsosa/pylogger/blob/master/pylogger.py): `pylogger.py`
- [Drive dump](https://github.com/pmsosa/pylogger/blob/master/pylogger.py): `pylogger.py`

### Log handling

- [Log writer](https://github.com/pmsosa/pylogger/blob/master/pylogger.py): `pylogger.py`
- [Log rotation](https://github.com/pmsosa/pylogger/blob/master/pylogger.py): `pylogger.py`
- [Log files](https://github.com/pmsosa/pylogger/blob/master/pylogger.py): `pylogger.py`

### Other components

- **Computer user**
- **Keyboard events**
- **Windows APIs**
- **Clipboard API**
- **Drive destination**

## Connections

- Computer user → Keyboard events: types keys
- Keyboard events → Pylogger runtime: delivers events
- Pylogger runtime → Foreground context: queries on change
- Foreground context → Windows APIs: queries process
- Pylogger runtime → Clipboard API: reads paste
- Clipboard API → Clipboard text: returns text
- Pylogger runtime → Trigger checks: checks characters
- Trigger checks → Pause and resume: dispatches
- Trigger checks → Status beep: dispatches
- Trigger checks → Quit command: dispatches
- Trigger checks → Log deletion: dispatches
- Trigger checks → Drive dump: dispatches
- Pylogger runtime → Log writer: writes captured text
- Foreground context → Log writer: writes context
- Clipboard text → Log writer: writes paste
- Pause and resume → Log writer: gates writes
- Log writer → Log rotation: checks size
- Log writer → Log files: writes
- Log rotation → Log files: archives oversized
- Log deletion → Log files: deletes
- Drive dump → Log files: copies
- Drive dump → Drive destination: copies to drive
