| --- |
| license: mit |
| tags: |
| - android |
| - keyboard |
| - ime |
| - clipboard |
| - react |
| - nextjs |
| language: |
| - en |
| --- |
| |
| # CopyVault Keyboard |
|
|
| **Search your clipboard like you search the web.** An Android keyboard (IME) that captures everything you copy and lets you search & re-paste it from any app. |
|
|
| ## Downloads |
|
|
| | File | Size | Description | |
| |------|------|-------------| |
| | [copyvault-keyboard.apk](https://huggingface.co/ryzerrr/copyvault-keyboard/resolve/main/copyvault-keyboard.apk) | 4.5 MB | Pre-built Android APK (ready to install) | |
| | [copyvault-full-project.zip](https://huggingface.co/ryzerrr/copyvault-keyboard/resolve/main/copyvault-full-project.zip) | 1.9 MB | Complete source: web app + Android project | |
| | [copyvault-full-project.tar.gz](https://huggingface.co/ryzerrr/copyvault-keyboard/resolve/main/copyvault-full-project.tar.gz) | 1.3 MB | Same, as tarball | |
| | [BUILD-GUIDE.md](https://huggingface.co/ryzerrr/copyvault-keyboard/resolve/main/BUILD-GUIDE.md) | β | Step-by-step build instructions | |
|
|
| ## Install the APK |
|
|
| 1. Download `copyvault-keyboard.apk` to your Android phone |
| 2. Tap the file to install (enable "Install from unknown sources" if prompted) |
| 3. Open **Settings β System β Keyboard & Input Method** |
| 4. Enable **CopyVault Keyboard** |
| 5. Set CopyVault as your default keyboard |
| 6. Copy anything anywhere β it's captured to your searchable history |
| 7. Tap any text field β use the **Clipboard** tab to search & paste |
|
|
| ## Features |
|
|
| - **Searchable clipboard history** β capture everything, search by text/type/source/time |
| - **Smart entity detection** β URLs, emails, phones, OTPs, tracking numbers, crypto addresses, code, colors, passwords |
| - **Three-panel keyboard** β Clipboard / Type (QWERTY) / Emoji |
| - **Trapezium-shaped tabs** β sleek, unique monochrome design |
| - **Themes** β Light / Dark / AMOLED / System |
| - **Incognito mode** β stops capture when enabled |
| - **Snippet templates** β type `;sig` + space β expands to full signature |
| - **Local-only storage** β no cloud, no telemetry |
| - **System clipboard monitoring** β captures clips from any app |
|
|
| ## Architecture |
|
|
| ``` |
| User types on keyboard |
| β |
| TypingPanel β useUI.typeChar("q") |
| β |
| UI store (imeMode=true) β window.AndroidKeyboard.commitText("q") |
| β |
| WebAppInterface.commitText() β InputConnection.commitText() |
| β |
| Text appears in the active app |
| |
| User copies text anywhere |
| β |
| Android ClipboardManager fires listener |
| β |
| CopyVaultKeyboardService injects JS: window.__copyVaultAddClip(text, "Android") |
| β |
| Zustand store adds clip to history |
| β |
| Clip appears in the Clipboard panel, searchable |
| ``` |
|
|
| ## Build from source |
|
|
| See [BUILD-GUIDE.md](https://huggingface.co/ryzerrr/copyvault-keyboard/resolve/main/BUILD-GUIDE.md) for complete instructions. |
|
|
| Quick version: |
| ```bash |
| bun install |
| BUILD_EXPORT=true bun run build |
| node scripts/fix-assets.js |
| cp -r out/* android-keyboard/app/src/main/assets/ |
| |
| cd android-keyboard |
| echo "sdk.dir=/path/to/Android/Sdk" > local.properties |
| ./gradlew assembleDebug |
| adb install app/build/outputs/apk/debug/app-debug.apk |
| ``` |
|
|
| ## Tech stack |
|
|
| - **Web app**: Next.js 16, TypeScript 5, Tailwind CSS 4, shadcn/ui, Zustand, Framer Motion |
| - **Android**: Kotlin, InputMethodService, WebView, ClipboardManager |
|
|
| ## Requirements |
|
|
| - Android 7.0 (API 24) or higher |
| - JDK 17 for building |
| - Android SDK 34 for building |
|
|
| ## License |
|
|
| MIT |
|
|