Migrating from kmcomp to kmc
kmcomp was the command-line compiler for Keyman Developer through version
16.0. Version 17.0 replaces kmcomp with kmc.
The lexical model command-line tooling, kmlmc, kmlmp, and kmlmi, have
been removed in version 19.0; instead use kmc.
Benefits
- Unlike
kmcomp, which was a Windows-only console application,kmcis a cross-platform application, running on Windows, Linux, and macOS, built in node.js. kmcparameters have been redesigned to be more consistent, and easily extensible for new functionality.kmccan run in a batch mode that is up to 100x faster thankmcomp.kmccan be easily integrated into GitHub Actions and other continuous integration tooling.
Compiling a project
To compile a project, kmcomp used a command line such as:
kmcomp path\to\my_keyboard.kpj
With kmc, you would use:
kmc build path/to/my_keyboard.kpj
# or you can specify just the folder:
kmc build path/to/
# If you are in the same folder as the .kpj:
kmc build .
This is the recommended way of using kmc -- always build an entire project,
rather than just the keyboard.
Compiling a keyboard
To compile a keyboard, kmcomp builds used command lines such as:
# building a .kmx
kmcomp my_keyboard.kmn my_keyboard.kmx
# building a .js (for KeymanWeb)
kmcomp my_keyboard.kmn my_keyboard.js
With kmc, you would use:
# building all outputs
kmc build my_keyboard.kmn
# or to specify output files (.js inferred from .kmx, and always built)
kmc build my_keyboard.kmn -o my_keyboard.kmx
Compiling a package
To compile a package, kmcomp builds used command lines such as:
kmcomp my_keyboard.kps
With kmc, you would use:
kmc build my_keyboard.kps
# to specify output file or path
kmc build my_keyboard.kps -o path/to/my_keyboard.kmp
Map of parameters
The following table lists common parameters in kmcomp, and the corresponding
parameter in kmc:
| kmcomp | kmc | notes |
|---|---|---|
-h, -help |
-h, --help |
Note that kmc --help can be used for further detail on subcommands, e.g. kmc build --help |
-s |
-l warn, --log-level warn |
Silent option, suppresses informational and hint-level messages |
-ss |
-l silent, --log-level silent |
Super-silent option, suppresses all messages, except fatal internal errors |
-nologo |
not required | kmc does not emit a compiler description |
-c |
N/A | kmc does not currently support the clean command, this will be supported in future versions |
-d |
-d, --debug |
Include debug information in output files |
-w |
-w, --compiler-warnings-as-errors |
Causes warnings to fail the build; overrides project-level option |
-cfc |
not required | Filename convention checks are now standard hints/warnings in the build |
-t |
N/A | Build specified target from .kpj, not supported in kmc |
-color |
--color |
Force colorization for log messages |
-no-color |
--no-color |
No colorization for log messages |
-no-compiler-version |
--no-compiler-version |
Exclude compiler version metadata from output files |
Compiling a lexical model
# recommended, build the model project:
kmc build .
# building single files:
kmc build file.model.ts
kmc build file.model.ts -o output/path/file.model.js
kmc build file.model.kps


