# qingjian-team/qingjian architecture

> Architecture diagram of the GitHub repository qingjian-team/qingjian, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-10-07). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/qingjian-team/qingjian
- Repository: https://github.com/qingjian-team/qingjian

## Overview

Qingjian is a cross-platform Chinese input method that turns typed input into candidate text, with optional translations alongside candidates. The main user path is platform key handling, server-side dispatch and core conversion, then candidate display and text commit. Local language models and learned word frequencies improve ordering; optional cloud prediction and translation add separate capabilities. Settings and usage statistics support configuration and learning. The README documents these capabilities; sampled source confirms several protocol, CLI, and prediction details, but not every platform wiring path.

Main entry points: [`crates/qingjian-core/src/engine/session.rs`](https://github.com/qingjian-team/qingjian/blob/main/crates/qingjian-core/src/engine/session.rs) (Conversion engine), [`apps/cli/src/main.rs`](https://github.com/qingjian-team/qingjian/blob/main/apps/cli/src/main.rs) (Core CLI), [`apps/macos/src/candidates/window.rs`](https://github.com/qingjian-team/qingjian/blob/main/apps/macos/src/candidates/window.rs) (Candidate display), [`crates/qingjian-platform/src/protocol/server.rs`](https://github.com/qingjian-team/qingjian/blob/main/crates/qingjian-platform/src/protocol/server.rs) (Platform protocol)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_platforms["Input platforms"]
  node_macos["macOS IMK<br/>[client.rs]"]
  node_windows["Windows TSF client<br/>[engine.rs]"]
  node_linux["Linux Fcitx5<br/>[qingjian.cpp]"]
  node_linux_server["Linux server<br/>[main.rs]"]
  node_windows_server["Windows server<br/>[main.rs]"]
  node_protocol["Platform protocol<br/>[server.rs]"]
  node_candidate_ui["Candidate display<br/>[window.rs]"]
  node_renderer["Text rendering<br/>[mod.rs]"]
end

subgraph group_engine["Input engine"]
  node_engine_core["Conversion engine<br/>[session.rs]"]
  node_dictionary[("Dictionary lookup<br/>[mod.rs]")]
  node_language_model[("Local language model<br/>[bigram_model.rs]")]
end

subgraph group_learning["Learning features"]
  node_glossary[("Candidate translations<br/>[storage.rs]")]
  node_learning_data[("Usage and vocabulary<br/>[vocabulary_book.rs]")]
end

subgraph group_configuration["Settings and services"]
  node_settings_ui["Preferences UI<br/>[mod.rs]"]
  node_windows_settings["Windows settings<br/>[mod.rs]"]
  node_settings["Input configuration<br/>[mod.rs]"]
  node_cloud_prediction["Cloud prediction<br/>[chat_client.rs]"]
  node_update["Update checks<br/>[mod.rs]"]
end

subgraph group_tools["Developer tools"]
  node_cli["Core CLI<br/>[main.rs]"]
  node_cli_display["CLI candidate display<br/>[display.rs]"]
  node_cli_eval["Input evaluation<br/>[mod.rs]"]
  node_cli_tuning["Rescoring tools<br/>[tuning.rs]"]
end

node_user(("Input user"))

node_user -->|"types into"| node_macos
node_user -->|"types into"| node_windows
node_user -->|"types into"| node_linux
node_macos -.->|"sends input"| node_engine_core
node_windows -->|"sends key events"| node_protocol
node_windows_server -->|"sends replies"| node_protocol
node_protocol -.->|"dispatches input"| node_engine_core
node_linux -.->|"communicates with"| node_linux_server
node_linux_server -.->|"dispatches input"| node_engine_core
node_engine_core -->|"looks up words"| node_dictionary
node_engine_core -->|"ranks sentences"| node_language_model
node_engine_core -->|"loads translations"| node_glossary
node_engine_core -->|"learns locally"| node_learning_data
node_engine_core -.->|"provides candidates"| node_candidate_ui
node_candidate_ui -.->|"renders text"| node_renderer
node_candidate_ui -->|"shows candidates"| node_user
node_settings_ui -.->|"edits settings"| node_settings
node_windows_settings -.->|"edits settings"| node_settings
node_settings -.->|"configures optional use"| node_cloud_prediction
node_engine_core -.->|"requests predictions"| node_cloud_prediction
node_user -->|"may check updates"| node_update
node_cli -->|"builds engine"| node_engine_core
node_cli -->|"shows typing"| node_cli_display
node_cli -->|"runs evaluation"| node_cli_eval
node_cli -.->|"offers tuning"| node_cli_tuning

click node_macos "https://github.com/qingjian-team/qingjian/blob/main/apps/macos/src/imk/client.rs"
click node_windows "https://github.com/qingjian-team/qingjian/blob/main/apps/windows/tsf/src/client/engine.rs"
click node_linux "https://github.com/qingjian-team/qingjian/blob/main/apps/linux/fcitx5/src/qingjian.cpp"
click node_linux_server "https://github.com/qingjian-team/qingjian/blob/main/apps/linux/server/src/main.rs"
click node_windows_server "https://github.com/qingjian-team/qingjian/blob/main/apps/windows/server/src/main.rs"
click node_protocol "https://github.com/qingjian-team/qingjian/blob/main/crates/qingjian-platform/src/protocol/server.rs"
click node_settings_ui "https://github.com/qingjian-team/qingjian/blob/main/apps/macos/src/preferences/mod.rs"
click node_windows_settings "https://github.com/qingjian-team/qingjian/blob/main/apps/windows/settings/src/panel/mod.rs"
click node_settings "https://github.com/qingjian-team/qingjian/blob/main/crates/qingjian-platform/src/config/mod.rs"
click node_engine_core "https://github.com/qingjian-team/qingjian/blob/main/crates/qingjian-core/src/engine/session.rs"
click node_dictionary "https://github.com/qingjian-team/qingjian/blob/main/crates/qingjian-dictionary/src/dictionary/mod.rs"
click node_language_model "https://github.com/qingjian-team/qingjian/blob/main/crates/qingjian-lm/src/bigram_model.rs"
click node_candidate_ui "https://github.com/qingjian-team/qingjian/blob/main/apps/macos/src/candidates/window.rs"
click node_renderer "https://github.com/qingjian-team/qingjian/blob/main/crates/qingjian-render/src/renderer/mod.rs"
click node_glossary "https://github.com/qingjian-team/qingjian/blob/main/crates/qingjian-translate/src/glossary/storage.rs"
click node_learning_data "https://github.com/qingjian-team/qingjian/blob/main/crates/qingjian-learning/src/vocabulary_book.rs"
click node_cloud_prediction "https://github.com/qingjian-team/qingjian/blob/main/crates/qingjian-predict/src/chat_client.rs"
click node_update "https://github.com/qingjian-team/qingjian/blob/main/crates/qingjian-update/src/checker/mod.rs"
click node_cli "https://github.com/qingjian-team/qingjian/blob/main/apps/cli/src/main.rs"
click node_cli_display "https://github.com/qingjian-team/qingjian/blob/main/apps/cli/src/display.rs"
click node_cli_eval "https://github.com/qingjian-team/qingjian/blob/main/apps/cli/src/eval/mod.rs"
click node_cli_tuning "https://github.com/qingjian-team/qingjian/blob/main/apps/cli/src/tuning.rs"

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_macos,node_windows,node_linux,node_linux_server,node_windows_server,node_protocol,node_candidate_ui,node_renderer,node_user toneBlue
class node_engine_core,node_dictionary,node_language_model toneAmber
class node_glossary,node_learning_data toneMint
class node_settings_ui,node_windows_settings,node_settings,node_cloud_prediction,node_update toneRose
class node_cli,node_cli_display,node_cli_eval,node_cli_tuning toneIndigo
```

## Components

### Input platforms

- [macOS IMK](https://github.com/qingjian-team/qingjian/blob/main/apps/macos/src/imk/client.rs): `apps/macos/src/imk/client.rs`
- [Windows TSF client](https://github.com/qingjian-team/qingjian/blob/main/apps/windows/tsf/src/client/engine.rs): `apps/windows/tsf/src/client/engine.rs`
- [Linux Fcitx5](https://github.com/qingjian-team/qingjian/blob/main/apps/linux/fcitx5/src/qingjian.cpp): `apps/linux/fcitx5/src/qingjian.cpp`
- [Linux server](https://github.com/qingjian-team/qingjian/blob/main/apps/linux/server/src/main.rs): `apps/linux/server/src/main.rs`
- [Windows server](https://github.com/qingjian-team/qingjian/blob/main/apps/windows/server/src/main.rs): `apps/windows/server/src/main.rs`
- [Platform protocol](https://github.com/qingjian-team/qingjian/blob/main/crates/qingjian-platform/src/protocol/server.rs): `crates/qingjian-platform/src/protocol/server.rs`
- [Candidate display](https://github.com/qingjian-team/qingjian/blob/main/apps/macos/src/candidates/window.rs): `apps/macos/src/candidates/window.rs`
- [Text rendering](https://github.com/qingjian-team/qingjian/blob/main/crates/qingjian-render/src/renderer/mod.rs): `crates/qingjian-render/src/renderer/mod.rs`

### Input engine

- [Conversion engine](https://github.com/qingjian-team/qingjian/blob/main/crates/qingjian-core/src/engine/session.rs): `crates/qingjian-core/src/engine/session.rs`
- [Dictionary lookup](https://github.com/qingjian-team/qingjian/blob/main/crates/qingjian-dictionary/src/dictionary/mod.rs): `crates/qingjian-dictionary/src/dictionary/mod.rs`
- [Local language model](https://github.com/qingjian-team/qingjian/blob/main/crates/qingjian-lm/src/bigram_model.rs): `crates/qingjian-lm/src/bigram_model.rs`

### Learning features

- [Candidate translations](https://github.com/qingjian-team/qingjian/blob/main/crates/qingjian-translate/src/glossary/storage.rs): `crates/qingjian-translate/src/glossary/storage.rs`
- [Usage and vocabulary](https://github.com/qingjian-team/qingjian/blob/main/crates/qingjian-learning/src/vocabulary_book.rs): `crates/qingjian-learning/src/vocabulary_book.rs`

### Settings and services

- [Preferences UI](https://github.com/qingjian-team/qingjian/blob/main/apps/macos/src/preferences/mod.rs): `apps/macos/src/preferences/mod.rs`
- [Windows settings](https://github.com/qingjian-team/qingjian/blob/main/apps/windows/settings/src/panel/mod.rs): `apps/windows/settings/src/panel/mod.rs`
- [Input configuration](https://github.com/qingjian-team/qingjian/blob/main/crates/qingjian-platform/src/config/mod.rs): `crates/qingjian-platform/src/config/mod.rs`
- [Cloud prediction](https://github.com/qingjian-team/qingjian/blob/main/crates/qingjian-predict/src/chat_client.rs): `crates/qingjian-predict/src/chat_client.rs`
- [Update checks](https://github.com/qingjian-team/qingjian/blob/main/crates/qingjian-update/src/checker/mod.rs): `crates/qingjian-update/src/checker/mod.rs`

### Developer tools

- [Core CLI](https://github.com/qingjian-team/qingjian/blob/main/apps/cli/src/main.rs): `apps/cli/src/main.rs`
- [CLI candidate display](https://github.com/qingjian-team/qingjian/blob/main/apps/cli/src/display.rs): `apps/cli/src/display.rs`
- [Input evaluation](https://github.com/qingjian-team/qingjian/blob/main/apps/cli/src/eval/mod.rs): `apps/cli/src/eval/mod.rs`
- [Rescoring tools](https://github.com/qingjian-team/qingjian/blob/main/apps/cli/src/tuning.rs): `apps/cli/src/tuning.rs`

### Other components

- **Input user**

## Connections

- Input user → macOS IMK: types into
- Input user → Windows TSF client: types into
- Input user → Linux Fcitx5: types into
- macOS IMK → Conversion engine: sends input
- Windows TSF client → Platform protocol: sends key events (evidence: `apps/windows/tsf/src/client/engine.rs`)
- Windows server → Platform protocol: sends replies (evidence: `crates/qingjian-platform/src/protocol/server.rs`)
- Platform protocol → Conversion engine: dispatches input
- Linux Fcitx5 → Linux server: communicates with
- Linux server → Conversion engine: dispatches input
- Conversion engine → Dictionary lookup: looks up words
- Conversion engine → Local language model: ranks sentences
- Conversion engine → Candidate translations: loads translations
- Conversion engine → Usage and vocabulary: learns locally
- Conversion engine → Candidate display: provides candidates
- Candidate display → Text rendering: renders text
- Candidate display → Input user: shows candidates
- Preferences UI → Input configuration: edits settings
- Windows settings → Input configuration: edits settings
- Input configuration → Cloud prediction: configures optional use
- Conversion engine → Cloud prediction: requests predictions
- Input user → Update checks: may check updates
- Core CLI → Conversion engine: builds engine (evidence: `apps/cli/src/main.rs`)
- Core CLI → CLI candidate display: shows typing (evidence: `apps/cli/src/main.rs`)
- Core CLI → Input evaluation: runs evaluation (evidence: `apps/cli/src/main.rs`)
- Core CLI → Rescoring tools: offers tuning (evidence: `apps/cli/src/main.rs`)
