Skip to content

Repository files navigation

PureIME

PureIME is a local-first Chinese input method. The current validation target supports Full Pinyin and Flypy Shuangpin on Apple silicon Macs running macOS 26 or newer.

The repository currently contains:

  • ime-core: canonical pinyin, Full Pinyin and Flypy parsing, dictionary decoding, ranking, personal preferences, and the synchronous session state machine.
  • ime-tools: dictionary compiler, interactive REPL, and benchmarks.
  • ime-ffi: the narrow C ABI used by native platform adapters.
  • platforms/macos: the Swift/AppKit/InputMethodKit adapter.

The macOS settings UI can opt into a separately compiled software-development terminology dictionary. Supplemental dictionaries remain independent mmap layers and are selected per engine session.

The Rust engine never performs network access. The macOS shell accesses the network only through Sparkle when checking for signed application updates.

Quick start

cargo run --locked -p ime-tools -- dict compile \
  dictionary/source/minimal.tsv \
  dictionary/generated/base.imelex
cargo run --locked -p ime-tools -- repl dictionary/generated/base.imelex
cargo run --locked --release -p ime-tools -- bench dictionary/generated/base.imelex

To build the pinned AOSP dictionary and the native macOS bundle:

scripts/build-aosp-dictionary.sh
platforms/macos/build.sh

Signed release archives use the native Xcode target and the maintainer's local Automatic Signing identity:

scripts/prepare_macos_release.sh

See the macOS release guide for the tagging and publication boundary.

For private quality experiments, ime-tools can compile user-supplied Rime table dictionaries without downloading or committing them:

cargo run --locked -p ime-tools -- dict import-rime-local \
  /absolute/path/to/rime-dictionary-or-directory \
  dictionary/generated/rime-local.imelex \
  dictionary/generated/rime-local-report.json

A directory import reads its top-level *.dict.yaml files in stable filename order. It accepts the standard text, space-separated pinyin code, and numeric or percentage weight columns; unsupported rows are listed in the report. It does not resolve Rime schemas, import_tables, Lua filters, OpenCC, or language models.

Imported data keeps its original license. Local compiled output is for private testing and must not be committed or redistributed unless every source passes the project data intake policy in docs/references/rime-ecosystem.md.

License

Code and project-owned data are licensed under Apache-2.0. Third-party data keeps its original license and provenance; see docs/data-provenance.md.

About

A local-first Chinese input method with a Rust core for macOS 26

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages