modian-common is the core infrastructure and protocol SDK for the Modian IME (Input Method Editor) ecosystem. It is a set of pure, modern C++ and CMake-based foundational component libraries.
When building a cross-platform, high-performance modern input method, we physically isolate the complex "business brain" (Inkstone) from the "system UI/hooks" (Brush). modian-common was born to enable these isolated components to collaborate seamlessly and with ultra-low latency.
Our ultimate goals are:
- Building a Cross-Boundary Consensus: Providing a unified Inter-Process Communication (IPC) mechanism, protocol definitions, and logging infrastructure across the entire ecosystem.
- Frictionless Integration: Serving as an SDK for the third-party developer ecosystem. In the future, developers can simply include this library to easily build customized plugins for Modian.
- Zero-Intrusion Clean Architecture: Strictly adhering to the Dependency Inversion Principle (DIP). Highly modularized to completely decouple core business logic from OS-specific APIs.
This repository strictly follows Clean Architecture principles and is divided into the following core layers (CMake targets):
- Core (
modian::common::core::*) The pure domain layer. Contains zero-dependency pure virtual interfaces (e.g.,iasync_ipc_server) and core data structures (Protocol Structs). - Service (
modian::common::service::*) The protocol processing layer. Responsible for converting between underlying data and core domain models (e.g., JSON serialization and deserialization). - Infra (
modian::common::infra::*) The infrastructure implementation layer. Embraces OS-specific APIs and heavy third-party libraries (e.g., Windows Named Pipe IPC implementations, Spdlog wrappers, and charset utilities). - Test Infra (
modian::common::test_infra::*) Provides unified mocks and testing scaffolds for the entire ecosystem.
This library natively supports CMake's FetchContent, allowing for extremely smooth integration into your C++ projects.
(Detailed API documentation and code examples will be added upon the official 1.0 release.)
This project is licensed under the Apache License 2.0.