Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
39 commits
Select commit Hold shift + click to select a range
e7fa7a6
auto: Keyman for developer help deployment
keyman-server Oct 9, 2026
8d3ad39
Merge pull request #2713 from keymanapp/auto/developer-help-19.0.305-…
keyman-status Oct 9, 2026
93f3043
auto: Keyboard help deployment
keyman-server Oct 11, 2026
7c98367
Merge pull request #2714 from keymanapp/auto/keyboards/upload/TC-2642
keyman-status Oct 12, 2026
dfb4117
auto: Keyboard help deployment
keyman-server Oct 12, 2026
91fcb6f
Merge pull request #2715 from keymanapp/auto/keyboards/upload/TC-2643
keyman-status Oct 12, 2026
68c1fef
auto: Keyman for web help deployment
keyman-server Oct 15, 2026
1ed4df9
auto: Keyboard help deployment
keyman-server Oct 15, 2026
629cc2a
Merge pull request #2716 from keymanapp/auto/web-help-19.0.307-beta/T…
keyman-status Oct 15, 2026
2665495
Merge pull request #2717 from keymanapp/auto/keyboards/upload/TC-2647
keyman-status Oct 15, 2026
c24c1d7
auto: Keyboard help deployment
keyman-server Oct 16, 2026
fd89749
auto: Keyboard help deployment
keyman-server Oct 16, 2026
baee879
Merge pull request #2718 from keymanapp/auto/keyboards/upload/TC-2648
keyman-status Oct 16, 2026
0046e72
Merge pull request #2719 from keymanapp/auto/keyboards/upload/TC-2649
keyman-status Oct 16, 2026
ca73595
auto: Keyman for android help deployment
keyman-server Oct 17, 2026
7f490fd
auto: Keyman for web help deployment
keyman-server Oct 17, 2026
44b27b7
auto: Keyman for windows help deployment
keyman-server Oct 17, 2026
c362436
Merge pull request #2720 from keymanapp/auto/android-help-20.0.5-alph…
keyman-status Oct 17, 2026
818c482
Merge pull request #2721 from keymanapp/auto/web-help-20.0.5-alpha/TC…
keyman-status Oct 17, 2026
cea6e23
Merge pull request #2722 from keymanapp/auto/windows-help-20.0.5-alph…
keyman-status Oct 17, 2026
a896dff
auto: Keyboard help deployment
keyman-server Oct 19, 2026
803f2b2
auto: Keyboard help deployment
keyman-server Oct 19, 2026
639bb99
Merge pull request #2723 from keymanapp/auto/keyboards/upload/TC-2650
keyman-status Oct 19, 2026
e6058a5
Merge pull request #2724 from keymanapp/auto/keyboards/upload/TC-2651
keyman-status Oct 19, 2026
9991d8b
auto: Keyman for android help deployment
keyman-server Oct 19, 2026
8649b9f
auto: Keyman for developer help deployment
keyman-server Oct 19, 2026
f21ec89
Merge pull request #2725 from keymanapp/auto/android-help-19.0.310-be…
keyman-status Oct 19, 2026
881a463
Merge pull request #2726 from keymanapp/auto/developer-help-19.0.310-…
keyman-status Oct 19, 2026
ecff725
auto: Keyboard help deployment
keyman-server Oct 20, 2026
5a51b50
Merge pull request #2727 from keymanapp/auto/keyboards/upload/TC-2652
keyman-status Oct 20, 2026
09bfc37
fix: update base php8.4-apache images to the 8.4.27 versions
mcdurdin Oct 22, 2026
0049c23
Merge pull request #2728 from keymanapp/fix/php-cve-2026-10961x
mcdurdin Oct 22, 2026
5c5bb24
auto: Keyboard help deployment
keyman-server Oct 22, 2026
19a0a66
Merge pull request #2729 from keymanapp/auto/keyboards/upload/TC-2654
keyman-status Oct 22, 2026
b734a0e
docs: Add link to previous keyboard submissions
mcdurdin Oct 23, 2026
6fdfc22
Merge pull request #2730 from keymanapp/docs/examples-keyboard-prs
mcdurdin Oct 23, 2026
c20611f
auto: Keyman for developer help deployment
keyman-server Oct 23, 2026
6b239c3
Merge pull request #2731 from keymanapp/auto/developer-help-19.0.314-…
keyman-status Oct 23, 2026
5de1ef0
Merge branch 'staging' into auto/B19S4-merge-master-into-staging
keyman-server Oct 24, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
# Please keep the content of this file in sync with Podmanfile.

ARG BUILDER_CONFIGURATION="release"
FROM php:8.4-apache@sha256:51da594c844a97f31b1cd6b1ac6660982f40788f4fe13e75f7fd39e2f9b58651 AS composer-builder
FROM php:8.4-apache@sha256:56e7dab56ae21ec10aae951f93cbe7069c1ca68a714dd22ca78724268c78f5de AS composer-builder
ENV BUILDER_PLATFORM=docker-composer

# Install Zip to use composer
Expand All @@ -29,7 +29,7 @@ RUN if [ "$BUILDER_CONFIGURATION" = "debug" ]; then \
fi

# Site
FROM php:8.4-apache@sha256:51da594c844a97f31b1cd6b1ac6660982f40788f4fe13e75f7fd39e2f9b58651
FROM php:8.4-apache@sha256:56e7dab56ae21ec10aae951f93cbe7069c1ca68a714dd22ca78724268c78f5de
ENV BUILDER_PLATFORM=docker

COPY resources/keyman-site.conf /etc/apache2/conf-available/
Expand Down
34 changes: 25 additions & 9 deletions developer/19.0/context/keyboard-editor.md
Original file line number Diff line number Diff line change
Expand Up @@ -99,23 +99,25 @@ Features

## Layout tab

### Design view

> Path: KMN → Layout tab → Design view (default)

<img src="../images/ui/frmKeymanWizard_Layout_Design.png" style="width:100%" alt="Keyboard Editor - Layout tab, Design view"/>

The Layout tab gives you a simple interface to quickly create a keyboard
using a visual representation of a desktop/laptop computer keyboard. You
using a visual representation of a **desktop/laptop keyboard**. You
can drag and drop characters from the character map to create keyboard
layouts. You cannot access most of Keyman's more powerful features from
the Layout Design view, but it will be useful to get you started on your
design.
layouts.

Each key can have zero or more characters assigned to it. Each key can
be assigned a different set of characters for each shift state. You can
change the shift state by clicking on the Shift, Ctrl, and Alt keys.
change the shift state by clicking on the <kbd>Shift</kbd>, <kbd>Ctrl</kbd>, and <kbd>Alt</kbd> keys.

There are two ways to assign characters to the keys:

- Click on a key, and then type the character's code into the Unicode
Character Value(s) field, or the type/paste the character itself
Character Value(s) field, or type/paste the character itself
into the Output character(s) field.
- Select the character from the Character Map and drag and drop it
onto the appropriate key. This will set the key to output that
Expand All @@ -130,7 +132,7 @@ There are two ways to assign characters to the keys:
Distinguish between left and right Ctrl/Alt
: A Keyman keyboard can treat left and right Ctrl and Alt identically,
or it can distinguish between them. The Design view allows one or
the other mode (in Code view, you can use both interchangeably).
the other mode (in [Code view](#toc-code-view), you can use both interchangeably).

Display 102nd Key (as on European keyboards)
: European keyboards have one extra key that is not on US keyboards.
Expand All @@ -143,8 +145,16 @@ Display 102nd Key (as on European keyboards)
the backslash key will move down one row, but not otherwise change
in behaviour.

You can press and release <kbd>Ctrl</kbd> to select
another key on the keyboard using your keyboard.
> [!TIP]
> You can press and release <kbd>Ctrl</kbd> to select another key on the keyboard using your keyboard.

You cannot access most of Keyman's more powerful features from
the Layout Design view, but it will be useful to get you started on your
design.

### Code view

> Path: KMN → Layout tab → Code view

<img src="../images/ui/frmKeymanWizard_Layout_Code.png" style="width:100%" alt="Keyboard Editor - Layout tab, Code view"/>

Expand All @@ -156,6 +166,9 @@ the Code view.
See the [Editor topic](editor) for more information on how to use the
editor shown within this view.

> [!NOTE]
> Remember that any newly assigned keys from the layout tab won't be automatically added to the On-Screen keyboard except when you press the 'Fill from layout' button (See [On-screen](#toc-on-screen-tab) below).

## On-Screen tab

<img src="../images/ui/OnScreenKeyboard.png" style="width:100%" alt="Keyboard Editor - On-Screen tab"/>
Expand Down Expand Up @@ -183,6 +196,9 @@ Fill from layout
pre-populate the On-Screen Keyboard and reduces the complexity of
designing it from scratch.

> [!CAUTION]
> The changes from the [Layout tab](#toc-layout-tab) will only apply to the On-Screen Keyboard once you use the 'Fill from layout'.

Import
: Imports an On-Screen Keyboard from an XML file.

Expand Down
Binary file modified developer/19.0/images/ui/frmKeymanWizard_Layout_Code.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified developer/19.0/images/ui/frmKeymanWizard_Layout_Design.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
19 changes: 19 additions & 0 deletions developer/19.0/reference/messages/km020bf.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
---
title: KM020BF: WARN_CallUsedOnUnsupportedPlatform
---

| | |
|------------|---------- |
| Message | The \`call\(\)\` statement is not supported on macOS or Linux platforms\. |
| Module | [kmc-kmn.KmnCompilerMessages](kmc-kmn.kmncompilermessages) |
| Identifier | `WARN_CallUsedOnUnsupportedPlatform` |


The `call()` statement is supported on Windows and web-based platforms,
including mobile and tablet. The target platforms can be specified in
the `&targets` system store; avoid the use of generic platforms such as
`'any'` or `'desktop'`. Note that the implementation of your call
target will differ across platforms; see
[`call()` statement](https://help.keyman.com/developer/language/reference/call)
in the documentation for more details.

4 changes: 2 additions & 2 deletions developer/19.0/reference/messages/km05009.md
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
---
title: KM05009: HINT_FilenameHasDifferingCase
title: KM05009: WARN_FilenameHasDifferingCase
---

| | |
|------------|---------- |
| Message | File on disk '&lt;param&gt;' does not match case of '&lt;param&gt;' in source file; this is an error on platforms with case\-sensitive filesystems\. |
| Module | [kmc.InfrastructureMessages](kmc.infrastructuremessages) |
| Identifier | `HINT_FilenameHasDifferingCase` |
| Identifier | `WARN_FilenameHasDifferingCase` |


Original file line number Diff line number Diff line change
Expand Up @@ -166,6 +166,7 @@ title: Compiler Messages Reference for @keymanapp/kmc-kmn
[KM020BC](km020bc) | `WARN_DeprecatedValueFormat` | The decimal \(d\#\#\#\), octal \(\#\#\#\), and hexadecimal \(x\#\#\#\) value formats were deprecated in Keyman 19 and are scheduled to be removed in Keyman 20\.
[KM020BD](km020bd) | `WARN_DeprecatedCompileTarget` | Compile target '&lt;param&gt;' was deprecated in Keyman 19 and will cause the line to always be ignored by kmc in Keyman 20\.
[KM020BE](km020be) | `ERROR_StoreContainsUnsupportedStatement` | A store can contain only characters, deadkeys, virtual keys, and 'outs\(\)' statements\.
[KM020BF](km020bf) | `WARN_CallUsedOnUnsupportedPlatform` | The \`call\(\)\` statement is not supported on macOS or Linux platforms\.
[KM020C0](km020c0) | `FATAL_BufferOverflow` | The compiler memory buffer overflowed
[KM02900](km02900) | `FATAL_UnexpectedException` | This is an internal error; the message will vary
[KM02901](km02901) | `FATAL_MissingWasmModule` | This is an internal error; the message will vary
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ title: Compiler Messages Reference for @keymanapp/kmc
[KM05005](km05005) | `ERROR_OutFileNotValidForProjects` | \-\-out\-file should not be specified for project builds
[KM05006](km05006) | `INFO_FileBuiltSuccessfully` | &lt;param&gt; built successfully\.
[KM05007](km05007) | `INFO_FileNotBuiltSuccessfully` | &lt;param&gt; failed to build\.
[KM05009](km05009) | `HINT_FilenameHasDifferingCase` | File on disk '&lt;param&gt;' does not match case of '&lt;param&gt;' in source file; this is an error on platforms with case\-sensitive filesystems\.
[KM05009](km05009) | `WARN_FilenameHasDifferingCase` | File on disk '&lt;param&gt;' does not match case of '&lt;param&gt;' in source file; this is an error on platforms with case\-sensitive filesystems\.
[KM0500A](km0500a) | `ERROR_UnknownFileFormat` | Unknown file format &lt;param&gt;; only Markdown \(\.md\), JSON \(\.json\), and Text \(\.txt\) are supported\.
[KM0500B](km0500b) | `INFO_ProjectBuiltSuccessfully` | Project &lt;param&gt; built successfully\.
[KM0500C](km0500c) | `INFO_ProjectNotBuiltSuccessfully` | Project &lt;param&gt; failed to build\.
Expand Down
2 changes: 1 addition & 1 deletion developer/19.0/whatsnew.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ Keyman Developer 19 has the following significant changes:

- Updated to Unicode 17.0 (#14728)
- Updated langtags.json, ISO639-3, language-subtag-registry (#16371)
- Validate a keyboard or lexical model project frmo within Keyman Developer (#16076)
- Validate a keyboard or lexical model project from within Keyman Developer (#16076)
- Support for line numbers in LDML keyboard compiler messages (#13375)
- Convert from .keylayout (macOS keyboards, Ukelele) into .kmn (#12191)
- Compiler improvements - prevent illegal constructs (#16723, #16726, #36710, #16717)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
---
title: KMManager.getPredictionsSuspended()
title: KMManager.getPredictionsSuspended() (Deprecated)
---

## Summary
The **getPredictionsSuspended()** method returns a flag that determines whether predictions are temporarily disabled because the currently selected text field is a hidden password text field or a numeric text field.

Expand All @@ -24,6 +23,7 @@ Use this method to check if predictions are temporarily disabled because of the

## History
Added syntax in Keyman Engine for Android 18.0.
Deprecated syntax in Keyman Engine for Android 19.0 in favor of [`setInputType`](setInputType), as it better maintains predictive-text state.

## See also
* [setPredictionsSuspended](setPredictionsSuspended)
11 changes: 7 additions & 4 deletions developer/engine/android/19.0/KMManager/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -161,8 +161,8 @@ The KMManager is the core class which provides most of the methods and constants
[`getOrientation()`](getOrientation)
: returns the device's current orientation (Portrait vs Landscape)

[`getPredictionsSuspended()`](getPredictionsSuspended)
: returns whether predictions are temporarily disabled because the currently selected text field is a hidden password text field or a numeric text field.
~~`getPredictionsSuspended()`~~ `(Deprecated)`
: returns whether predictions are temporarily disabled because the currently selected text field is a hidden password text field or a numeric text field.

[`getSpacebarText()`](getSpacebarText)
: returns the current text display pattern for the spacebar
Expand Down Expand Up @@ -254,6 +254,9 @@ The KMManager is the core class which provides most of the methods and constants
[`setHTMLBanner()`](setHTMLBanner)
: sets the contents of an HTML banner for Keyman Engine to display when suggestions aren't available

[`setInputType()`](setInputType)
: informs the engine about what type of input text is expected, allowing it to configure predictive-text accordingly

[`setKeyboard()`](setKeyboard)
: sets the keyboard to be used

Expand All @@ -269,8 +272,8 @@ The KMManager is the core class which provides most of the methods and constants
[`setMaySendCrashReport()`](setMaySendCrashReport)
: sets whether Keyman Engine can send crash reports over the network to Sentry

[`setPredictionsSuspended()`](setPredictionsSuspended)
: sets whether predictions are temporarily disabled because the currently selected text field is a hidden password text field or a numeric text field.
~~`setPredictionsSuspended()`~~ `(Deprecated)`
: sets whether predictions are temporarily disabled because the currently selected text field is a hidden password text field or a numeric text field.

[`setShouldAllowSetKeyboard()`](setShouldAllowSetKeyboard)
: sets whether Keyman Engine allows setting a keyboard other than the default keyboard
Expand Down
38 changes: 38 additions & 0 deletions developer/engine/android/19.0/KMManager/setInputType.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
---
title: KMManager.setInputType()
---

## Summary
The **setInputType()** method allows the engine to configure which predictive-text features
will be presented to the user based upon the type of input expected for an input field.

## Syntax
```java
KMManager.setInputType(KeyboardType keyboardType, int inputType)
```

### Parameters

`keyboardType`
: The keyboard type. `KEYBOARD_TYPE_INAPP` or
`KEYBOARD_TYPE_SYSTEM`.

[`inputType`](https://developer.android.com/reference/android/text/InputType)
: An integer defining the basic context type of text being edited.


## Description
Use this method to allow the engine to determine what types of suggestions may be offered to the
user. It will disable predictions for contexts that should not provide them, such as password fields.
It will prevent autocorrect for contexts where text prediction will not likely give a perfect result,
such as email fields.

### Example: Using `setInputType()`
The following script illustrates the use of `setInputType()`:

```java
KMManager.setInputType(textView.getInputType());
```

## History
Added syntax in Keyman Engine for Android 19.0.
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
---
title: KMManager.setPredictionsSuspended()
title: KMManager.setPredictionsSuspended() (Deprecated)
---

## Summary
Expand All @@ -9,7 +9,6 @@ The **setPredictionsSuspended()** method sets a flag to temporarily disable pred
```java
KMManager.setPredictionsSuspended(int inputType, KeyboardType keyboardType)
```

### Parameters

[`inputType`](https://developer.android.com/reference/android/text/InputType)
Expand All @@ -31,6 +30,7 @@ Use this method to temporarily disable predictions because of the currently sele

## History
Added syntax in Keyman Engine for Android 18.0.
Deprecated syntax in Keyman Engine for Android 19.0 in favor of [`setInputType`](setInputType).

## See also
* [getPredictionsSuspended](getPredictionsSuspended)
2 changes: 2 additions & 0 deletions developer/engine/android/19.0/whatsnew.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@
title: What's New in Keyman Engine 19.0 for Android
---

* Added API for selecting and controlling what types of suggestions are offered
for different `Editable` input types (#16644)
* **BREAKING** Apps that use the functionality of Keyman Engine for Android will have to add `androidx.webkit:webkit:1.14.0` as a dependency (#16146)
* **KNOWN ISSUE** `sil_euro_latin` keyboard must be included in an app if `setDefaultKeyboard()` is not called during initialization (#16215)
* Added [Intent `com.tavultesoft.kmapro.keyboard_changed`](KMAPro/) which is broadcast when Keyman system keyboard changes and includes font name (#15193)
Expand Down
7 changes: 6 additions & 1 deletion developer/engine/android/20.0/whatsnew.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,12 @@
title: What's New in Keyman Engine 20.0 for Android
---

* Added API for broadcasting when Keyman system keyboard font changes (#15193)
* **BREAKING** Apps that use the functionality of Keyman Engine for Android will have to add `androidx.webkit:webkit:1.14.0` as a dependency (#16146)
* **KNOWN ISSUE** `sil_euro_latin` keyboard must be included in an app if `setDefaultKeyboard()` is not called during initialization (#16215)
* Added [Intent `com.tavultesoft.kmapro.keyboard_changed`](KMAPro/) which is broadcast when Keyman system keyboard changes and includes font name (#15193)
* Added [`KMManager.getKeyboardHeightMax()`](KMManager/getKeyboardHeightMax) API (#13663)
* Added [`KMManager.getKeyboardHeightMin()`](KMManager/getKeyboardHeightMin) API (#13663)
* Clarified font filename vs facename in various APIs (#16211)

## See Also
* [Keyman Engine for Android Documentation](index)
Loading
Loading