SCIM is a common IM platform written in C++. It abstracts input method interface into several classes and try to make these classes as simple and independent as possible. With such simple interfaces, developers can write their own input method in a few lines of code very easily. SCIM is highly modularized: most components can be implemented as dynamically loadable modules, thus can be loaded at runtime as you wish. For example, input methods written for SCIM could be IMEngine modules, and users can use such IMEngine modules combined with different interface modules (FrontEnd) in different environment without rewrite/recompile the IMEngine modules.
WWW: https://github.com/scim-im/scim