[Home](./index.md) > [@keymanapp/kmc-package](./kmc-package.md) > [KmpCompiler](./kmc-package.kmpcompiler.md)
## KmpCompiler class
Compiles a .kps file to a .kmp archive. The compiler does not read or write from filesystem or network directly, but relies on callbacks for all external IO.
**Signature:**
```typescript
export declare class KmpCompiler implements KeymanCompiler
```
**Implements:** KeymanCompiler
## Properties
| Property | Modifiers | Type | Description |
| --- | --- | --- | --- |
| [normalizePath](./kmc-package.kmpcompiler.normalizepath.md) | readonly | (path: string) => string | |
## Methods
| Method | Modifiers | Description |
| --- | --- | --- |
| [init(callbacks, options)](./kmc-package.kmpcompiler.init.md) | | Initialize the compiler. Copies options. |
| [run(inputFilename, outputFilename)](./kmc-package.kmpcompiler.run.md) | | Compiles a .kps file to .kmp file. Returns an object containing binary artifacts on success. The files are passed in by name, and the compiler will use callbacks as passed to the [KmpCompiler.init()](./kmc-package.kmpcompiler.init.md) function to read any input files by disk. |
| [write(artifacts)](./kmc-package.kmpcompiler.write.md) | |
Write artifacts from a successful compile to disk, via callbacks methods. The artifacts written may include:
- .kmp file - binary keyboard package used by Keyman on desktop and touch platforms
|