A privacy-conscious keyboard made for your thumbs
Report Bug
·
Request Feature
·
Releases
Thumb-Key is a privacy-conscious smart keyboard, made specifically for your thumbs.
It features a 3x3 grid layout, and uses swipes for the less common letters. Its easy to learn, and designed for fast typing speeds.
Instead of relying on profit-driven, privacy-offending word and sentence prediction for accuracy, as do most popular phone keyboards like Gboard and Swiftkey, Thumb-Key uses large keys with predictable positions, to prevent your eyes from hunting and pecking for letters.
As the key positions get ingrained into your muscle memory, eventually you'll be able to approximate the fast speeds of touch-typing, your eyes never having to leave the text edit area.
This project is a follow-up to the now unmaintained (and closed-source) MessagEase Keyboard, which is its main inspiration.
A to capitalize. (If you changed the layout, the button next to #)
Enabling Slide gestures in keyboard settings will enable the following continuous sliding gestures:
Enabling Spacebar: Allow normal swipes to work with slide gestures, in keyboard settings will enable the following:
Enabling Backspace: Allow normal swipes to work with slide gestures, in keyboard settings will enable the following:
Enabling Ghost keys in keyboard settings will enable swiping hidden symbol keys without switching to the numeric layout.
Modify keys and HideKeyboard action to achieve MessagEase experienceKeyboard keys can be customized using YAML.
ENThumbKey:
main:
key1_0:
center:
text: ñ
This YAML configuration modifies the key in the second row, first column, center letter from 'n' to 'ñ'.
ENThumbKey specifies which keyboard to change. In this case, it's the 'english thumbkey' layout.
main specifies the main keyboard layout. Possible values are:
mainshiftednumericctrledaltedkey1_0 specifies the key to modify. The first number is the row, and the second number is the column. The top row is 0, and the left column is 0.center specifies which slide/touch direction of the key to modify. Possible values depend on the value of swipeType -- for swipeType: EIGHT_WAY, they are:
centerlefttopLefttoptopRightrightbottomRightbottombottomLefttext specifies the text of the keyENThumbKey:
main:
key0_0:
swipeType: EIGHT_WAY
right: { text: ê }
topRight: { text: è }
top: { text: ę }
shifted:
key0_0:
swipeType: EIGHT_WAY
right: { text: Ê }
topRight: { text: È }
top: { text: Ę }
ESCAMessagEase:
main:
key0_0:
bottom: { text: "( ͡° ͜ʖ ͡°)", size: SMALLEST }
key0_1:
# Unicode escape sequence can be optionally used for convenience or readability.
bottomLeft: { text: "\U000121EB", size: SMALL }
# this is equivalent to:
# bottomLeft: {text: "𒇫", size: SMALL}
key2_2:
swipeType: FOUR_WAY_CROSS
center: { text: "𓀒", size: LARGE }
topLeft: { remove: true }
topRight: { remove: true }
bottomRight: { remove: true }
bottomLeft: { remove: true }
![]()
ENThumbKey (english thumbkey) and ESCAMessagEase (español català messagease).main and shifted modes modified.ENThumbKey which don't
have them by default, we must adjust swipeType.size property to specify the display size of the text. Possible values are:
LARGESMALLSMALLESTremove property is used to remove key-sides.swipeType property is used to modify the directionality of a key. Possible values are:
EIGHT_WAYFOUR_WAY_CROSSFOUR_WAY_DIAGONALTWO_WAY_VERTICALTWO_WAY_HORIZONTALENThumbKey:
main:
key0_3:
center:
keyAction: SwitchLanguage
left:
keyAction: ToggleEmojiMode
![]()
This swaps the 'switch language' and 'toggle emoji' actions on the top-right key. Possible values for keyAction are:
ToggleNumericModeToggleABCModeToggleEmojiModeToggleClipboardModeToggleCapsLockToggleShiftModeTrueToggleShiftModeFalseToggleCtrlModeTrueToggleCtrlModeFalseToggleAltModeTrueToggleAltModeFalseLeftRightTopBottomIMECompletePreviousWordBeforeCursorNextWordAfterCursorGotoSettingsSelectAllCutCopyPasteUndoRedoDeleteDeleteCharacterAfterCursorDeleteWordBeforeCursorDeleteWordAfterCursorSwitchLanguageSwitchIMESwitchIMEVoiceHideKeyboardNoop # No operation. Does nothing.keyAction and text cannot be used together.
ENThumbKey:
main:
key0_0: { longPress: { text: "1" } }
key0_1: { longPress: { text: "2" } }
key0_2: { longPress: { text: "3" } }
key1_0: { longPress: { text: "4" } }
key1_1: { longPress: { text: "5" } }
key1_2: { longPress: { text: "6" } }
key2_0: { longPress: { text: "7" } }
key2_1: { longPress: { text: "8" } }
key2_2: { longPress: { text: "9" } }
key3_0: { longPress: { text: "0" } }
This enables long pressing to type digits. longPress properties are: text, keyAction, remove. These are used the same way as for center, left, topLeft, etc.
This example shows one way to declare combining diacritics:
ENMessagEase:
main:
key0_0:
topLeft:
text: "\u0301" # unicode sequence for Combining Acute Accent
displayText: "◌́" # Dotted Circle + Combining Acute Accent
top:
text: "\u0302" # Combining Circumflex Accent
displayText: "◌̂"
topRight:
text: "\u030b" # Combining Double Acute Accent
displayText: "◌̋"
Note that the text field contains only one character: the combining diacritic, while the displayText field contains two characters: the dotted circle and the combining diacritic.
ENThumbKey:
main:
key0_1:
right:
text: "!"
swipeReturnText: "¡" # upside-down exclamation mark, used commonly in Spanish
key1_3:
bottomLeft:
swipeReturnAction: Redo
bottomRight:
swipeReturnAction: Undo
The attributes swipeReturnText and swipeReturnAction allow defining swipe-return behaviour. Possible values for swipeReturnAction are the same as the ones for keyAction.
This feature retains the latest text clips that were copied/cut, so that you can select an older one. It’s enabled in the parameters and accessible through a swipe-return on the paste slide action.
Once enabled, text copied or cut through the copy/cut actions in ThumbKey won’t be shared with the system clipboard of Android. Instead, it will be stored in the app’s memory and pasted from there instead of from the system clipboard.
Note that using cut/copy/paste controls from outside the keyboard will use the standard system clipboard and not ThumbKey’s private one.
This ensures more privacy, as data added to the system clipboard can actually be accessed by any app. In some Android devices such as samsung devices, it is also automatically retrieved and stored by a proprietary application, without any option to disable it.
Physical keyboards, with the full-size QWERTY layout, were not designed for use on small devices like phones; they were designed specifically for 10 fingers resting on a keybed, sitting on a secure surface. Phones must be held with the fore-fingers and palm, or held with one hand and typed with the other, leaving only 1 or 2 thumbs (as opposed to 10 fingers) free to perform key-presses. As texting came into being, word prediction came to be seen as the best solution to slow input speeds.
On phones that used the 9-key numeric layout, T9 predictive text was used. Other phones used the full-hand layout with the familiar QWERTY layout, with other proprietary predictive methods.
As phones moved from physical buttons to soft-keyboards, key sizes became smaller and taps more imprecise and error-prone, with better predictive technology picking up the slack.
Smartphone companies like Apple and Google, in an attempt to better their word prediction algorithms, as well as collect potentially profitable information on what their users were typing, began submitting and aggregating all their user's key-taps to their servers, violating user's privacy in the process. Known as Keyloggers, and seen as universally malicious programs on desktop computers, these apps unfortunately became normalized and seen as a necessity on phones.
The lack of innovation on phone keyboard design, is best explained by the potential profitability these companies stand to gain by collecting and aggregating everything a user types; including the commodification of this data directly, or information and trends about you learned from this data, that they can sell to advertisers and 3rd parties. These could include your buying preferences, preferred websites, what you most commonly talk about with friends, and everything you type into search bars and text boxes.
As of today, phone keyboards are in such an abysmal state of privacy, that there aren't many keyboards left that can guarantee not to be logging all of your keystrokes.
As a testament to the stunning lack of innovation on both desktop and phone keyboards, the QWERTY layout from the 1880s is still the dominant layout, even on smartphones in the 21st century.
One company named Exideas created a keyboard app called MessagEase, which relied on the original large 9-key grid of old phones, and managed to achieve comparable fast typing speeds to other keyboards, without relying on big-data-powered word-prediction.
Much research went into MessagEase's design, and many of its users can do > 50 words per minute.
MessagEase is unfortunately unmaintained, and Thumb-Key uses a better alternating-thumb layout letter position (although the original MessagEase Keyboard layout is available in the settings).
You can use the following tool to verify the certificate before installation:
apksigner verify -v --print-certs <path-to-apk>
SHA256: EA:71:95:CF:CE:63:8A:E6:B1:A8:00:2D:DC:0D:48:63:36:60:95:EA:5B:8D:95:C1:CD:5E:25:DB:0F:E2:E7:C3
See Contributing.md for how to add keyboard layouts, and themes.
Translations via Weblate:
Thumb-Key will always remain free, open-source software. We've seen many keyboards (and open-source projects in general) go unmaintained after a few years. Recurring donations have proven to be the only way these projects can stay alive.
Your donations directly support full-time development, and help keep this maintained. If you find yourself using Thumb-Key every day, consider donating:
1Hefs7miXS5ff5Ck5xvmjKjXf5242KzRtK0x400c96c96acbC6E7B3B43B1dc1BB446540a88A0141taVyY6e1xApqKyMVDRVxJ76sPkfZhALLTjRvVKpaAh2pBd4wv9RgYj1tSPrx8wc6iE1uWUfjtQdTmTy2FGMeChGVKPQuV(top 30 of 202)
Kotlin
100.0%
A privacy-conscious keyboard made for your thumbs
Report Bug
·
Request Feature
·
Releases
Thumb-Key is a privacy-conscious smart keyboard, made specifically for your thumbs.
It features a 3x3 grid layout, and uses swipes for the less common letters. Its easy to learn, and designed for fast typing speeds.
Instead of relying on profit-driven, privacy-offending word and sentence prediction for accuracy, as do most popular phone keyboards like Gboard and Swiftkey, Thumb-Key uses large keys with predictable positions, to prevent your eyes from hunting and pecking for letters.
As the key positions get ingrained into your muscle memory, eventually you'll be able to approximate the fast speeds of touch-typing, your eyes never having to leave the text edit area.
This project is a follow-up to the now unmaintained (and closed-source) MessagEase Keyboard, which is its main inspiration.
A to capitalize. (If you changed the layout, the button next to #)
Enabling Slide gestures in keyboard settings will enable the following continuous sliding gestures:
Enabling Spacebar: Allow normal swipes to work with slide gestures, in keyboard settings will enable the following:
Enabling Backspace: Allow normal swipes to work with slide gestures, in keyboard settings will enable the following:
Enabling Ghost keys in keyboard settings will enable swiping hidden symbol keys without switching to the numeric layout.
Modify keys and HideKeyboard action to achieve MessagEase experienceKeyboard keys can be customized using YAML.
ENThumbKey:
main:
key1_0:
center:
text: ñ
This YAML configuration modifies the key in the second row, first column, center letter from 'n' to 'ñ'.
ENThumbKey specifies which keyboard to change. In this case, it's the 'english thumbkey' layout.
main specifies the main keyboard layout. Possible values are:
mainshiftednumericctrledaltedkey1_0 specifies the key to modify. The first number is the row, and the second number is the column. The top row is 0, and the left column is 0.center specifies which slide/touch direction of the key to modify. Possible values depend on the value of swipeType -- for swipeType: EIGHT_WAY, they are:
centerlefttopLefttoptopRightrightbottomRightbottombottomLefttext specifies the text of the keyENThumbKey:
main:
key0_0:
swipeType: EIGHT_WAY
right: { text: ê }
topRight: { text: è }
top: { text: ę }
shifted:
key0_0:
swipeType: EIGHT_WAY
right: { text: Ê }
topRight: { text: È }
top: { text: Ę }
ESCAMessagEase:
main:
key0_0:
bottom: { text: "( ͡° ͜ʖ ͡°)", size: SMALLEST }
key0_1:
# Unicode escape sequence can be optionally used for convenience or readability.
bottomLeft: { text: "\U000121EB", size: SMALL }
# this is equivalent to:
# bottomLeft: {text: "𒇫", size: SMALL}
key2_2:
swipeType: FOUR_WAY_CROSS
center: { text: "𓀒", size: LARGE }
topLeft: { remove: true }
topRight: { remove: true }
bottomRight: { remove: true }
bottomLeft: { remove: true }
![]()
ENThumbKey (english thumbkey) and ESCAMessagEase (español català messagease).main and shifted modes modified.ENThumbKey which don't
have them by default, we must adjust swipeType.size property to specify the display size of the text. Possible values are:
LARGESMALLSMALLESTremove property is used to remove key-sides.swipeType property is used to modify the directionality of a key. Possible values are:
EIGHT_WAYFOUR_WAY_CROSSFOUR_WAY_DIAGONALTWO_WAY_VERTICALTWO_WAY_HORIZONTALENThumbKey:
main:
key0_3:
center:
keyAction: SwitchLanguage
left:
keyAction: ToggleEmojiMode
![]()
This swaps the 'switch language' and 'toggle emoji' actions on the top-right key. Possible values for keyAction are:
ToggleNumericModeToggleABCModeToggleEmojiModeToggleClipboardModeToggleCapsLockToggleShiftModeTrueToggleShiftModeFalseToggleCtrlModeTrueToggleCtrlModeFalseToggleAltModeTrueToggleAltModeFalseLeftRightTopBottomIMECompletePreviousWordBeforeCursorNextWordAfterCursorGotoSettingsSelectAllCutCopyPasteUndoRedoDeleteDeleteCharacterAfterCursorDeleteWordBeforeCursorDeleteWordAfterCursorSwitchLanguageSwitchIMESwitchIMEVoiceHideKeyboardNoop # No operation. Does nothing.keyAction and text cannot be used together.
ENThumbKey:
main:
key0_0: { longPress: { text: "1" } }
key0_1: { longPress: { text: "2" } }
key0_2: { longPress: { text: "3" } }
key1_0: { longPress: { text: "4" } }
key1_1: { longPress: { text: "5" } }
key1_2: { longPress: { text: "6" } }
key2_0: { longPress: { text: "7" } }
key2_1: { longPress: { text: "8" } }
key2_2: { longPress: { text: "9" } }
key3_0: { longPress: { text: "0" } }
This enables long pressing to type digits. longPress properties are: text, keyAction, remove. These are used the same way as for center, left, topLeft, etc.
This example shows one way to declare combining diacritics:
ENMessagEase:
main:
key0_0:
topLeft:
text: "\u0301" # unicode sequence for Combining Acute Accent
displayText: "◌́" # Dotted Circle + Combining Acute Accent
top:
text: "\u0302" # Combining Circumflex Accent
displayText: "◌̂"
topRight:
text: "\u030b" # Combining Double Acute Accent
displayText: "◌̋"
Note that the text field contains only one character: the combining diacritic, while the displayText field contains two characters: the dotted circle and the combining diacritic.
ENThumbKey:
main:
key0_1:
right:
text: "!"
swipeReturnText: "¡" # upside-down exclamation mark, used commonly in Spanish
key1_3:
bottomLeft:
swipeReturnAction: Redo
bottomRight:
swipeReturnAction: Undo
The attributes swipeReturnText and swipeReturnAction allow defining swipe-return behaviour. Possible values for swipeReturnAction are the same as the ones for keyAction.
This feature retains the latest text clips that were copied/cut, so that you can select an older one. It’s enabled in the parameters and accessible through a swipe-return on the paste slide action.
Once enabled, text copied or cut through the copy/cut actions in ThumbKey won’t be shared with the system clipboard of Android. Instead, it will be stored in the app’s memory and pasted from there instead of from the system clipboard.
Note that using cut/copy/paste controls from outside the keyboard will use the standard system clipboard and not ThumbKey’s private one.
This ensures more privacy, as data added to the system clipboard can actually be accessed by any app. In some Android devices such as samsung devices, it is also automatically retrieved and stored by a proprietary application, without any option to disable it.
Physical keyboards, with the full-size QWERTY layout, were not designed for use on small devices like phones; they were designed specifically for 10 fingers resting on a keybed, sitting on a secure surface. Phones must be held with the fore-fingers and palm, or held with one hand and typed with the other, leaving only 1 or 2 thumbs (as opposed to 10 fingers) free to perform key-presses. As texting came into being, word prediction came to be seen as the best solution to slow input speeds.
On phones that used the 9-key numeric layout, T9 predictive text was used. Other phones used the full-hand layout with the familiar QWERTY layout, with other proprietary predictive methods.
As phones moved from physical buttons to soft-keyboards, key sizes became smaller and taps more imprecise and error-prone, with better predictive technology picking up the slack.
Smartphone companies like Apple and Google, in an attempt to better their word prediction algorithms, as well as collect potentially profitable information on what their users were typing, began submitting and aggregating all their user's key-taps to their servers, violating user's privacy in the process. Known as Keyloggers, and seen as universally malicious programs on desktop computers, these apps unfortunately became normalized and seen as a necessity on phones.
The lack of innovation on phone keyboard design, is best explained by the potential profitability these companies stand to gain by collecting and aggregating everything a user types; including the commodification of this data directly, or information and trends about you learned from this data, that they can sell to advertisers and 3rd parties. These could include your buying preferences, preferred websites, what you most commonly talk about with friends, and everything you type into search bars and text boxes.
As of today, phone keyboards are in such an abysmal state of privacy, that there aren't many keyboards left that can guarantee not to be logging all of your keystrokes.
As a testament to the stunning lack of innovation on both desktop and phone keyboards, the QWERTY layout from the 1880s is still the dominant layout, even on smartphones in the 21st century.
One company named Exideas created a keyboard app called MessagEase, which relied on the original large 9-key grid of old phones, and managed to achieve comparable fast typing speeds to other keyboards, without relying on big-data-powered word-prediction.
Much research went into MessagEase's design, and many of its users can do > 50 words per minute.
MessagEase is unfortunately unmaintained, and Thumb-Key uses a better alternating-thumb layout letter position (although the original MessagEase Keyboard layout is available in the settings).
You can use the following tool to verify the certificate before installation:
apksigner verify -v --print-certs <path-to-apk>
SHA256: EA:71:95:CF:CE:63:8A:E6:B1:A8:00:2D:DC:0D:48:63:36:60:95:EA:5B:8D:95:C1:CD:5E:25:DB:0F:E2:E7:C3
See Contributing.md for how to add keyboard layouts, and themes.
Translations via Weblate:
Thumb-Key will always remain free, open-source software. We've seen many keyboards (and open-source projects in general) go unmaintained after a few years. Recurring donations have proven to be the only way these projects can stay alive.
Your donations directly support full-time development, and help keep this maintained. If you find yourself using Thumb-Key every day, consider donating:
1Hefs7miXS5ff5Ck5xvmjKjXf5242KzRtK0x400c96c96acbC6E7B3B43B1dc1BB446540a88A0141taVyY6e1xApqKyMVDRVxJ76sPkfZhALLTjRvVKpaAh2pBd4wv9RgYj1tSPrx8wc6iE1uWUfjtQdTmTy2FGMeChGVKPQuV(top 30 of 202)
Kotlin
100.0%