Quick Start & API Setup
Relevant source files
The following files were used as context for generating this wiki page:
Ownkey Keyboard is a privacy-focused, open-source Android keyboard that operates on a "Bring Your Own Key" (BYOK) model. Its primary feature is the integration of Mistral Voxtral ASR for high-quality voice dictation and Large Language Model (LLM) capabilities for text rewriting. The system is designed to give users full control over their AI providers and data handling.
The project is a derivative fork of FlorisBoard, extending it with a dedicated AI orchestration layer, secure local credential storage via the Android Keystore, and specialized UI components for managing AI endpoints.
Sources: README.md:3-15, VOXTRAL_KEYBOARD_PLAN.md:3-10, AGENTS.md:9-15
Developer Quick Start
To set up a local development environment for Ownkey Keyboard, developers must meet specific hardware and software requirements. The project supports builds via Android Studio or the command line using Gradle.
System Requirements
- RAM: At least 16GB recommended (due to Android Studio/IntelliJ overhead).
- Java: Version 17.
- Build Tools: CMake 3.22+, Clang 15+, and Rust toolchain.
- Android SDK/NDK: Required for manual builds.
Sources: CONTRIBUTING.md:61-75, README.md:64-67
Build and Run Flow
The following diagram illustrates the standard developer workflow for building and deploying the application.
The build process utilizes the standard Gradle wrapper. Artifacts are generated for both the main phone application and the Wear OS companion app.
Sources: README.md:68-76, CONTRIBUTING.md:83-85
AI & API Configuration
The core of Ownkey's AI functionality relies on user-provided API keys and endpoints. This allows for direct connection to Mistral AI or custom self-hosted, OpenAI-compatible backends.
Dictation (ASR) Configuration
The keyboard uses Mistral Voxtral for audio transcription. Users must configure the following parameters in the AI settings screen:
| Parameter | Default Value | Description |
|---|---|---|
| Endpoint URL | https://api.mistral.ai/v1/audio/transcriptions | The ASR service URL. |
| Model | voxtral-mini-latest | The specific model used for transcription. |
| API Key | (User Provided) | Stored encrypted via Android Keystore. |
| Language Hint | (Empty/Auto) | Optional ISO code (e.g., "en", "nl") to improve recognition. |
Sources: README.md:41-47, VOXTRAL_API_SETUP.md:3-15, app/src/main/res/values/strings.xml:519-535
LLM Rewrite Configuration
Beyond dictation, the keyboard supports selected-text rewriting. This requires a separate configuration, as rewrite providers may differ from dictation providers.
The sequence above details how sensitive keys are handled locally before making networked requests to the configured service.
Sources: README.md:49-53, AGENTS.md:23-28, VOXTRAL_KEYBOARD_PLAN.md:14-18
Security & Privacy Model
Ownkey employs a strict security model to protect user API credentials and private content.
Key Storage
- Encryption: API keys are stored using
EncryptedSharedPreferencesbacked by the Android Keystore. - Sanitization: Backup export functions explicitly sanitize and remove sensitive key values to prevent accidental exposure.
- Migration: The app includes logic to migrate legacy plaintext keys to the secure encrypted storage and clean up old values.
Sources: README.md:49-54, VOXTRAL_KEYBOARD_PLAN.md:30-34
Data Flow Nuance
Ownkey does not perform local monitoring of private text. However, users must be aware that enabling AI features (ASR or Rewrite) results in audio or text data being sent to the provider at the configured endpoint. Data handling at that stage is governed by the provider's own policy (e.g., Mistral AI).
Sources: README.md:58-62, AGENTS.md:13-15
Conclusion
Setting up Ownkey Keyboard involves providing the necessary AI credentials through the settings interface. By utilizing the BYOK model and secure local storage, the project balances the utility of cloud AI with user-centric privacy and control. Developers can quickly iterate on the project using standard Android toolchains, focusing on the forked FlorisBoard architecture.