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 manages a PureIME-owned catalog of optional extension dictionaries. First selection downloads and verifies an immutable artifact; supplemental dictionaries remain independent mmap layers selected per engine session. The bundled base dictionary is always enabled.
The Rust engine never performs network access. The macOS shell uses the network only when the user explicitly installs a managed extension dictionary. PureIME does not include an in-app updater.
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.imelexTo build the pinned Wanxiang full dictionary and the native macOS bundle:
scripts/build-wanxiang-dictionary.sh
platforms/macos/build.shFor the local development loop, build and atomically replace the installed input method, or run both engine and real InputMethodKit performance gates:
scripts/install-local-input-method.sh
scripts/validate-performance.shSigned release archives use the native Xcode target and the maintainer's local Automatic Signing identity:
scripts/prepare_macos_release.shSee 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.jsonA 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.
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.