Hi, I'm Daniel, and I build AI apps. Inspired by Maxime Rivest's Riddle, I built Inka as an experiment exploring different ways to interact with an AI model on an e-ink device.
Inka is a native Android app built specifically for BOOX Note Air tablets, tested on the BOOX Note Air 5C.
Write with the pen, rest your hand, and the page answers back in a flowing handwritten voice.
IMG_4872-compressed.mp4
Mostly, this exists because it was fun to build, and because I can wow my son with it. I do not let him use it unattended ofc.
- Pen-first writing on BOOX tablets
- Handwritten replies that appear directly on the page
- Word-by-word reply animation
- Ink fade/dissolve animation after you finish writing
- Local notebook history
- Built-in writing personas
- Native, reader-style UI for BOOX tablets
- Bring-your-own-key AI provider setup, with phone-assisted QR setup
- Built-in font rendering for replies by default
- Optional experimental neural handwriting synthesis through a user-configured server
- Optional experimental drawing replies in Developer settings
- No accounts, analytics, telemetry, backend, or crash reporting
- A BOOX Android e-ink tablet
- Android 10 or newer
- Network access for AI replies
- An API key for one supported provider during onboarding
Inka uses BOOX pen APIs for the best writing feel. A normal Android emulator can build and open the app, but it cannot prove BOOX pen latency or e-ink refresh quality.
The preferred way to install Inka is from Google Play:
https://play.google.com/store/apps/details?id=co.podzim.inka
- Open the Google Play listing on your BOOX tablet.
- Install Inka.
- Complete onboarding: scan the phone setup QR or paste your API key, then download the handwriting recognition model.
- Write on the blank page and pause.
If Google Play is not available on your device, you can sideload the APK:
- Download the latest APK from GitHub Releases.
- Copy the APK to your BOOX tablet.
- Open the APK on the tablet.
- Allow installation from local files if Android asks.
- Launch Inka.
- Complete onboarding: scan the phone setup QR or paste your API key, then download the handwriting recognition model.
- Write on the blank page and pause.
For local testing and sideloading:
./gradlew test assembleDebugThe APK is generated at:
app/build/outputs/apk/debug/app-debug.apk
With a BOOX device connected over adb:
adb install -r app/build/outputs/apk/debug/app-debug.apkRelease signing is local-only. Keystores and signing config are ignored by git.
Create a keystore if you do not already have one:
mkdir -p release
keytool -genkeypair \
-v \
-keystore release/inka-upload-key.jks \
-storetype JKS \
-keyalg RSA \
-keysize 2048 \
-validity 10000 \
-alias inkaCreate local signing config:
cp .release-signing.properties.example .release-signing.propertiesThen fill in .release-signing.properties with your keystore path, alias, and passwords.
Build signed release artifacts:
scripts/build-release.shThe signed artifacts are generated at:
app/build/outputs/apk/release/app-release.apk
app/build/outputs/bundle/release/app-release.aab
Use the .aab for Google Play. Each Play upload needs a higher versionCode in app/build.gradle.kts.
GitHub Actions can build the signed sideload APK and attach it, plus a SHA-256 checksum, to a GitHub Release. Configure these repository Actions secrets:
INKA_RELEASE_KEYSTORE_BASE64: the release keystore encoded as a single-line Base64 valueINKA_RELEASE_STORE_PASSWORDINKA_RELEASE_KEY_ALIASINKA_RELEASE_KEY_PASSWORD
Create and push a version tag after committing the version bump:
git tag -a v0.1.5 -m "Inka 0.1.5"
git push origin main v0.1.5The Sideload Release workflow tests and builds the signed release, validates
16 KB APK/native-library alignment, and publishes a versioned APK to GitHub
Releases. It can also be run manually from GitHub Actions with an existing tag.
Keep using the same signing key for every sideload release so Android can install updates over earlier sideloaded versions. A Play-installed build may need to be uninstalled before installing the sideload APK because Google Play applies its own app-signing key.
- Write with the pen.
- Pause to let Inka read the page.
- Tap the book button to read notebook history.
- Tap the eraser to clear the live page.
- Open Settings to change provider, model, handwriting, recognition language, and privacy-local notebook settings.
- Use
Settings -> AI Settings -> Set Up by Phoneto scan a QR code, open a setup page on your phone, and send an API key directly to the tablet.
Experimental drawing replies are hidden under Settings -> Developer -> AI answer mode.
Developer settings also include Reset onboarding, which immediately clears the live page and starts onboarding again for testing setup flows.
Inka uses the built-in font renderer by default. Developer settings also include an experimental hosted handwriting synthesis mode that turns reply text into generated ink strokes through a server you run or configure yourself.
The fastest local setup is Docker:
scripts/run-handwriting-server-docker.shOn macOS, you can also double-click:
scripts/start-handwriting-server-mac.command
Then set Inka:
Settings -> Developer -> Experimental handwriting -> Hosted synthesis
Settings -> Developer -> Server Endpoint -> http://<server-ip>:8878
For USB testing with adb:
adb reverse tcp:8878 tcp:8878Then use:
http://127.0.0.1:8878
The developer handwriting lab does not run automatically on open. Press
Run to send the sample request. The lab shows live status text and logs timing
with the HandwritingLab tag.
Full setup, Cloudflare Container notes, troubleshooting, and privacy details:
docs/design/handwriting-server-setup.md.
With a BOOX device connected over adb:
ANDROID_SERIAL=<device-id> scripts/boox-smoke.shThis builds, installs, runs instrumentation smoke tests, relaunches the app, and stores logs under build/boox-smoke/.
- No required Inka-owned backend
- No account system
- No analytics
- No telemetry
- No crash reporting
- API keys are stored in encrypted Android preferences when available
- Notebook data is stored locally in app-private storage
- Handwriting recognition runs on-device after the model download
- Phone-assisted API key setup starts a temporary local HTTP server on the tablet while the QR setup screen is open. The phone sends the key directly to the tablet on the local network; Inka saves it on the tablet and validates it with the selected AI provider.
- Experimental hosted handwriting synthesis sends generated reply text to the server endpoint you configure. The local Docker setup keeps that server on your own machine; a cloud endpoint should be treated as a privacy choice.
This is an unofficial BOOX app. It is not affiliated with Onyx or BOOX. Sideloading software is your responsibility; keep a way to uninstall or reset the app if something behaves badly.
App code is MIT licensed. See LICENSE.
Dancing Script is bundled under the SIL Open Font License. See licenses/DANCING-SCRIPT-OFL.txt.
The optional Docker handwriting synthesis server downloads and runs
X-rayLaser/pytorch-handwriting-synthesis-toolkit, which is MIT licensed. Keep
its license notice when distributing a server image or hosted deployment.