Beginners' questions: on-screen-keyboard

I’m new to the Keyman project, and I’m looking to Keyman for a good on-screen keyboard (Windows). I know that Keyman is focused towards supporting many languages (and that’s something I need), but how flexible is it when it comes to being a good on-screen-keyboard? I have some beginners questions. Please, direct me elsewhere if this is the wrong forum.

  • Can I use Keyman Developer to create an onscreen-keyboard that appears and disappears automatically when I select an input field? I have not seen this feature mentioned anywhere, so I guess it requires source code changes(?) Is this feature easier to reach when building a Web keyboard?

Can I delete certain keys from the on-screen keyboard layout? I briefly tried to import a layout from windows and deleted the code lines belonging to ‘f’ in the Layout tab. Then in the On-Screen tab I filled from layout. This only made the f-key blank, but how do I delete it?

Can I change the appearance of the on-screen keyboard, such as hide the top bar or change colours? As I understand some of these things are planned for v19, but can I somehow do this already now by modifying files directly? Again, is it at least possible when building for Web?

I appreciate the help in understanding what Keyman is and what it isn’t.

Welcome to our community, @laban.

The features you mentioned is not in the current version of Keyman, but you are allowed to create a feature request about it here. This way you help us prioritize the feature(s) users need most.

As for the delete certain keys and change the appearance, it is possible to do them in the Touch Layout in Keyman Developer.

Since the on-screen keyboard is using all the keys to display, deleting certain keys and hiding the top bar is not possible at this point. You are very welcome to open a feature request for all of this, and it will also be useful to let us know your experience of a good OSK as well.

If you visit KeymanWeb you can see the keyboards are not using any style that you would see in a customizable touch layout. Evidently, the touch layout for the Amharic keyboard.


Our developers are planning to streamline to one keyboard across all platforms, so allow us some time to get this going.

For all resources related to Keyman Developer:

Should there be further questions, please let us know. Thank you!

Thanks for the explanation. If I want to use a certain keyboard on my own website, naturally I will build the keyboard with web selected as my target. It then produce a .js file. What else do I need for people to use my keyboard as an on-screen keyboard on my web page? Do they need Keyman Desktop installed, or is this web target a completely separate thing, and all that is needed is the .js file?

For a web keyboard, you don’t need Keyman Desktop (now known as Keyman for Windows). However, you will need KeymanWeb itself. You can learn more about integrating KeymanWeb at the KeymanWeb Developer Home

To amplify on what Marc said about deleting keys from an on-screen keyboard:
It is not possible to delete a key from a desktop keyboard layout, because a physical keyboard will have whatever keys it has. You can delete the code for a key, so if the user presses it, nothing happens, but you cannot remove the key from the physical keyboard.

Similarly, if an on-screen keyboard is to represent a physical keyboard, it has to have all the keys that the physical keyboard has. If you define a key as non-responsive, it still has to appear on the on-screen layout.

Touch screen keyboards do not represent a physical keyboard, so there you are free to add new virtual keys, or remove keys that your template uses. That is why you can delete a key on a touch screen layout but not on a physical keyboard layout.

I guess my dilemma is that I’m right in between Keyman’s on-screen keyboard and touch-screen keyboard. I’m in a Windows desktop environment, but I have no physical keyboard, so the mapping to a physical keyboard does not matter in my case. The touch keyboard is supported in iOS and Android, but not Windows.

Still I’m thinking that I may be able to work around the limitations and hide certain buttons in the web environment, using css.

We do have a way of using the touch keyboard in a web browser in a desktop environment. For a working example, see the Keyman Developer Server keyboard testing interface, source at keyman/developer/src/server/src/site/index.html at 4ce16a08fc8d3b6ae765eddcdc4d20e503c9b3a4 · keymanapp/keyman · GitHub and some of the relevant code at keyman/developer/src/server/src/site/test.js at f870e912f3bf0b36186a81e9bff912c0d02c8f74 · keymanapp/keyman · GitHub

Note that this is currently an undocumented API, so stability is not guaranteed across different versions of KeymanWeb.

Sorry I missed this earlier; it is possible to do this with the Keyman API on Windows: IKeymanControl::StartVisualKeyboard() Method

But if you are doing a web-based interface, KeymanWeb is probably a better fit because it will work cross-platform and deploys smoothly.