ScreenKeyboard.Core
1.0.0
dotnet add package ScreenKeyboard.Core --version 1.0.0
NuGet\Install-Package ScreenKeyboard.Core -Version 1.0.0
<PackageReference Include="ScreenKeyboard.Core" Version="1.0.0" />
<PackageVersion Include="ScreenKeyboard.Core" Version="1.0.0" />
<PackageReference Include="ScreenKeyboard.Core" />
paket add ScreenKeyboard.Core --version 1.0.0
#r "nuget: ScreenKeyboard.Core, 1.0.0"
#:package ScreenKeyboard.Core@1.0.0
#addin nuget:?package=ScreenKeyboard.Core&version=1.0.0
#tool nuget:?package=ScreenKeyboard.Core&version=1.0.0
<div align="center">
ScreenKeyboard
A professional, open-source on-screen keyboard for Uno Platform — inspired by and built on FlorisBoard.
Glide (swipe) typing · gestures · emoji · clipboard history · smart suggestions · 90+ layouts · 70+ languages · fully themable
</div>
ScreenKeyboard brings a mobile-grade keyboard to every Uno Platform target — WebAssembly, Windows, macOS, Linux (X11 and framebuffer), Android and iOS. It is ideal for kiosks, point-of-sale terminals, industrial panels, touch-screen desktops, in-car and TV apps, and any application that needs full control over text input.
The typing engine is platform independent (ScreenKeyboard.Core, pure .NET, fully unit tested), and the UI
(ScreenKeyboard.Uno) is a lightweight, code-built WinUI control that never steals focus from your text fields.
Highlights
| Layouts | All FlorisBoard layouts (QWERTY, QWERTZ, AZERTY, Dvorak, Colemak, Workman, BÉPO, Neo2, JCUKEN, Greek, Hebrew, Arabic, Persian, Hindi, Bengali, Tamil, Thai, Korean, Japanese JIS, Armenian, Georgian and many more), symbols pages, numeric, phone and advanced numeric pads. Add your own in JSON. |
| 70+ languages | FlorisBoard subtype presets with per-language popups (accents), currency symbols, punctuation rules and composers (Hangul syllables, Japanese kana, Vietnamese Telex). |
| Glide typing | C# port of FlorisBoard's statistical glide classifier with live preview and a fading trail. |
| Gestures | Configurable swipe up/down/left/right, space bar cursor control, swipe-to-delete words precisely, long-press actions, multi-touch rollover, shift chording, key repeat. |
| Smart typing | Word completion, keyboard-aware autocorrect (with undo on backspace), next-word prediction, learning user dictionary, auto-capitalization, double-space period, smart punctuation spacing. |
| Emoji | Complete CLDR emoji set with categories, skin tones, recents & pinning, keyword search in 6 languages, :shortcode suggestions and classic emoticons. |
| Clipboard | Clipboard history with pinning, expiry and one-tap paste; recently copied text suggested in the smartbar. |
| Editing panel | Cursor pad, selection mode, select all, copy/cut/paste, undo/redo, line and document navigation. |
| Theming | 12 built-in themes (Floris Day/Night/borderless/AMOLED, Material, Nord, Ocean, Rosé, High Contrast, Terminal), light/dark following the system, JSON themes and per-key style rules. |
| Configurable | 60+ observable settings: key height (plus interactive resize mode), spacing, font scale, one-handed mode, split keyboard, floating keyboard, number row, hint priority, utility key, smartbar layout, haptics, incognito… |
| Accessible | Automation names on keys, high-contrast theme, adjustable sizes and delays. |
| Glide typing with live predictions | Long-press popups with accents and symbols |
| Emoji panel with categories and skin tones | Floris Night theme with number row |
| Split keyboard for tablets | One-handed mode (Material Dark) |
| Phone pad and quick actions | Custom theme defined in XAML |
<p align="center"><img src="docs/images/floating.png" width="70%" alt="Floating keyboard" /><br/><em>Floating, draggable keyboard</em></p>
Packages
| Package | Description |
|---|---|
ScreenKeyboard.Uno |
The Uno Platform controls (OnScreenKeyboard, ScreenKeyboardHost), themes and input adapters. |
ScreenKeyboard.Core |
UI-independent engine: layouts, key computation, gestures, glide typing, NLP, emoji, clipboard, settings. Usable from any .NET UI framework. |
Targets: net10.0 (Skia desktop & reference), net10.0-desktop, net10.0-browserwasm, net10.0-android,
net10.0-ios and net10.0-windows10.0.26100 (WinAppSDK). Built with Uno.Sdk 6.7.
Quick start
dotnet add package ScreenKeyboard.Uno
Wrap your page content in a ScreenKeyboardHost. The keyboard slides in whenever a TextBox or PasswordBox
gets focus and keeps the focused field visible:
<Page xmlns:sk="using:ScreenKeyboard.Controls">
<sk:ScreenKeyboardHost>
<StackPanel Spacing="12" Padding="24">
<TextBox Header="Name" InputScope="PersonalFullName" />
<TextBox Header="Email" InputScope="EmailSmtpAddress" sk:ScreenKeyboardInput.EnterAction="Next" />
<TextBox Header="Amount" InputScope="Number" />
<PasswordBox Header="PIN" />
</StackPanel>
</sk:ScreenKeyboardHost>
</Page>
Or place the keyboard yourself — it attaches to the focused input of its window automatically:
<Grid RowDefinitions="*,Auto">
<TextBox AcceptsReturn="True" />
<sk:OnScreenKeyboard Grid.Row="1" />
</Grid>
Configure everything in code:
var keyboard = host.Keyboard;
keyboard.Settings.Subtypes = ["en-US/qwerty", "de-DE/qwertz", "fr-FR/azerty"];
keyboard.Settings.ThemeMode = ThemeMode.Dark;
keyboard.Settings.DarkTheme = "floris_pure_night";
keyboard.Settings.NumberRow = true;
keyboard.Settings.OneHandedMode = OneHandedMode.Right;
keyboard.EnterActionRequested += (s, e) => { if (e.Action == EnterAction.Search) { Search(); e.Handled = true; } };
On WebAssembly (and other Skia targets without a color emoji font) enable emoji rendering once at startup:
if (OperatingSystem.IsBrowser())
EmojiFontFallback.UseNotoColorEmoji();
Documentation
| Topic | |
|---|---|
| Getting started | Installation, host vs. standalone keyboard, first steps |
| Input integration | TextBox/PasswordBox, InputScope mapping, attached properties, enter actions, custom targets |
| Layouts & languages | FlorisBoard JSON format, custom layouts, subtypes, popups, composers, currency sets |
| Theming | Built-in themes, custom themes in C#, XAML and JSON, key style rules |
| Configuration | Every KeyboardSettings option, persistence |
| Gestures & glide typing | Swipe actions, space bar and delete gestures, glide typing |
| Suggestions & dictionaries | Autocorrect, predictions, user dictionary, custom dictionaries and providers |
| Emoji & clipboard | Emoji catalog, skin tones, search, fonts; clipboard history |
| Architecture | Engine, touch processor, rendering, extending the keyboard |
| Building & releasing | Repository layout, tests, samples, CI, NuGet packaging |
Sample app
Try it online: https://wieslawsoltes.github.io/ScreenKeyboardControl/
samples/ScreenKeyboard.Sample demonstrates every feature with a live settings
pane (themes, languages, gestures, typing options) and persistence of settings, learned words and emoji history.
dotnet run --project samples/ScreenKeyboard.Sample -f net10.0-desktop
dotnet run --project samples/ScreenKeyboard.Sample -f net10.0-browserwasm
Start-up options such as ?theme=dark&onehanded=right&langs=en-US/qwerty,de-DE/qwertz (WebAssembly) or
--theme=dark (desktop) make it easy to try configurations.
Using the engine without Uno
ScreenKeyboard.Core has no UI dependencies. Drive it from tests, another UI framework or a server:
var engine = new KeyboardEngine();
var field = new TextBufferTarget();
engine.Attach(field);
engine.TypeText("i like teh ");
Console.WriteLine(field.Text); // "I like the "
Credits
ScreenKeyboard would not exist without FlorisBoard by Patrick Goldinger and contributors: its layouts, localization data, emoji data, dictionary and several algorithms (glide typing, layout merging and key sizing, composers) are used or ported under the Apache License 2.0. Icons are Material Symbols. See NOTICE and THIRD-PARTY-NOTICES.
Contributing
Contributions are welcome — see CONTRIBUTING.md. Please report security issues as described in SECURITY.md.
License
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- No dependencies.
-
net8.0
- No dependencies.
NuGet packages (1)
Showing the top 1 NuGet packages that depend on ScreenKeyboard.Core:
| Package | Downloads |
|---|---|
|
ScreenKeyboard.Uno
A professional, themable on-screen keyboard control for Uno Platform (WinUI): FlorisBoard-compatible layouts for 70+ languages, glide (swipe) typing, swipe gestures, key popups, emoji panel with search and skin tones, clipboard history, text editing panel, smart suggestions and autocorrect, one-handed and split modes. |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 1.0.0 | 40 | 9/30/2026 |