FUTO Keyboard
  • Java 39.4%
  • C++ 30.2%
  • Kotlin 19.3%
  • C 10.6%
  • CMake 0.3%
  • Other 0.1%
Find a file
Aleksandras Kostarevas 7ebbf5c8b5 Update contributing section
Signed-off-by: Aleksandras Kostarevas <alex@futo.org>
2026-08-28 02:57:47 +02:00
.ci
.github/ISSUE_TEMPLATE
common/src/org/futo/inputmethod
dictionaries
gradle/wrapper
java
libs@be4362cf82
native
tests
tools
translations@8cd47ae043
voiceinput-shared
.clang-tidy
.gitignore
.gitlab-ci.yml
.gitmodules
build.gradle
gradle.properties
gradlew
gradlew.bat
LICENSE.md
lint.xml
NOTICE
proguard-rules.pro
README.md
sendZulipMessage.sh
settings.gradle
setUpPropertiesCI.sh
syncTranslations.sh
uploadNightly.sh
uploadNightlyBranch.sh

FUTO Keyboard

The goal is to make a good modern keyboard that stays offline and doesn't spy on you. This keyboard is a fork of LatinIME, The Android Open-Source Keyboard, with significant changes made to it.

Check out the FUTO Keyboard website for downloads and more information.

The code is licensed under the FUTO Source First License 1.1.

Issue tracking and contributing

Please check the GitHub repository to report issues: https://github.com/futo-org/android-keyboard/

The source code is hosted on our internal GitLab and mirrored to GitHub. As registration is closed on our internal GitLab, we use GitHub instead for issues and pull requests.

If you want to help translate the app, please do so via our Pontoon instance: https://i18n-keyboard.futo.org/

Due to custom license, pull requests to this repository require signing a CLA which you can do after opening a PR. Contributions to the layouts repo don't require CLA as they're Apache-2.0

Please do not submit AI-generated pull requests, as these tend to make the codebase more difficult to understand. Pull requests made with clear heavy use of AI may be closed without comment. Please also avoid using AI to write issues, and try to explain it in your own words instead.

Layouts

If you want to contribute layouts, check out the layouts repo.

Building

When cloning the repository, you must perform a recursive clone to fetch all dependencies:

git clone --recursive https://gitlab.futo.org/keyboard/latinime.git

If you forgot to specify recursive clone, use this to fetch submodules:

git submodule update --init --recursive

You can then open the project in Android Studio and build it that way, or use gradle commands:

./gradlew assembleUnstableDebug
./gradlew assembleStableRelease

APK signing

For official FUTO Keyboard versions, you can verify the APK's signing key fingerprint for integrity.

Signing key fingerprint for all versions except Google Play:

MD5: 3A:BB:71:C6:BB:E4:92:27:B1:E3:5D:81:01:48:6A:B0
SHA1: 5D:15:B3:6E:C9:6A:96:28:41:09:DD:62:93:0D:9C:39:9F:5F:06:43
SHA-256: 74:3F:AD:58:64:AB:C4:26:50:0B:2D:C2:C4:7C:8A:D3:24:CB:CD:16:03:3F:80:16:99:48:41:35:63:74:F9:95