# kenny824319/dualityime architecture

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

## Overview

DualityIME is a Windows Traditional Chinese Zhuyin IME for mixed Chinese–English composition. The user types in an application; the TSF service forwards keys over a named pipe to the engine, which composes text and returns composition, candidates, replacements, and suggestions for display or commit. The README also documents personal vocabulary, lookup, symbol keyboard, settings, learning, and updates. Edges below use only relationships visible in excerpts, the source index, or README; unsampled feature links are omitted where implementation wiring is not shown.

Main entry points: [`cpp/engine/composer.cpp`](https://github.com/kenny824319/dualityime/blob/main/cpp/engine/composer.cpp) (Composer), [`cpp/server/engine_main.cpp`](https://github.com/kenny824319/dualityime/blob/main/cpp/server/engine_main.cpp) (Engine server), [`cpp/tip/text_service.cpp`](https://github.com/kenny824319/dualityime/blob/main/cpp/tip/text_service.cpp) (TSF text service), [`cpp/tip/engine_client.cpp`](https://github.com/kenny824319/dualityime/blob/main/cpp/tip/engine_client.cpp) (Engine client)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["Windows IME"]
  node_textservice["TSF text service<br/>[text_service.cpp]"]
  node_clientpipe["Engine client<br/>[engine_client.cpp]"]
  node_pipe["Named pipe<br/>[pipe.cpp]"]
end

subgraph group_engine["Composition Engine"]
  node_server["Engine server<br/>[engine_main.cpp]"]
  node_composer["Composer<br/>[composer.cpp]"]
  node_zhuyin["Zhuyin parsing<br/>[zhuyin.cpp]"]
end

subgraph group_data["Language Resources"]
  node_lexicon[("Lexicon and learning<br/>[lexicon.cpp]")]
  node_bigram[("Bigram model<br/>[bigram.cpp]")]
  node_lm[("Language model<br/>[lm.cpp]")]
  node_config[("Engine configuration<br/>[config.cpp]")]
end

subgraph group_settings["Settings and Maintenance"]
  node_settingsui["Settings interface<br/>[app.js]"]
  node_setup["Installer and migration<br/>[Setup.cs]"]
  node_migration["Data migration<br/>[Migrate.cs]"]
  node_updater["Updater<br/>[Updater.cs]"]
end

node_user(("Typist"))
node_app["Windows app"]

node_user -->|"types in"| node_app
node_app -->|"receives keys"| node_textservice
node_textservice -->|"sends requests"| node_clientpipe
node_clientpipe -->|"transacts JSON"| node_pipe
node_server -->|"serves requests"| node_pipe
node_server -->|"dispatches operations"| node_composer
node_composer -->|"parses syllables"| node_zhuyin
node_composer -->|"looks up phrases"| node_lexicon
node_composer -->|"scores context"| node_bigram
node_composer -->|"scores sentences"| node_lm
node_server -->|"loads settings"| node_config
node_textservice -->|"displays composition"| node_app
node_user -->|"configures and manages"| node_settingsui
node_settingsui -.->|"configures engine"| node_config
node_user -->|"installs or upgrades"| node_setup
node_setup -->|"migrates prior data"| node_migration
node_user -->|"checks for updates"| node_updater

click node_textservice "https://github.com/kenny824319/dualityime/blob/main/cpp/tip/text_service.cpp"
click node_clientpipe "https://github.com/kenny824319/dualityime/blob/main/cpp/tip/engine_client.cpp"
click node_pipe "https://github.com/kenny824319/dualityime/blob/main/cpp/common/pipe.cpp"
click node_server "https://github.com/kenny824319/dualityime/blob/main/cpp/server/engine_main.cpp"
click node_composer "https://github.com/kenny824319/dualityime/blob/main/cpp/engine/composer.cpp"
click node_zhuyin "https://github.com/kenny824319/dualityime/blob/main/cpp/engine/zhuyin.cpp"
click node_lexicon "https://github.com/kenny824319/dualityime/blob/main/cpp/engine/lexicon.cpp"
click node_bigram "https://github.com/kenny824319/dualityime/blob/main/cpp/engine/bigram.cpp"
click node_lm "https://github.com/kenny824319/dualityime/blob/main/cpp/engine/lm.cpp"
click node_config "https://github.com/kenny824319/dualityime/blob/main/cpp/engine/config.cpp"
click node_settingsui "https://github.com/kenny824319/dualityime/blob/main/settings/ui/app.js"
click node_setup "https://github.com/kenny824319/dualityime/blob/main/installer/src/Setup.cs"
click node_migration "https://github.com/kenny824319/dualityime/blob/main/installer/src/Migrate.cs"
click node_updater "https://github.com/kenny824319/dualityime/blob/main/installer/src/Updater.cs"

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_textservice,node_clientpipe,node_pipe toneBlue
class node_server,node_composer,node_zhuyin toneAmber
class node_lexicon,node_bigram,node_lm,node_config toneMint
class node_settingsui,node_setup,node_migration,node_updater toneRose
class node_user,node_app toneIndigo
```

## Components

### Windows IME

- [TSF text service](https://github.com/kenny824319/dualityime/blob/main/cpp/tip/text_service.cpp): `cpp/tip/text_service.cpp`
- [Engine client](https://github.com/kenny824319/dualityime/blob/main/cpp/tip/engine_client.cpp): `cpp/tip/engine_client.cpp`
- [Named pipe](https://github.com/kenny824319/dualityime/blob/main/cpp/common/pipe.cpp): `cpp/common/pipe.cpp`

### Composition Engine

- [Engine server](https://github.com/kenny824319/dualityime/blob/main/cpp/server/engine_main.cpp): `cpp/server/engine_main.cpp`
- [Composer](https://github.com/kenny824319/dualityime/blob/main/cpp/engine/composer.cpp): `cpp/engine/composer.cpp`
- [Zhuyin parsing](https://github.com/kenny824319/dualityime/blob/main/cpp/engine/zhuyin.cpp): `cpp/engine/zhuyin.cpp`

### Language Resources

- [Lexicon and learning](https://github.com/kenny824319/dualityime/blob/main/cpp/engine/lexicon.cpp): `cpp/engine/lexicon.cpp`
- [Bigram model](https://github.com/kenny824319/dualityime/blob/main/cpp/engine/bigram.cpp): `cpp/engine/bigram.cpp`
- [Language model](https://github.com/kenny824319/dualityime/blob/main/cpp/engine/lm.cpp): `cpp/engine/lm.cpp`
- [Engine configuration](https://github.com/kenny824319/dualityime/blob/main/cpp/engine/config.cpp): `cpp/engine/config.cpp`

### Settings and Maintenance

- [Settings interface](https://github.com/kenny824319/dualityime/blob/main/settings/ui/app.js): `settings/ui/app.js`
- [Installer and migration](https://github.com/kenny824319/dualityime/blob/main/installer/src/Setup.cs): `installer/src/Setup.cs`
- [Data migration](https://github.com/kenny824319/dualityime/blob/main/installer/src/Migrate.cs): `installer/src/Migrate.cs`
- [Updater](https://github.com/kenny824319/dualityime/blob/main/installer/src/Updater.cs): `installer/src/Updater.cs`

### Other components

- **Typist**
- **Windows app**

## Connections

- Typist → Windows app: types in
- Windows app → TSF text service: receives keys
- TSF text service → Engine client: sends requests (evidence: `cpp/tip/text_service.cpp`)
- Engine client → Named pipe: transacts JSON (evidence: `cpp/tip/engine_client.cpp`)
- Engine server → Named pipe: serves requests (evidence: `cpp/server/engine_main.cpp`)
- Engine server → Composer: dispatches operations (evidence: `cpp/server/engine_main.cpp`)
- Composer → Zhuyin parsing: parses syllables
- Composer → Lexicon and learning: looks up phrases
- Composer → Bigram model: scores context
- Composer → Language model: scores sentences
- Engine server → Engine configuration: loads settings (evidence: `cpp/server/engine_main.cpp`)
- TSF text service → Windows app: displays composition
- Typist → Settings interface: configures and manages
- Settings interface → Engine configuration: configures engine
- Typist → Installer and migration: installs or upgrades
- Installer and migration → Data migration: migrates prior data (evidence: `installer/src/Setup.cs`)
- Typist → Updater: checks for updates
