diff --git a/developer/19.0/reference/api/index.md b/developer/19.0/reference/api/index.md
index 9d6d2599c..db429bce7 100644
--- a/developer/19.0/reference/api/index.md
+++ b/developer/19.0/reference/api/index.md
@@ -27,6 +27,15 @@ Description
kmc-analyze - keyboard analysis classes, including tools for `&displayMap`.
+
+
diff --git a/developer/19.0/reference/api/kmc-convert.converter.init.md b/developer/19.0/reference/api/kmc-convert.converter.init.md
new file mode 100644
index 000000000..d581391f4
--- /dev/null
+++ b/developer/19.0/reference/api/kmc-convert.converter.init.md
@@ -0,0 +1,72 @@
+
+
+[Home](./index.md) > [@keymanapp/kmc-convert](./kmc-convert.md) > [Converter](./kmc-convert.converter.md) > [init](./kmc-convert.converter.init.md)
+
+## Converter.init() method
+
+Initialize the converter. Copies options.
+
+**Signature:**
+
+```typescript
+init(callbacks: CompilerCallbacks, options: CompilerOptions): Promise;
+```
+
+## Parameters
+
+|
+
+Parameter
+
+
+ |
+
+Type
+
+
+ |
+
+Description
+
+
+ |
+|
+
+callbacks
+
+
+ |
+
+CompilerCallbacks
+
+
+ |
+
+Callbacks for external interfaces, including message reporting and file io
+
+
+ |
+|
+
+options
+
+
+ |
+
+CompilerOptions
+
+
+ |
+
+Compiler options
+
+
+ |
+
+
+**Returns:**
+
+Promise<boolean>
+
+false if initialization fails
+
diff --git a/developer/19.0/reference/api/kmc-convert.converter.md b/developer/19.0/reference/api/kmc-convert.converter.md
new file mode 100644
index 000000000..2165d5125
--- /dev/null
+++ b/developer/19.0/reference/api/kmc-convert.converter.md
@@ -0,0 +1,79 @@
+
+
+[Home](./index.md) > [@keymanapp/kmc-convert](./kmc-convert.md) > [Converter](./kmc-convert.converter.md)
+
+## Converter class
+
+Converts keyboards between different source file formats. 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 Converter implements KeymanCompiler
+```
+**Implements:** KeymanCompiler
+
+## Methods
+
+|
+
+Method
+
+
+ |
+
+Modifiers
+
+
+ |
+
+Description
+
+
+ |
+|
+
+[init(callbacks, options)](./kmc-convert.converter.init.md)
+
+
+ |
+
+
+ |
+
+Initialize the converter. Copies options.
+
+
+ |
+|
+
+[run(inputFilename, outputFilename)](./kmc-convert.converter.run.md)
+
+
+ |
+
+
+ |
+
+Converts a keyboard source file to another format. Returns an object containing source artifacts on success. The files are passed in by name, and the compiler will use callbacks as passed to the [Converter.init()](./kmc-convert.converter.init.md) function to read any input files by disk.
+
+
+ |
+|
+
+[write(artifacts)](./kmc-convert.converter.write.md)
+
+
+ |
+
+
+ |
+
+Write artifacts from a successful compile to disk, via callbacks methods. The artifacts written may include:
+
+- .kmn file - source keyboard used by Keyman on desktop platforms - .kvks file - source on screen keyboard used by Keyman on desktop platforms - .keyman-touch-layout file - source touch layout keyboard for touch platforms - other keyboard source files as implemented
+
+
+ |
+
+
diff --git a/developer/19.0/reference/api/kmc-convert.converter.run.md b/developer/19.0/reference/api/kmc-convert.converter.run.md
new file mode 100644
index 000000000..ae7498aa6
--- /dev/null
+++ b/developer/19.0/reference/api/kmc-convert.converter.run.md
@@ -0,0 +1,70 @@
+
+
+[Home](./index.md) > [@keymanapp/kmc-convert](./kmc-convert.md) > [Converter](./kmc-convert.converter.md) > [run](./kmc-convert.converter.run.md)
+
+## Converter.run() method
+
+Converts a keyboard source file to another format. Returns an object containing source artifacts on success. The files are passed in by name, and the compiler will use callbacks as passed to the [Converter.init()](./kmc-convert.converter.init.md) function to read any input files by disk.
+
+**Signature:**
+
+```typescript
+run(inputFilename: string, outputFilename?: string): Promise;
+```
+
+## Parameters
+
+|
+
+Parameter
+
+
+ |
+
+Type
+
+
+ |
+
+Description
+
+
+ |
+|
+
+inputFilename
+
+
+ |
+
+string
+
+
+ |
+
+
+ |
+|
+
+outputFilename
+
+
+ |
+
+string
+
+
+ |
+
+_(Optional)_
+
+
+ |
+
+
+**Returns:**
+
+Promise<[ConverterResult](./kmc-convert.converterresult.md)>
+
+Source artifacts on success, null on failure.
+
diff --git a/developer/19.0/reference/api/kmc-convert.converter.write.md b/developer/19.0/reference/api/kmc-convert.converter.write.md
new file mode 100644
index 000000000..687eab956
--- /dev/null
+++ b/developer/19.0/reference/api/kmc-convert.converter.write.md
@@ -0,0 +1,58 @@
+
+
+[Home](./index.md) > [@keymanapp/kmc-convert](./kmc-convert.md) > [Converter](./kmc-convert.converter.md) > [write](./kmc-convert.converter.write.md)
+
+## Converter.write() method
+
+Write artifacts from a successful compile to disk, via callbacks methods. The artifacts written may include:
+
+- .kmn file - source keyboard used by Keyman on desktop platforms - .kvks file - source on screen keyboard used by Keyman on desktop platforms - .keyman-touch-layout file - source touch layout keyboard for touch platforms - other keyboard source files as implemented
+
+**Signature:**
+
+```typescript
+write(artifacts: ConverterArtifacts): Promise;
+```
+
+## Parameters
+
+|
+
+Parameter
+
+
+ |
+
+Type
+
+
+ |
+
+Description
+
+
+ |
+|
+
+artifacts
+
+
+ |
+
+[ConverterArtifacts](./kmc-convert.converterartifacts.md)
+
+
+ |
+
+object containing artifact data to write out
+
+
+ |
+
+
+**Returns:**
+
+Promise<boolean>
+
+true on success
+
diff --git a/developer/19.0/reference/api/kmc-convert.converterartifacts.md b/developer/19.0/reference/api/kmc-convert.converterartifacts.md
new file mode 100644
index 000000000..8febbedc3
--- /dev/null
+++ b/developer/19.0/reference/api/kmc-convert.converterartifacts.md
@@ -0,0 +1,13 @@
+
+
+[Home](./index.md) > [@keymanapp/kmc-convert](./kmc-convert.md) > [ConverterArtifacts](./kmc-convert.converterartifacts.md)
+
+## ConverterArtifacts interface
+
+**Signature:**
+
+```typescript
+export interface ConverterArtifacts extends KeymanCompilerArtifacts
+```
+**Extends:** KeymanCompilerArtifacts
+
diff --git a/developer/19.0/reference/api/kmc-convert.converteroptions.failifincomplete.md b/developer/19.0/reference/api/kmc-convert.converteroptions.failifincomplete.md
new file mode 100644
index 000000000..bffa9be59
--- /dev/null
+++ b/developer/19.0/reference/api/kmc-convert.converteroptions.failifincomplete.md
@@ -0,0 +1,13 @@
+
+
+[Home](./index.md) > [@keymanapp/kmc-convert](./kmc-convert.md) > [ConverterOptions](./kmc-convert.converteroptions.md) > [failIfIncomplete](./kmc-convert.converteroptions.failifincomplete.md)
+
+## ConverterOptions.failIfIncomplete property
+
+Fail if the keyboard conversion is not 100% complete
+
+**Signature:**
+
+```typescript
+failIfIncomplete?: boolean;
+```
diff --git a/developer/19.0/reference/api/kmc-convert.converteroptions.md b/developer/19.0/reference/api/kmc-convert.converteroptions.md
new file mode 100644
index 000000000..0e8a89892
--- /dev/null
+++ b/developer/19.0/reference/api/kmc-convert.converteroptions.md
@@ -0,0 +1,59 @@
+
+
+[Home](./index.md) > [@keymanapp/kmc-convert](./kmc-convert.md) > [ConverterOptions](./kmc-convert.converteroptions.md)
+
+## ConverterOptions interface
+
+Options for the keyboard converter
+
+**Signature:**
+
+```typescript
+export interface ConverterOptions extends CompilerOptions
+```
+**Extends:** CompilerOptions
+
+## Properties
+
+|
+
+Property
+
+
+ |
+
+Modifiers
+
+
+ |
+
+Type
+
+
+ |
+
+Description
+
+
+ |
+|
+
+[failIfIncomplete?](./kmc-convert.converteroptions.failifincomplete.md)
+
+
+ |
+
+
+ |
+
+boolean
+
+
+ |
+
+_(Optional)_ Fail if the keyboard conversion is not 100% complete
+
+
+ |
+
+
diff --git a/developer/19.0/reference/api/kmc-convert.converterresult.artifacts.md b/developer/19.0/reference/api/kmc-convert.converterresult.artifacts.md
new file mode 100644
index 000000000..c3fcff105
--- /dev/null
+++ b/developer/19.0/reference/api/kmc-convert.converterresult.artifacts.md
@@ -0,0 +1,13 @@
+
+
+[Home](./index.md) > [@keymanapp/kmc-convert](./kmc-convert.md) > [ConverterResult](./kmc-convert.converterresult.md) > [artifacts](./kmc-convert.converterresult.artifacts.md)
+
+## ConverterResult.artifacts property
+
+Internal in-memory build artifacts from a successful compilation. Caller can write these to disk with [Converter.write()](./kmc-convert.converter.write.md)
+
+**Signature:**
+
+```typescript
+artifacts: ConverterArtifacts;
+```
diff --git a/developer/19.0/reference/api/kmc-convert.converterresult.md b/developer/19.0/reference/api/kmc-convert.converterresult.md
new file mode 100644
index 000000000..b9f4b819e
--- /dev/null
+++ b/developer/19.0/reference/api/kmc-convert.converterresult.md
@@ -0,0 +1,57 @@
+
+
+[Home](./index.md) > [@keymanapp/kmc-convert](./kmc-convert.md) > [ConverterResult](./kmc-convert.converterresult.md)
+
+## ConverterResult interface
+
+**Signature:**
+
+```typescript
+export interface ConverterResult extends KeymanCompilerResult
+```
+**Extends:** KeymanCompilerResult
+
+## Properties
+
+|
+
+Property
+
+
+ |
+
+Modifiers
+
+
+ |
+
+Type
+
+
+ |
+
+Description
+
+
+ |
+|
+
+[artifacts](./kmc-convert.converterresult.artifacts.md)
+
+
+ |
+
+
+ |
+
+[ConverterArtifacts](./kmc-convert.converterartifacts.md)
+
+
+ |
+
+Internal in-memory build artifacts from a successful compilation. Caller can write these to disk with [Converter.write()](./kmc-convert.converter.write.md)
+
+
+ |
+
+
diff --git a/developer/19.0/reference/api/kmc-convert.convertertokmnartifacts.keymantouchlayout.md b/developer/19.0/reference/api/kmc-convert.convertertokmnartifacts.keymantouchlayout.md
new file mode 100644
index 000000000..01ac9bdcb
--- /dev/null
+++ b/developer/19.0/reference/api/kmc-convert.convertertokmnartifacts.keymantouchlayout.md
@@ -0,0 +1,13 @@
+
+
+[Home](./index.md) > [@keymanapp/kmc-convert](./kmc-convert.md) > [ConverterToKmnArtifacts](./kmc-convert.convertertokmnartifacts.md) > [keymanTouchLayout](./kmc-convert.convertertokmnartifacts.keymantouchlayout.md)
+
+## ConverterToKmnArtifacts.keymanTouchLayout property
+
+Source touch keyboard filedata and filename
+
+**Signature:**
+
+```typescript
+keymanTouchLayout?: KeymanCompilerArtifactOptional;
+```
diff --git a/developer/19.0/reference/api/kmc-convert.convertertokmnartifacts.kmn.md b/developer/19.0/reference/api/kmc-convert.convertertokmnartifacts.kmn.md
new file mode 100644
index 000000000..6fc6fde90
--- /dev/null
+++ b/developer/19.0/reference/api/kmc-convert.convertertokmnartifacts.kmn.md
@@ -0,0 +1,13 @@
+
+
+[Home](./index.md) > [@keymanapp/kmc-convert](./kmc-convert.md) > [ConverterToKmnArtifacts](./kmc-convert.convertertokmnartifacts.md) > [kmn](./kmc-convert.convertertokmnartifacts.kmn.md)
+
+## ConverterToKmnArtifacts.kmn property
+
+Source keyboard filedata and filename
+
+**Signature:**
+
+```typescript
+kmn?: KeymanCompilerArtifactOptional;
+```
diff --git a/developer/19.0/reference/api/kmc-convert.convertertokmnartifacts.kvks.md b/developer/19.0/reference/api/kmc-convert.convertertokmnartifacts.kvks.md
new file mode 100644
index 000000000..3e04ffbd9
--- /dev/null
+++ b/developer/19.0/reference/api/kmc-convert.convertertokmnartifacts.kvks.md
@@ -0,0 +1,13 @@
+
+
+[Home](./index.md) > [@keymanapp/kmc-convert](./kmc-convert.md) > [ConverterToKmnArtifacts](./kmc-convert.convertertokmnartifacts.md) > [kvks](./kmc-convert.convertertokmnartifacts.kvks.md)
+
+## ConverterToKmnArtifacts.kvks property
+
+Source on screen keyboard filedata and filename
+
+**Signature:**
+
+```typescript
+kvks?: KeymanCompilerArtifactOptional;
+```
diff --git a/developer/19.0/reference/api/kmc-convert.convertertokmnartifacts.md b/developer/19.0/reference/api/kmc-convert.convertertokmnartifacts.md
new file mode 100644
index 000000000..444d0e1c8
--- /dev/null
+++ b/developer/19.0/reference/api/kmc-convert.convertertokmnartifacts.md
@@ -0,0 +1,97 @@
+
+
+[Home](./index.md) > [@keymanapp/kmc-convert](./kmc-convert.md) > [ConverterToKmnArtifacts](./kmc-convert.convertertokmnartifacts.md)
+
+## ConverterToKmnArtifacts interface
+
+Internal in-memory build artifacts from a successful compilation
+
+**Signature:**
+
+```typescript
+export interface ConverterToKmnArtifacts extends ConverterArtifacts
+```
+**Extends:** [ConverterArtifacts](./kmc-convert.converterartifacts.md)
+
+## Properties
+
+|
+
+Property
+
+
+ |
+
+Modifiers
+
+
+ |
+
+Type
+
+
+ |
+
+Description
+
+
+ |
+|
+
+[keymanTouchLayout?](./kmc-convert.convertertokmnartifacts.keymantouchlayout.md)
+
+
+ |
+
+
+ |
+
+KeymanCompilerArtifactOptional
+
+
+ |
+
+_(Optional)_ Source touch keyboard filedata and filename
+
+
+ |
+|
+
+[kmn?](./kmc-convert.convertertokmnartifacts.kmn.md)
+
+
+ |
+
+
+ |
+
+KeymanCompilerArtifactOptional
+
+
+ |
+
+_(Optional)_ Source keyboard filedata and filename
+
+
+ |
+|
+
+[kvks?](./kmc-convert.convertertokmnartifacts.kvks.md)
+
+
+ |
+
+
+ |
+
+KeymanCompilerArtifactOptional
+
+
+ |
+
+_(Optional)_ Source on screen keyboard filedata and filename
+
+
+ |
+
+
diff --git a/developer/19.0/reference/api/kmc-convert.convertertokmnresult.artifacts.md b/developer/19.0/reference/api/kmc-convert.convertertokmnresult.artifacts.md
new file mode 100644
index 000000000..b430cbc73
--- /dev/null
+++ b/developer/19.0/reference/api/kmc-convert.convertertokmnresult.artifacts.md
@@ -0,0 +1,13 @@
+
+
+[Home](./index.md) > [@keymanapp/kmc-convert](./kmc-convert.md) > [ConverterToKmnResult](./kmc-convert.convertertokmnresult.md) > [artifacts](./kmc-convert.convertertokmnresult.artifacts.md)
+
+## ConverterToKmnResult.artifacts property
+
+Internal in-memory build artifacts from a successful compilation to kmn. Caller can write these to disk with [Converter.write()](./kmc-convert.converter.write.md)
+
+**Signature:**
+
+```typescript
+artifacts: ConverterToKmnArtifacts;
+```
diff --git a/developer/19.0/reference/api/kmc-convert.convertertokmnresult.md b/developer/19.0/reference/api/kmc-convert.convertertokmnresult.md
new file mode 100644
index 000000000..3bb0c9f35
--- /dev/null
+++ b/developer/19.0/reference/api/kmc-convert.convertertokmnresult.md
@@ -0,0 +1,57 @@
+
+
+[Home](./index.md) > [@keymanapp/kmc-convert](./kmc-convert.md) > [ConverterToKmnResult](./kmc-convert.convertertokmnresult.md)
+
+## ConverterToKmnResult interface
+
+**Signature:**
+
+```typescript
+export interface ConverterToKmnResult extends ConverterResult
+```
+**Extends:** [ConverterResult](./kmc-convert.converterresult.md)
+
+## Properties
+
+|
+
+Property
+
+
+ |
+
+Modifiers
+
+
+ |
+
+Type
+
+
+ |
+
+Description
+
+
+ |
+|
+
+[artifacts](./kmc-convert.convertertokmnresult.artifacts.md)
+
+
+ |
+
+
+ |
+
+[ConverterToKmnArtifacts](./kmc-convert.convertertokmnartifacts.md)
+
+
+ |
+
+Internal in-memory build artifacts from a successful compilation to kmn. Caller can write these to disk with [Converter.write()](./kmc-convert.converter.write.md)
+
+
+ |
+
+
diff --git a/developer/19.0/reference/api/kmc-convert.md b/developer/19.0/reference/api/kmc-convert.md
new file mode 100644
index 000000000..138562433
--- /dev/null
+++ b/developer/19.0/reference/api/kmc-convert.md
@@ -0,0 +1,96 @@
+
+
+[Home](./index.md) > [@keymanapp/kmc-convert](./kmc-convert.md)
+
+## kmc-convert package
+
+## Classes
+
+|
+
+Class
+
+
+ |
+
+Description
+
+
+ |
+|
+
+[Converter](./kmc-convert.converter.md)
+
+
+ |
+
+Converts keyboards between different source file formats. The compiler does not read or write from filesystem or network directly, but relies on callbacks for all external IO.
+
+
+ |
+
+
+## Interfaces
+
+|
+
+Interface
+
+
+ |
+
+Description
+
+
+ |
+|
+
+[ConverterArtifacts](./kmc-convert.converterartifacts.md)
+
+
+ |
+
+
+ |
+|
+
+[ConverterOptions](./kmc-convert.converteroptions.md)
+
+
+ |
+
+Options for the keyboard converter
+
+
+ |
+|
+
+[ConverterResult](./kmc-convert.converterresult.md)
+
+
+ |
+
+
+ |
+|
+
+[ConverterToKmnArtifacts](./kmc-convert.convertertokmnartifacts.md)
+
+
+ |
+
+Internal in-memory build artifacts from a successful compilation
+
+
+ |
+|
+
+[ConverterToKmnResult](./kmc-convert.convertertokmnresult.md)
+
+
+ |
+
+
+ |
+
+
diff --git a/developer/19.0/reference/messages/index.md b/developer/19.0/reference/messages/index.md
index 09d7d9a13..028e1499c 100644
--- a/developer/19.0/reference/messages/index.md
+++ b/developer/19.0/reference/messages/index.md
@@ -14,3 +14,4 @@ title: Compiler Messages Reference
* [kmc-keyboard-info.KeyboardInfoCompilerMessages](kmc-keyboard-info.keyboardinfocompilermessages)
* [kmc-generate.GeneratorMessages](kmc-generate.generatormessages)
* [kmc-copy.CopierMessages](kmc-copy.copiermessages)
+* [kmc-convert.ConverterMessages](kmc-convert.convertermessages)
diff --git a/developer/19.0/reference/messages/km0c003.md b/developer/19.0/reference/messages/km0c003.md
new file mode 100644
index 000000000..46bf9a9b8
--- /dev/null
+++ b/developer/19.0/reference/messages/km0c003.md
@@ -0,0 +1,11 @@
+---
+title: KM0C003: ERROR_FileNotFound
+---
+
+| | |
+|------------|---------- |
+| Message | Input filename '<param>' does not exist or could not be loaded\. |
+| Module | [kmc-convert.ConverterMessages](kmc-convert.convertermessages) |
+| Identifier | `ERROR_FileNotFound` |
+
+
diff --git a/developer/19.0/reference/messages/km0c004.md b/developer/19.0/reference/messages/km0c004.md
new file mode 100644
index 000000000..21b3e5803
--- /dev/null
+++ b/developer/19.0/reference/messages/km0c004.md
@@ -0,0 +1,11 @@
+---
+title: KM0C004: ERROR_InvalidFile
+---
+
+| | |
+|------------|---------- |
+| Message | The source file has an invalid structure: <param> |
+| Module | [kmc-convert.ConverterMessages](kmc-convert.convertermessages) |
+| Identifier | `ERROR_InvalidFile` |
+
+
diff --git a/developer/19.0/reference/messages/km0c005.md b/developer/19.0/reference/messages/km0c005.md
new file mode 100644
index 000000000..744cbe947
--- /dev/null
+++ b/developer/19.0/reference/messages/km0c005.md
@@ -0,0 +1,11 @@
+---
+title: KM0C005: ERROR_UnableToReadFile
+---
+
+| | |
+|------------|---------- |
+| Message | Input file '<param>' could not be read\. |
+| Module | [kmc-convert.ConverterMessages](kmc-convert.convertermessages) |
+| Identifier | `ERROR_UnableToReadFile` |
+
+
diff --git a/developer/19.0/reference/messages/km0c006.md b/developer/19.0/reference/messages/km0c006.md
new file mode 100644
index 000000000..9ecd8e43e
--- /dev/null
+++ b/developer/19.0/reference/messages/km0c006.md
@@ -0,0 +1,11 @@
+---
+title: KM0C006: ERROR_UnableToRead
+---
+
+| | |
+|------------|---------- |
+| Message | Input file could not be read\. <param> |
+| Module | [kmc-convert.ConverterMessages](kmc-convert.convertermessages) |
+| Identifier | `ERROR_UnableToRead` |
+
+
diff --git a/developer/19.0/reference/messages/km0c007.md b/developer/19.0/reference/messages/km0c007.md
new file mode 100644
index 000000000..a3bbadd2b
--- /dev/null
+++ b/developer/19.0/reference/messages/km0c007.md
@@ -0,0 +1,11 @@
+---
+title: KM0C007: ERROR_UnsupportedCharactersDetected
+---
+
+| | |
+|------------|---------- |
+| Message | Input file contains unsupported character '<param>' at keyMap index <param> on Keycode <param> \(<param>\) |
+| Module | [kmc-convert.ConverterMessages](kmc-convert.convertermessages) |
+| Identifier | `ERROR_UnsupportedCharactersDetected` |
+
+
diff --git a/developer/19.0/reference/messages/km0c008.md b/developer/19.0/reference/messages/km0c008.md
new file mode 100644
index 000000000..f3a324956
--- /dev/null
+++ b/developer/19.0/reference/messages/km0c008.md
@@ -0,0 +1,11 @@
+---
+title: KM0C008: ERROR_UndefinedActionDetected
+---
+
+| | |
+|------------|---------- |
+| Message | Action id <param> of key <param> in keymapIndex <param> is not defined |
+| Module | [kmc-convert.ConverterMessages](kmc-convert.convertermessages) |
+| Identifier | `ERROR_UndefinedActionDetected` |
+
+
diff --git a/developer/19.0/reference/messages/km0c009.md b/developer/19.0/reference/messages/km0c009.md
new file mode 100644
index 000000000..00a54ea60
--- /dev/null
+++ b/developer/19.0/reference/messages/km0c009.md
@@ -0,0 +1,11 @@
+---
+title: KM0C009: ERROR_NoConverterFound
+---
+
+| | |
+|------------|---------- |
+| Message | No converter is available that can convert from '<param>' to '<param>'\. |
+| Module | [kmc-convert.ConverterMessages](kmc-convert.convertermessages) |
+| Identifier | `ERROR_NoConverterFound` |
+
+
diff --git a/developer/19.0/reference/messages/km0c00a.md b/developer/19.0/reference/messages/km0c00a.md
new file mode 100644
index 000000000..03bc66e61
--- /dev/null
+++ b/developer/19.0/reference/messages/km0c00a.md
@@ -0,0 +1,11 @@
+---
+title: KM0C00A: ERROR_UnableToConvert
+---
+
+| | |
+|------------|---------- |
+| Message | Input file '<param>' could not be converted\. |
+| Module | [kmc-convert.ConverterMessages](kmc-convert.convertermessages) |
+| Identifier | `ERROR_UnableToConvert` |
+
+
diff --git a/developer/19.0/reference/messages/km0c00b.md b/developer/19.0/reference/messages/km0c00b.md
new file mode 100644
index 000000000..9a4e5fcbb
--- /dev/null
+++ b/developer/19.0/reference/messages/km0c00b.md
@@ -0,0 +1,11 @@
+---
+title: KM0C00B: ERROR_UnableToWrite
+---
+
+| | |
+|------------|---------- |
+| Message | Output file for '<param>' could not be written\. <param> |
+| Module | [kmc-convert.ConverterMessages](kmc-convert.convertermessages) |
+| Identifier | `ERROR_UnableToWrite` |
+
+
diff --git a/developer/19.0/reference/messages/km0c00c.md b/developer/19.0/reference/messages/km0c00c.md
new file mode 100644
index 000000000..0ed08da02
--- /dev/null
+++ b/developer/19.0/reference/messages/km0c00c.md
@@ -0,0 +1,11 @@
+---
+title: KM0C00C: ERROR_UnableToParse
+---
+
+| | |
+|------------|---------- |
+| Message | Input data could not be parsed\. |
+| Module | [kmc-convert.ConverterMessages](kmc-convert.convertermessages) |
+| Identifier | `ERROR_UnableToParse` |
+
+
diff --git a/developer/19.0/reference/messages/kmc-convert.convertermessages.md b/developer/19.0/reference/messages/kmc-convert.convertermessages.md
new file mode 100644
index 000000000..71e977e3d
--- /dev/null
+++ b/developer/19.0/reference/messages/kmc-convert.convertermessages.md
@@ -0,0 +1,16 @@
+---
+title: Compiler Messages Reference for @keymanapp/kmc-convert
+---
+
+ Code | Identifier | Message
+------|------------|---------
+[KM0C003](km0c003) | `ERROR_FileNotFound` | Input filename '<param>' does not exist or could not be loaded\.
+[KM0C004](km0c004) | `ERROR_InvalidFile` | The source file has an invalid structure: <param>
+[KM0C005](km0c005) | `ERROR_UnableToReadFile` | Input file '<param>' could not be read\.
+[KM0C006](km0c006) | `ERROR_UnableToRead` | Input file could not be read\. <param>
+[KM0C007](km0c007) | `ERROR_UnsupportedCharactersDetected` | Input file contains unsupported character '<param>' at keyMap index <param> on Keycode <param> \(<param>\)
+[KM0C008](km0c008) | `ERROR_UndefinedActionDetected` | Action id <param> of key <param> in keymapIndex <param> is not defined
+[KM0C009](km0c009) | `ERROR_NoConverterFound` | No converter is available that can convert from '<param>' to '<param>'\.
+[KM0C00A](km0c00a) | `ERROR_UnableToConvert` | Input file '<param>' could not be converted\.
+[KM0C00B](km0c00b) | `ERROR_UnableToWrite` | Output file for '<param>' could not be written\. <param>
+[KM0C00C](km0c00c) | `ERROR_UnableToParse` | Input data could not be parsed\.
diff --git a/keyboard/eastern_pwo_karen/1.1/eastern_pwo_karen.php b/keyboard/eastern_pwo_karen/1.1/eastern_pwo_karen.php
new file mode 100644
index 000000000..297af2bfe
--- /dev/null
+++ b/keyboard/eastern_pwo_karen/1.1/eastern_pwo_karen.php
@@ -0,0 +1,20 @@
+
+
+This keyboard is designed for typing the Eastern Pwo Karen language, serving Eastern Pwo Karen communities
+ worldwide. Eastern Pwo Karen is one of the primary branches of the Karen language family, alongside S'gaw Karen
+ and Western Pwo Karen.
+
+
+
+ Desktop Keyboard Layout
+
+
+
+
+ Mobile/Tablet Keyboard Layout
+
+
\ No newline at end of file
diff --git a/keyboard/greek_tonizo/1.0.9/greek_tonizo.php b/keyboard/greek_tonizo/1.0.9/greek_tonizo.php
new file mode 100644
index 000000000..1757ea659
--- /dev/null
+++ b/keyboard/greek_tonizo/1.0.9/greek_tonizo.php
@@ -0,0 +1,10 @@
+
+
+Καλῶς ὁρίσατε στὸ Greek Tonizo!
+Πατῆστε OK ἢ Done γιὰ νὰ ὁλοκληρώσετε τὴν ἐγκατάσταση.
+Γιὰ τὴν λεπτομερῆ παρουσίαση τῶν πληκτρολογίων Greek Tonizo, παρακαλοῦμε πηγαίνετε στὴν ἱστοσελίδα greek.tonizo.gr
+Εὐχαριστοῦμε!
diff --git a/keyboard/isv_latin/1.6/isv_latin.php b/keyboard/isv_latin/1.6/isv_latin.php
new file mode 100644
index 000000000..c2d48c4d1
--- /dev/null
+++ b/keyboard/isv_latin/1.6/isv_latin.php
@@ -0,0 +1,108 @@
+
+
+
+ Tipkovnica za medžuslovjansky jezyk — standardna ortografija: č š ž ě.
+ Interslavic keyboard — standard orthography: č š ž ě.
+ The extended alphabet is deliberately not on this layout.
+
+
+
+ ⚠ iOS 16+: vključi „Allow Full Access" v
+ Nastrojenja → Osnovne → Tipkovnica → Tipkovnici → Keyman.
+ Bez togo tipkovnica v drugyh aplikacijah jest prazdna — bez klaviš.
+ V samoj aplikaciji Keyman vse rabotaje i bez togo.
+ ⚠ iOS 16+: turn on "Allow Full Access" in
+ Settings → General → Keyboard → Keyboards → Keyman. Without it the system
+ keyboard renders blank — no keys. Inside the Keyman app it works either way.
+
+
+Na telefonu · On phone and tablet
+
+
+ Prěvlečeš palcem iz tipky v goru — litera se napiše.
+ Swipe up from the key — the letter is typed. Any upward
+ direction works, so you do not have to aim.
+
+
+
+ | Svaip v goru · Swipe up | Rezultat · Result |
+ | c | č |
+ | s | š |
+ | z | ž |
+ | e | ě |
+
+
+
+ Velike litery — najprvo Shift, potom prěvlečeš.
+ For capitals — press Shift first, then swipe.
+
+
+
+ Drži tipku — to jest drugy sposob.
+ Holding the key also works, but on iOS it is less
+ reliable — Keyman wants you to slide onto the popup before releasing, and the
+ popup sits in a different place for every key. Swiping avoids that
+ entirely.
+
+
+
+ dž ne imaje svoju tipku: to jest d + ž, dva udarjenja.
+ dž has no key of its own — it is d then
+ ž, two taps.
+
+
+
+ Znaky citovanja i tire sut pod tipkoju . i pod - v numeričnom sloju
+ („ ” – —).
+ Quotes and dashes sit under the . key and under
+ - in the number layer.
+
+
+Na kompjuteru · On desktop
+
+
+ Iste litery sut pod AltGr — tako kako v našej tipkovnici za Windows.
+ The same letters sit under Right Alt (AltGr) —
+ exactly as in our Windows layout. Nothing on the base or shift layers is
+ changed, so the keyboard can be left on permanently.
+
+
+
+ | AltGr + | Rezultat · Result |
+ | c | č |
+ | s | š |
+ | z | ž |
+ | e | ě |
+ | ; | „ “ |
+ | ' | ’ ” |
+ | - | – — |
+
+
+Desktop Keyboard Layout
+
+
+
+Phone Keyboard Layout
+
+
+
+Pytanja i grěšky · Questions and bugs
+
+
+ github.com/radoslove/keyboard-interslavic
+
+
+© Radoslove · MIT
diff --git a/keyboard/kachin/1.0/kachin.php b/keyboard/kachin/1.0/kachin.php
new file mode 100644
index 000000000..9124dce46
--- /dev/null
+++ b/keyboard/kachin/1.0/kachin.php
@@ -0,0 +1,352 @@
+
+
+
+ Kachin Keyboard for Jinghpaw language
+
+
+ Alphabet
+
+
+
+ | character |
+ pronunciation |
+ example |
+
+
+ | a |
+ [a] |
+ la(to take) |
+
+
+ | ă |
+ [ə] |
+ kălaw(to do) |
+
+
+ | e |
+ [e̞] |
+ Rem(to keep) |
+
+
+ | è |
+ [e̞] |
+ shărè(brave) |
+
+
+ | ē |
+ [ʲe] [e] |
+ ánhtē(we) |
+
+
+ | i |
+ [i] [ɪ] |
+ lăsi(thin) |
+
+
+ | o |
+ [o] |
+ wora(that, there) |
+
+
+ | ö |
+ [ø] |
+ möng(country) |
+
+
+ | u |
+ [u] [ʊ] |
+ Lu(to have) Numsha(woman) |
+
+
+ | ŭ |
+ [ɯ] |
+ gŭwut(to blow) |
+
+
+ | ai |
+ [ai̯] |
+ mai(good) |
+
+
+ | au |
+ [au̯] |
+ kau(to throw away) |
+
+
+ | aw |
+ [ɔː] |
+ baw(the head) |
+
+
+ | oi |
+ [ʊ̯e] |
+ roi(to deride) |
+
+
+ | b |
+ [b] |
+ ba(to be tired) |
+
+
+ | chy |
+ [t͡ɕʰʲ] |
+ chya(to print) |
+
+
+ | ch |
+ [t͡ɕʰ] |
+ chè(to save) |
+
+
+ | d |
+ [d] |
+ du(the neck) |
+
+
+ | g |
+ [ɡ] |
+ ga(the earth) |
+
+
+ | gy |
+ [ɡʲ] |
+ gyit(to tie) |
+
+
+ | h |
+ [h] |
+ haw(to preach) |
+
+
+ | j |
+ [d͡ʑ] |
+ jum(salt) |
+
+
+ | k |
+ [k] |
+ ka(to write) |
+
+
+ | ky |
+ [kʲ] |
+ kyem(to put aside) |
+
+
+ | hk |
+ [kʰ] |
+ hka(a river) |
+
+
+ | hky |
+ [kʰʲ] |
+ hkyet(a valley) |
+
+
+ | l |
+ [l] |
+ lam(road) |
+
+
+ | m |
+ [m] |
+ ma(a child) |
+
+
+ | n |
+ [n] |
+ nam(a jungle) |
+
+
+ | ng |
+ [ŋ] |
+ ngai(I) |
+
+
+ | ny |
+ [ɲ] |
+ nyet(to deny) |
+
+
+ | p |
+ [p] |
+ pat(to obstruct) |
+
+
+ | hp |
+ [pʰ] |
+ hpai(to carry) |
+
+
+ | hpy |
+ [pʰʲ] |
+ hpyet(destroyed) |
+
+
+ | r |
+ [ɻ] |
+ ri(ratten) |
+
+
+ | s |
+ [s] |
+ sa(to go) |
+
+
+ | sh |
+ [ʃ] |
+ sha(to eat) |
+
+
+ | t |
+ [t] |
+ tai(to come) |
+
+
+ | ts |
+ [sʰ] |
+ tsi(medicine) |
+
+
+ | ht |
+ [tʰ] |
+ htu(to dig) |
+
+
+ | w |
+ [w] |
+ wa(to return) |
+
+
+ | y |
+ [j] |
+ ya(now) |
+
+
+ | z |
+ [dz] |
+ zup(to join) |
+
+
+ | ' |
+ [ʔ] |
+ hpe' |
+
+
+
+
+The "ö" letter in Kachin language often has merged into "u".
+The "ŭ" letter in Kachin language often has merged into "ă".
+During writing, glottal stop [ʔ] and tones are often not marked.
+In modern days Kachin Language, the differenciation of vowel between letter "e" and letter "è" is minimizing and are often written as same vowel [e̞] combined with different tone in general.
+In Kachin Language, the "ă" vowel usually deserves a low tone in a word or in a sentence.
+
+
+ Tonal diacritics
+
+
+
+ | Tone |
+ Tone mark |
+ Keys added to syllable |
+ Sample input |
+ Sample output
+ |
+ IPA
+ |
+
+
+ | High |
+ ◌́ |
+ 1 |
+ a1nhte9 |
+ ánhtē |
+ ˥/˧˥ |
+
+
+ | Mid |
+ nothing |
+ nothing |
+ ngai |
+ ngai |
+ ˧ |
+
+
+ | Low |
+ ◌̀ |
+ 2 |
+ tsa1wra2' |
+ tsáwrà'
+ |
+ ˧˩ |
+
+
+ | Falling |
+ ◌̂ |
+ 6 |
+ ńtâ |
+ n1ta6 |
+ ˥˩ |
+
+
+
+I applicate ◌̉ to indicate rising tone ˧˥ in some Kachin dialect.
+
+ Non-tonal diacritics
+
+
+
+ | Character |
+ Key pressed |
+ Sample input |
+ Sample output |
+
+
+ | ă |
+ a8/ALT+A |
+ ka8law |
+ kălaw |
+
+
+ | è |
+ e2 |
+ be2be2 |
+ bè bè |
+
+
+ | ē |
+ e9/ALT+E |
+ a1nhte9 |
+ ánhtē |
+
+
+ | ö |
+ o7/ALT+O |
+ mo7ng |
+ möng |
+
+
+ | ø |
+ o9 |
+ |
+ |
+
+
+ | ŭ |
+ u8/ALT+U |
+ gu8wut |
+ gŭwut |
+
+
+
+
+
+ If more than one tone marking key is pressed, the last one will be used. For example, typing a12 will return "à". To write a tone marking key as a normal digital, one has to press it twice: a1 becomes á, while a11 becomes a1.
+
+
+© cathaylab
\ No newline at end of file
diff --git a/keyboard/laz/1.0.7/laz.php b/keyboard/laz/1.0.7/laz.php
new file mode 100644
index 000000000..d9c5b61f8
--- /dev/null
+++ b/keyboard/laz/1.0.7/laz.php
@@ -0,0 +1,24 @@
+
+
+
+ Keyboard for Laz [lzz] language of Turkey.
+
+
+
+Desktop Keyboard layout
+
+The comma key is considered a "deadkey". This means you can type comma plus k (,k) to produce the "k̆". The deadkey works with ç, k, p, t, z, ʒ to produce the base with a breve or sometimes a caron above.
+
+
+
+
+Mobile Keyboard Layout
+Due to the size and number of keys, some characters are hidden in the long press.
+ Press and hold on the key with a little dot on the top right to reveal and use them.
+
+
+
\ No newline at end of file
diff --git a/keyboard/laz/1.0.8/laz.php b/keyboard/laz/1.0.8/laz.php
new file mode 100644
index 000000000..d9c5b61f8
--- /dev/null
+++ b/keyboard/laz/1.0.8/laz.php
@@ -0,0 +1,24 @@
+
+
+
+ Keyboard for Laz [lzz] language of Turkey.
+
+
+
+Desktop Keyboard layout
+
+The comma key is considered a "deadkey". This means you can type comma plus k (,k) to produce the "k̆". The deadkey works with ç, k, p, t, z, ʒ to produce the base with a breve or sometimes a caron above.
+
+
+
+
+Mobile Keyboard Layout
+Due to the size and number of keys, some characters are hidden in the long press.
+ Press and hold on the key with a little dot on the top right to reveal and use them.
+
+
+
\ No newline at end of file
diff --git a/keyboard/ntcham_azerty/0.6.0/mobile_longpress.png b/keyboard/ntcham_azerty/0.6.0/mobile_longpress.png
new file mode 100644
index 000000000..afa3ff9ac
Binary files /dev/null and b/keyboard/ntcham_azerty/0.6.0/mobile_longpress.png differ
diff --git a/keyboard/ntcham_azerty/0.6.0/ntcham_azerty.php b/keyboard/ntcham_azerty/0.6.0/ntcham_azerty.php
new file mode 100644
index 000000000..293412465
--- /dev/null
+++ b/keyboard/ntcham_azerty/0.6.0/ntcham_azerty.php
@@ -0,0 +1,56 @@
+
+
+Ce clavier prend en charge la langue ntcham du Togo sur un clavier AZERTY (français).
+This keyboard supports the Ntcham language of Togo for an AZERTY (French) Keyboard.
+
+
+Disposition du clavier pour ordinateur / Desktop Keyboard layout
+
+Ce clavier utilise des touches mortes (combinaisons de touches) pour produire les caractères accentués et les lettres spécifiques à la langue ntcham. Par exemple :
+
+
+- a^ produit á (également disponible pour les lettres ɑ, b, e, i, ɩ, l, m, n, o, ɔ, r, u et ʋ, ainsi que leurs majuscules).
+- a$ produit ā (également disponible pour les lettres ɑ, b, e, i, ɩ, l, m, n, o, ɔ, r, u et ʋ, ainsi que leurs majuscules).
+- a* produit à (également disponible pour les lettres ɑ, b, e, i, ɩ, l, m, n, o, ɔ, r, u et ʋ, ainsi que leurs majuscules).
+- a² produit ã (également disponible pour les lettres ɑ, e, i, ɩ, o, ɔ, u et ʋ, ainsi que leurs majuscules).
+- ;a produit ɑ et ;A produit Ɑ.
+- ;i produit ɩ et ;I produit Ɩ.
+- ;n produit ŋ et ;N produit Ŋ.
+- ;o produit ɔ et ;O produit Ɔ.
+- ;u produit ʋ et ;U produit Ʋ.
+
+
+This keyboard makes use of multi-key input. For example:
+
+- a^ produces á (also available for the letters ɑ, b, e, i, ɩ, l, m, n, o, ɔ, r, u and ʋ, as well as their capital letters).
+- a$ produces ā (also available for the letters ɑ, b, e, i, ɩ, l, m, n, o, ɔ, r, u and ʋ, as well as their capital letters).
+- a* produces à (also available for the letters ɑ, b, e, i, ɩ, l, m, n, o, ɔ, r, u and ʋ, as well as their capital letters).
+- a² produces ã (also available for the letters ɑ, e, i, ɩ, o, ɔ, u and ʋ, as well as their capital letters).
+- ;a produces ɑ and ;A produces Ɑ.
+- ;i produces ɩ and ;I produces Ɩ.
+- ;n produces ŋ and ;N produces Ŋ.
+- ;o produces ɔ and ;O produces Ɔ.
+- ;u produces ʋ and ;U produces Ʋ.
+
+
+Les différentes dispositions disponibles sont les suivantes :
+
+
+
+
+ Disposition du clavier pour téléphone mobile / Mobile/Phone Keyboard layout
+
+
+
+
+ Appui long (pour accéder aux caractères supplémentaires) / Longpress
+ On mobile phone, keys with a little dot on the top right can be pressed and held for more keys.
+ 
diff --git a/keyboard/pontic_greek/5.1/pontic_greek.php b/keyboard/pontic_greek/5.1/pontic_greek.php
new file mode 100644
index 000000000..468b3d91b
--- /dev/null
+++ b/keyboard/pontic_greek/5.1/pontic_greek.php
@@ -0,0 +1,59 @@
+
+
+Official Pontic Greek (Ποντιακά) keyboard layout with full support for specialized diacritics (caron/hacek ˇ, breve ˘, and diaeresis below ̤). Includes the embedded Pontic Sans font for correct diacritic placement across all devices.
+
+Touch Devices (iOS / Android)
+Long-press (tap and hold) any key to access specialized Pontic letters:
+
+
+
+ | Base Key | Variants | Description |
+
+
+ | σ | σ̌ ς ς̌ | Sigma + caron, final sigma, final sigma + caron |
+ | ζ | ζ̌ | Zeta + caron |
+ | χ | χ̌ | Chi + caron |
+ | κ | κ̌ | Kappa + caron |
+ | ξ | ξ̌ | Xi + caron |
+ | ψ | ψ̌ | Psi + caron |
+ | γ | γ̆ | Gamma + breve |
+ | α | ά α̤ ά̤ | Tonos, diaeresis below, tonos + diaeresis below |
+ | ο | ό ο̤ ό̤ | Tonos, diaeresis below, tonos + diaeresis below |
+
+
+
+Desktop (Windows / macOS / Linux)
+Use / (slash) as the Pontic dead key, followed by the letter:
+
+
+ | Keystroke | Output | Description |
+
+
+ / + ζ | ζ̌ | Zeta with caron |
+ / + σ | σ̌ | Sigma with caron |
+ / + ς (w) | ς̌ | Final sigma with caron |
+ / + χ | χ̌ | Chi with caron |
+ / + κ | κ̌ | Kappa with caron |
+ / + ξ | ξ̌ | Xi with caron |
+ / + ψ | ψ̌ | Psi with caron |
+ / + γ | γ̆ | Gamma with breve |
+ / + α | α̤ | Alpha with diaeresis below |
+ / + ο | ο̤ | Omicron with diaeresis below |
+ / + ; (tonos) + α | ά̤ | Alpha with tonos + diaeresis below |
+ / + ; (tonos) + ο | ό̤ | Omicron with tonos + diaeresis below |
+
+
+
+© Pontic Greek Keyboard Project · Released under the MIT License
diff --git a/knowledge-base/kb0121.md b/knowledge-base/kb0121.md
new file mode 100644
index 000000000..2e5b4eb8d
--- /dev/null
+++ b/knowledge-base/kb0121.md
@@ -0,0 +1,62 @@
+# HOWTO: Download the previous version of a Keyman keyboard
+
+Downloading a previous version of a keyboard is useful when you need to type the familiar keyboard layout. Newer versions often include more characters, improved layouts and key rules, bug fixes, new technology, and other updates that will provide an overall better typing experience.
+
+If there is an issue related to the latest version of the keyboard, remember to write it up to our [community site](https://community.software.sil.org/c/keyman/19).
+
+## Challenge
+
+The challenge with using an older version of the keyboard is that Keyman will be prompted to update to the new version every now and then. Keyman for Android and iOS will automatically check and provide updates for any installed keyboards; Keyman for macOS and Linux currently updates keyboards automatically. Keyman for Windows allows disabling automatic updates, please refer to:
+* [Keyman for Windows](../products/windows/current-version/basic/update)
+
+## Method 1
+
+**Every version of the published Keyman keyboards are available in downloads.keyman.com.**
+
+1) Go to [downloads.keyman.com/keyboards/](https://downloads.keyman.com/keyboards/)
+
+2) Locate the keyboard folder, e.g. khmer_angkor -> version number
+
+3) There should be a KMP file in every version folder of the keyboard
+
+4) Download the KMP file
+
+5) Check [see-also](#toc-see-also) section to install the KMP file onto the device.
+
+## Method 2
+
+**Replace the version number in the URL with the version you want to download the corresponding KMP file.**
+
+1) Navigate to the [keyboard search](https://keyman.com/en/keyboards/)
+
+2) Search for the keyboard
+
+3) Click on the keyboard to go the the details page
+
+4) On the details page, scroll down to the "Keyboard Details" section
+
+5) Under the "Keyboard Details", at Package Download, copy the KMP link
+
+> [!NOTE]
+> The URL should be something like `https://keyman.com/go/package/download/basic_kbdus?version=1.2&tier=stable`
+
+6) Change the `version=1.2` to the desired version
+
+7) Paste the newly updated link in the URL input of a browser.
+
+> [!TIP]
+> Use [Keyman keyboards' repository](https://github.com/keymanapp/keyboards/blob/master/release/k/khmer_angkor/HISTORY.md) to find the version for that specific feature.
+
+8) Check [see-also](#toc-see-also) section to install the KMP file onto the device.
+
+## See also
+
+* [Installing Custom Keyboards/Dictionaries - Keyman for Android Help](../products/android/current-version/basic/installing-custom-packages)
+
+* [Installing Custom Keyboards/Dictionaries - Keyman for iPhone and iPad Help](../products/iphone-and-ipad/current-version/basic/installing-custom-keyboards-dictionaries)
+
+* [How To - Download and Install a Keyman Keyboard on Windows](../products/windows/current-version/start/download-and-install-keyboard)
+
+* [Installing Keyboards with Keyman for Linux](../products/linux/current-version/start/installing-keyboard)
+
+* [Install a Keyman Keyboard on macOS](../products/mac/current-version/start/install-keyboard)
diff --git a/products/android/19.0/android_images/disable-suggestions.png b/products/android/19.0/android_images/disable-suggestions.png
index a4a21b98c..7a039b4c9 100644
Binary files a/products/android/19.0/android_images/disable-suggestions.png and b/products/android/19.0/android_images/disable-suggestions.png differ
diff --git a/products/android/19.0/basic/index.md b/products/android/19.0/basic/index.md
index 4a0d7aafe..25cde8930 100644
--- a/products/android/19.0/basic/index.md
+++ b/products/android/19.0/basic/index.md
@@ -2,7 +2,7 @@
title: Basic Help - Keyman for Android
---
-* [Using the Banner on the Keyboard](using-the-banner)
+* [Predictive-Text Settings and the Banner](using-the-banner)
* [Switching Between Keyboards](switching-between-keyboards)
diff --git a/products/android/19.0/basic/using-the-banner.md b/products/android/19.0/basic/using-the-banner.md
index ff637645c..eb350773c 100644
--- a/products/android/19.0/basic/using-the-banner.md
+++ b/products/android/19.0/basic/using-the-banner.md
@@ -1,5 +1,5 @@
---
-title: Using the Banner on the Keyboard - Keyman for Android Help
+title: Predictive-Text Settings and the Banner - Keyman for Android Help
---
## About the Keyboard Banner
@@ -10,17 +10,18 @@ Keyman keyboards now always display a banner above the keyboard for one of the f
* Display a Keyman-themed banner so popups and gestures for the top row of keys are visible
* Reserved for future functionality
-## Controlling the Keyboard Banner Mode
+## Adjusting Text Suggestion Settings
The banner mode can be controlled by going to Keyman Settings --> (select an installed language)
-At the bottom of the language settings menu are three controls for the banner:
+At the bottom of the language settings menu are four controls for the banner:

* Disable suggestions (Display image banner instead)
* Predictions only (Suggestion banner displays predictions)
* Predictions with corrections (Suggestion banner displays predictions and corrections)
+* Predictions with auto-corrections (Tapping the space bar may automatically apply the best suggestion)
## Using the Suggestion Banner
@@ -34,6 +35,6 @@ If a [dictionary is installed](installing-dictionaries) and enabled for the acti
## The Keyman Themed Banner
-When suggestions are disabled or unavailable, the Keyman-themed banner will display instead. This is displayed so popups and gestures for the top row of keys are visible.
+When suggestions are disabled or unavailable, the Keyman-themed banner will display instead. This is displayed so popups and gestures for the top row of keys are visible.

diff --git a/products/android/19.0/index.md b/products/android/19.0/index.md
index 758e44d66..3c9c9e215 100644
--- a/products/android/19.0/index.md
+++ b/products/android/19.0/index.md
@@ -29,7 +29,7 @@ title: Keyman for Android 19.0 Help
* [How To - Integrating Keyman for Android](troubleshooting/integrating)
### [Using Keyman for Android](basic/)
-* [Using the Banner on the Keyboard](basic/using-the-banner)
+* [Predictive-Text Settings and the Banner](basic/using-the-banner)
* [Switching Between Keyboards](basic/switching-between-keyboards)
* [Installing Custom Keyboards/Dictionaries](basic/installing-custom-packages)
* [Adding Dictionaries](basic/installing-dictionaries)
diff --git a/products/iphone-and-ipad/19.0/basic/index.md b/products/iphone-and-ipad/19.0/basic/index.md
index b67688e03..9c40fd0f0 100644
--- a/products/iphone-and-ipad/19.0/basic/index.md
+++ b/products/iphone-and-ipad/19.0/basic/index.md
@@ -1,7 +1,7 @@
---
title: Basic Help
---
-* [Using the Banner on the Keyboard](using-the-banner)
+* [Predictive-Text Settings and the Banner](using-the-banner)
* [Switching Between Keyboards](switching-between-keyboards)
diff --git a/products/iphone-and-ipad/19.0/basic/using-the-banner.md b/products/iphone-and-ipad/19.0/basic/using-the-banner.md
index dc1edf247..59a00974a 100644
--- a/products/iphone-and-ipad/19.0/basic/using-the-banner.md
+++ b/products/iphone-and-ipad/19.0/basic/using-the-banner.md
@@ -1,5 +1,5 @@
---
-title: Using the Banner on the Keyboard - Keyman for iPhone and iPad Help
+title: Predictive-Text Settings and the Banner - Keyman for iPhone and iPad Help
---
## About the Keyboard Banner
@@ -10,6 +10,18 @@ Keyman keyboards now always display a banner above the keyboard for one of the f
* Display a Keyman-themed banner so popups and gestures for the top row of keys are visible
* Reserved for future functionality
+## Adjusting Text Suggestion Settings
+
+The banner mode can be controlled by going to Keyman Settings --> (select an installed language)
+
+At the bottom of the language settings menu are three controls for the banner:
+
+
+
+* Offer word completions (Suggestion banner displays predictions; shows a flat image-banner if disabled)
+* Offer corrections (Suggestion banner displays predictions and corrections)
+* Apply corrections automatically (Tapping the space bar may automatically apply the best suggestion)
+
## Using the Suggestion Banner
If a [dictionary is installed](installing-custom-keyboards-dictionaries) and enabled for the active Keyman
diff --git a/products/iphone-and-ipad/19.0/index.md b/products/iphone-and-ipad/19.0/index.md
index cd0f81300..d282abc1e 100644
--- a/products/iphone-and-ipad/19.0/index.md
+++ b/products/iphone-and-ipad/19.0/index.md
@@ -15,7 +15,7 @@ title: Keyman for iPhone and iPad 19.0 Help
## [Using Keyman for iPhone and iPad](basic/)
-* [Using the Banner on the Keyboard](basic/using-the-banner)
+* [Predictive-Text Settings and the Banner](basic/using-the-banner)
* [Switching Between Keyboards](basic/switching-between-keyboards)
* [Using a Keyboard](basic/keyboard-usage)
* [Keyboard Gestures](context/gestures)
diff --git a/products/iphone-and-ipad/19.0/ios_images/prediction-options.png b/products/iphone-and-ipad/19.0/ios_images/prediction-options.png
new file mode 100644
index 000000000..bc8d7fa0a
Binary files /dev/null and b/products/iphone-and-ipad/19.0/ios_images/prediction-options.png differ
|