# naa3141/win-unicode-console-reborn architecture

> Architecture diagram of the GitHub repository naa3141/win-unicode-console-reborn, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-26). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/naa3141/win-unicode-console-reborn
- Repository: https://github.com/naa3141/win-unicode-console-reborn

## Overview

This is a compatibility library for Unicode console I/O on Windows, with an optional script runner and interactive REPL. Its stream layer wraps Windows UTF-16 console calls in Python text streams; Python 2 also has dedicated input and argv compatibility modules. The README describes enable()/disable() as the main workflow, but the sampled package initializer’s enable() is a no-op; its disable() does call the console, readline, and stream shutdown functions. The graph reflects that source evidence. Several supporting modules were not sampled, so their internal wiring is omitted.

Main entry points: [`win_unicode_console/__init__.py`](https://github.com/naa3141/win-unicode-console-reborn/blob/main/win_unicode_console/__init__.py) (Package API), [`win_unicode_console/runner.py`](https://github.com/naa3141/win-unicode-console-reborn/blob/main/win_unicode_console/runner.py) (Script runner), [`win_unicode_console/streams.py`](https://github.com/naa3141/win-unicode-console-reborn/blob/main/win_unicode_console/streams.py) (Stream setup), [`win_unicode_console/console.py`](https://github.com/naa3141/win-unicode-console-reborn/blob/main/win_unicode_console/console.py) (Interactive console)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_streams["Console streams"]
  node_api["Package API<br/>[__init__.py]"]
  node_streamlayer["Stream setup<br/>[streams.py]"]
  node_rawio["Console raw I/O<br/>[streams.py]"]
  node_buffer["Buffer access<br/>[buffer.py]"]
  node_platforminfo["Platform checks<br/>[info.py]"]
  node_fileobj["Python 2 file adapter<br/>[file_object.py]"]
  node_patch["Windows patch hook<br/>[windows.py]"]
end

subgraph group_compat["Input compatibility"]
  node_readline["Readline hook<br/>[readline_hook.py]"]
  node_rawinput["Python 2 input<br/>[raw_input.py]"]
  node_argv["Unicode arguments<br/>[unicode_argv.py]"]
end

subgraph group_execution["Script and REPL"]
  node_tokenize["Source decoding<br/>[tokenize_open.py]"]
  node_runner["Script runner<br/>[runner.py]"]
  node_launcher["Module launcher<br/>[run.py]"]
  node_sitecustomize["Startup hook<br/>[sitecustomize.py]"]
  node_console["Interactive console<br/>[console.py]"]
end

node_developer(("Python application"))
node_python(("Python runtime"))
node_winconsole(("Windows console"))

node_developer -->|"calls enable"| node_api
node_sitecustomize -->|"calls enable"| node_api
node_api -->|"executes on import"| node_patch
node_api -->|"disables"| node_console
node_api -->|"disables"| node_readline
node_api -->|"disables"| node_streamlayer
node_streamlayer -->|"builds wrappers"| node_rawio
node_rawio -->|"gets buffer"| node_buffer
node_rawio -->|"reads and writes"| node_winconsole
node_streamlayer -->|"checks platform"| node_platforminfo
node_streamlayer -->|"uses on Python 2"| node_fileobj
node_runner -->|"initializes"| node_api
node_runner -->|"starts custom REPL"| node_console
node_runner -->|"reads source on Python 2"| node_tokenize
node_launcher -->|"dispatches"| node_runner
node_runner -->|"executes script"| node_python
node_console -->|"runs statements"| node_python
node_console -->|"prompts"| node_developer
node_readline -->|"hooks readline"| node_python
node_rawinput -->|"uses readline"| node_readline
node_rawinput -->|"checks TTY"| node_platforminfo
node_api -->|"disables on Python 2"| node_rawinput
node_api -->|"disables on Windows Python 2"| node_argv

click node_api "https://github.com/naa3141/win-unicode-console-reborn/blob/main/win_unicode_console/__init__.py"
click node_streamlayer "https://github.com/naa3141/win-unicode-console-reborn/blob/main/win_unicode_console/streams.py"
click node_rawio "https://github.com/naa3141/win-unicode-console-reborn/blob/main/win_unicode_console/streams.py"
click node_buffer "https://github.com/naa3141/win-unicode-console-reborn/blob/main/win_unicode_console/buffer.py"
click node_platforminfo "https://github.com/naa3141/win-unicode-console-reborn/blob/main/win_unicode_console/info.py"
click node_fileobj "https://github.com/naa3141/win-unicode-console-reborn/blob/main/win_unicode_console/file_object.py"
click node_readline "https://github.com/naa3141/win-unicode-console-reborn/blob/main/win_unicode_console/readline_hook.py"
click node_rawinput "https://github.com/naa3141/win-unicode-console-reborn/blob/main/win_unicode_console/raw_input.py"
click node_argv "https://github.com/naa3141/win-unicode-console-reborn/blob/main/win_unicode_console/unicode_argv.py"
click node_tokenize "https://github.com/naa3141/win-unicode-console-reborn/blob/main/win_unicode_console/tokenize_open.py"
click node_runner "https://github.com/naa3141/win-unicode-console-reborn/blob/main/win_unicode_console/runner.py"
click node_launcher "https://github.com/naa3141/win-unicode-console-reborn/blob/main/run.py"
click node_sitecustomize "https://github.com/naa3141/win-unicode-console-reborn/blob/main/sitecustomize.py"
click node_console "https://github.com/naa3141/win-unicode-console-reborn/blob/main/win_unicode_console/console.py"
click node_patch "https://github.com/naa3141/win-unicode-console-reborn/blob/main/win_unicode_console/platformpatches/windows.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_api,node_streamlayer,node_rawio,node_buffer,node_platforminfo,node_fileobj,node_patch toneBlue
class node_readline,node_rawinput,node_argv toneAmber
class node_tokenize,node_runner,node_launcher,node_sitecustomize,node_console toneMint
class node_developer,node_python,node_winconsole toneIndigo
```

## Components

### Console streams

- [Package API](https://github.com/naa3141/win-unicode-console-reborn/blob/main/win_unicode_console/__init__.py): `win_unicode_console/__init__.py`
- [Stream setup](https://github.com/naa3141/win-unicode-console-reborn/blob/main/win_unicode_console/streams.py): `win_unicode_console/streams.py`
- [Console raw I/O](https://github.com/naa3141/win-unicode-console-reborn/blob/main/win_unicode_console/streams.py): `win_unicode_console/streams.py`
- [Buffer access](https://github.com/naa3141/win-unicode-console-reborn/blob/main/win_unicode_console/buffer.py): `win_unicode_console/buffer.py`
- [Platform checks](https://github.com/naa3141/win-unicode-console-reborn/blob/main/win_unicode_console/info.py): `win_unicode_console/info.py`
- [Python 2 file adapter](https://github.com/naa3141/win-unicode-console-reborn/blob/main/win_unicode_console/file_object.py): `win_unicode_console/file_object.py`
- [Windows patch hook](https://github.com/naa3141/win-unicode-console-reborn/blob/main/win_unicode_console/platformpatches/windows.py): `win_unicode_console/platformpatches/windows.py`

### Input compatibility

- [Readline hook](https://github.com/naa3141/win-unicode-console-reborn/blob/main/win_unicode_console/readline_hook.py): `win_unicode_console/readline_hook.py`
- [Python 2 input](https://github.com/naa3141/win-unicode-console-reborn/blob/main/win_unicode_console/raw_input.py): `win_unicode_console/raw_input.py`
- [Unicode arguments](https://github.com/naa3141/win-unicode-console-reborn/blob/main/win_unicode_console/unicode_argv.py): `win_unicode_console/unicode_argv.py`

### Script and REPL

- [Source decoding](https://github.com/naa3141/win-unicode-console-reborn/blob/main/win_unicode_console/tokenize_open.py): `win_unicode_console/tokenize_open.py`
- [Script runner](https://github.com/naa3141/win-unicode-console-reborn/blob/main/win_unicode_console/runner.py): `win_unicode_console/runner.py`
- [Module launcher](https://github.com/naa3141/win-unicode-console-reborn/blob/main/run.py): `run.py`
- [Startup hook](https://github.com/naa3141/win-unicode-console-reborn/blob/main/sitecustomize.py): `sitecustomize.py`
- [Interactive console](https://github.com/naa3141/win-unicode-console-reborn/blob/main/win_unicode_console/console.py): `win_unicode_console/console.py`

### Other components

- **Python application**
- **Python runtime**
- **Windows console**

## Connections

- Python application → Package API: calls enable
- Startup hook → Package API: calls enable
- Package API → Windows patch hook: executes on import
- Package API → Interactive console: disables
- Package API → Readline hook: disables
- Package API → Stream setup: disables
- Stream setup → Console raw I/O: builds wrappers
- Console raw I/O → Buffer access: gets buffer
- Console raw I/O → Windows console: reads and writes
- Stream setup → Platform checks: checks platform
- Stream setup → Python 2 file adapter: uses on Python 2
- Script runner → Package API: initializes
- Script runner → Interactive console: starts custom REPL
- Script runner → Source decoding: reads source on Python 2
- Module launcher → Script runner: dispatches
- Script runner → Python runtime: executes script
- Interactive console → Python runtime: runs statements
- Interactive console → Python application: prompts
- Readline hook → Python runtime: hooks readline
- Python 2 input → Readline hook: uses readline
- Python 2 input → Platform checks: checks TTY
- Package API → Python 2 input: disables on Python 2
- Package API → Unicode arguments: disables on Windows Python 2
