Cim 2.0.0 Released

Cim 2.0.0 Released

On December 7, 2025, Cim (Common Input Method) version 2.0.0 was released. This update marks a major version change, featuring ABI (Application Binary Interface) changes in libcim, the addition of Qt6 support, and a refactoring of the plugin architecture.

Key changes are as follows:

1. Support for Qt6 Input Method Module

Configuration support for the Qt6 environment (detection of core, gui, and widgets paths) has been added. The configure script now detects platform-specific paths for Qt6 on FreeBSD and Linux distributions.

  • The libqt6im-cim.so library has been implemented to bridge Qt6 events to Cim via QPlatformInputContext.
  • The CimQic class has been implemented to handle preedit drawing, committing, surrounding text processing, and cursor updates.
  • Qt6 support can be disabled via the --disable-qt6 option during build configuration.

2. Core Architecture Refactoring and ABI Changes

The major version of the libcim library has been bumped to 2, breaking ABI compatibility with previous versions.

  • Introduction of Opaque Handles: The CimIc struct has been refactored to use an opaque handle (CimIcHandle) and a virtual function table (vtable) to hide implementation details.
  • Dynamic Dispatch: CimIcVTable and CimPlugin structs have been introduced to support dynamic dispatch for plugins.
  • API Naming Convention Changes: Instance creation and destruction functions have been changed from cim_ic_new/free to cim_ic_create/destroy.

3. Data Type and API Standardization

Data type clarity has been improved across the API.

  • The API has been updated to use uint32_t for sizes and counts, and int32_t for coordinates.
  • Callback signatures have been standardized, and consistent use of nullptr has been applied.

4. Other Improvements

  • C Standard: Support for the C2x (C23) standard is enabled by default and can be disabled via the --disable-c2x option.
  • Safety Enhancements: Safety has been improved with zero size checks in c_mem functions and updates to c_utf8_strncpy.
  • Ruby Bindings: libcim/cim.rb has been added to facilitate Cim testing via Fiddle.
  • String Utility: An implementation of c_str_sprintf has been added.

This release focuses on structural modernization and scalability for the Qt6 environment. Existing users may need to modify their code due to API and ABI changes.

Cim source code can be downloaded from https://nimfsoft.art/cim/