- Java 98.8%
- Python 0.5%
- Rust 0.2%
- Shell 0.2%
- JavaScript 0.1%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
| .forgejo/workflows | ||
| .github | ||
| agent-web | ||
| app | ||
| docs | ||
| fastlane | ||
| fend-jni | ||
| gradle/wrapper | ||
| scripts | ||
| utils | ||
| .gitignore | ||
| .project | ||
| Android.mk | ||
| build.gradle | ||
| CONTRIBUTING.md | ||
| gradle.properties | ||
| gradlew | ||
| gradlew.bat | ||
| LICENSE | ||
| qa-suite.md | ||
| README.md | ||
| settings.gradle | ||
| test | ||
KISS
An Android launcher not spending time and memory on stuff you'd rather do.
Copylefted libre software, licensed GPLv3+:
Use, see, change and share at will; with all.
From your background, type the first letters of apps, contact names, or settings—and click.
Results clicked more often are promoted.
Browsing for apps is and should be secondary.
Join the beta program to test the latest version.
Join the Hosted Weblate translation platform to help translate the app.
Public Telegram chat: https://t.me/joinchat/_eDeAIQJU1FlNjM0
![]() |
![]() |
![]() |
![]() |
|---|
Unimo fork additions
Unimo is a search-first fork of KISS with an optional end-to-end-encrypted account. The account key (a 32-byte post-quantum seed) is sealed at rest by an auth-bound AES-256-GCM key in the AndroidKeyStore (StrongBox where available, else the TEE) and only released after a biometric / screen-lock ceremony. A one-time recovery key is shown at registration; it is the only way back into the account if the device is lost, the screen lock is reset, or the app is reinstalled.
- Requires Android 7.0 (API 24) or newer.
- Create an account from the Account menu entry (shown on first run). After that, restarting the launcher prompts you to unlock with fingerprint or screen lock.
- Sign out keeps the sealed key on device; Remove from this device wipes it (the account survives on the server and can be restored with the recovery key).
- Multi-device: a signed-in manager can Invite a device (share a one-time code). The new device uses Join existing, then the manager Enables or Blocks the request (dialog + notification while unlocked). No push while locked.
- Notification mirroring (opt-in): with notification access granted, "Sync notifications" in the Account status mirrors your notifications (title, text, source app) into the end-to-end-encrypted vault and shows other devices' notifications locally. Records are pruned after 24 hours. Doze can delay delivery while the phone is idle. Incoming calls (carrier and Signal/Messenger-style VoIP) are mirrored from their notification once the phone rings; a re-posted call notification (caller id resolved, call answered) mirrors again.
- Crankle (agent): the pill-bar bot button turns the bar text into a plan the
tainted-love core runs over the
launcher's tools (contacts, notes, web search, page reading, fend, and
useApp: driving any installed app through the accessibility service, a pill on top to stop it), asking on a card before anything leaves the phone. Runs show as rows pinned by the search bar, whatever the query. The core runs in a hidden WebView from the bundle underapp/src/main/assets/agent/, built (and committed) fromagent-web/withcd agent-web && bun install && bun run build— rebuild it after bumping tainted-love there. The model call is the account'sllmover the live WebSocket; aliases and grants sync with the desktop app through thesettingscollection (agent.state). - Implementation lives in
app.unimo.android(fork-owned); seeqa-suite.mdfor the manual test checklist.



