Releases: jegly/Box
Box for Linux
Box for Linux v0.1.0
The first release of Box for Linux — a native GTK4 / libadwaita desktop app that runs AI models fully locally on your machine. Chat, real-time voice conversation, live camera vision, document Q&A, and web/file tools — all offline, no account, no telemetry.
Important
Box for Linux is a separate application, written from scratch — not a port or fork of the Android app. The Android app is open source (Apache-2.0); Box for Linux is distributed as a closed-source binary — the .deb ships compiled code and its source is not published.
Highlights
- Local chat with
.litertlmmodels (Gemma 4 E2B / E4B) — streaming output, Markdown + LaTeX rendering, multimodal attachments - Voice & conversation — voice messages, hands-free voice conversation mode with push-to-talk, offline Piper TTS in six voices
- Live camera vision — point a webcam and ask; one-shot capture or continuous Vision Mode
- Knowledge Base (RAG) — index PDFs, docs, and images per-chat or into reusable Notebooks; answers cite their sources
- Tools & agent mode — HTTPS-only web search and a workspace-scoped filesystem tool, with multi-step agent chaining
- Persistent memory — save a fact once, recalled across all chats
- Six themes — Catppuccin (Mocha / Latte / Frappé / Macchiato) and Dracula (classic + Pro)
- Everything off by default — every capability is a separate opt-in switch, with permission prompts before any tool touches your machine
Install
sudo apt install ./box_0.1.0_amd64.debDependencies are pulled automatically. Launch Box from your app menu or run box. On first run, Box offers to download a model (Gemma 4 E2B, ~2.59 GB) — downloaded once, then used entirely offline.
Requirements
- Ubuntu (amd64) with a GTK4 / libadwaita desktop session
- Python 3.14 (pulled as a dependency)
- ~3–4 GB free storage for a model
- CPU-only works fine; GPU acceleration is faster but optional
Checksum
| File | SHA-256 |
|---|---|
box_0.1.0_amd64.deb |
9d341a5e5ccd802e4a505189c5ac72b8f7990e01a1b4007a7802b335865ec189 |
Box v1.0.10
Box v1.0.10
Gemini Nano Hub — Main branch only
A new "Nano" task in the LLM section gives Pixel 9+ users access to six on-device ML Kit features powered by Gemini Nano via AICore, Over kill the Application could already do this, however this uses NPU/TPU and works a little different.
(NPU/TPU-accelerated, fully offline):
- Summarize — condense long text into a concise summary
- Proofread — grammar and style corrections with diff view
- Rewrite — rewrite text in a chosen tone (Formal, Casual, Shorter, etc.)
- Chat — multi-turn conversation with Gemini Nano (see below)
- Describe Image — caption any photo from your gallery or live camera
- Speech → Text — on-device speech recognition
Proofread and Rewrite support document attachment — pick a PDF, TXT, or MD file and its content is passed as context.
▎ First use: AICore will download Gemini Nano in the background (~1–2 GB). Wi-Fi recommended. One-time only.
💬 Nano Chat — Persistent multi-session
Nano Chat now saves conversation history to the existing encrypted SQLCipher database. Each session is listed by name, resumable, and can be
renamed or deleted. Sessions are auto-titled from the first message. Long-press any bubble to copy it.
Document Q&A
📸 Describe Image — Live Camera
Describe Image now has a Gallery tab and a Live Camera tab. Tap Capture to snap the current camera frame and send it to Nano for a description — no
need to save the photo first.
Themes — Catppuccin & Dracula
Three-way theme picker in Settings: System (Material You) / Catppuccin (14 accent colours) / Dracula (7 accent colours). Your choice persists
across restarts with no first-frame flicker.
Background Removal — Main branch only
New tool in the Image Generation section. Removes the background from any photo using ML Kit Subject Segmentation — outputs a transparency-preserving PNG. Includes a "Trim transparent edges" option. Save or share the result.
Security
Two new toggles in Settings:
- Tap jacking protection (on by default) — blocks touch events when an overlay is detected on the window
- Accessibility data sensitivity (off by default) — hides app content from untrusted accessibility services. Note: incompatible with TalkBack if
enabled.
Bug Fixes
- Snapdragon 8 Elite NPU model — download progress was showing >100% (e.g. 112%) because the declared file size was copied from the GPU model in
error. Corrected to 3.02 GB. NPU-only accelerator changed to npu,gpu,cpu so a failed NPU init falls back to GPU instead of crashing the app. - Startup crash / Retry crash — fixed a null-pointer crash in the model list sort comparator that triggered on first launch and again when tapping
Retry on the error dialog. - LaTeX in table cells — inline math expressions inside markdown table cells no longer wrap across multiple lines.
- Import button — removed the "GGUF · LiteRT" subtitle from the home screen import button.
APK Variants
Box_v1.0.10_Main_Signed_Release.apk - Stock Android (Pixel, Samsung, etc.) — includes Gemini Nano and Background Removal
Box_v1.0.10_custom-rom-support_Signed_Release.apk - GrapheneOS, LineageOS, CalyxOS — no AICore features
MCP Server feature will be in the next release !
Box v1.0.9
Box v1.0.9
Two variants available:
Box_v1.0.9_Main_Signed_Release.apk — stock Android 15 +
Box_v1.0.9_custom-rom-support_Signed_Release.apk — GrapheneOS / custom ROMs without Google Play Services
A huge thank you to everyone who has reported issues and taken the time to share feedback on this round of bugs — your reports directly drive
improvements in Box and are genuinely appreciated !
New Features
LiteRT-LM - v0.11.0
Document Q&A (RAG)
- New "Document Q&A" task — import PDF/text files and ask questions directly against the document content
- MiniLM embedding model for semantic search; source passage citations shown inline
- Works with any downloaded LLM; model picker on task screen
Settings — New Toggles
Four new opt-in toggles in Settings (all off by default):
- Keep screen on — prevents display from sleeping while Chat is open
- Haptic feedback on send — vibration pulse when a message is sent
- Confirm before clearing chat — dialog prompt before wiping conversation history
- Auto-collapse thinking — collapses blocks automatically once generation finishes
TTS — Kokoro (English)
- Replaced 8 broken individual Kokoro voice entries with a single working "Kokoro (English)" model
(csukuangfj/kokoro-en-v0_19) - Fixes crashes that affected all previous Kokoro entries (wrong tensor shapes / missing metadata)
- voices.bin and tokens.txt fetched automatically on first use (~6 MB)
TTS — 8 New Piper Voices
Added to both branches (13 Piper voices total):
- LibriTTS-R (US English, 116 speakers, ~111 MB)
- HFC Female (US English, ~65 MB)
- HFC Male (US English, ~65 MB)
- Arctic (US English, 18 speakers, ~68 MB)
- Thorsten (German, ~121 MB)
- UPMC (French, 2 speakers, ~65 MB)
- MLS 10246 (Spanish, ~28 MB)
- Huayan (Mandarin Chinese, ~63 MB)
Whisper — 10 Models (expanded from 3)
Shared across Whisper Scribe and Voice Input:
- Tiny, Tiny English-only (~32 MB each)
- Base, Base English-only (~58–63 MB)
- Small, Small English-only (~190–199 MB)
- Medium, Medium English-only (~514–539 MB)
- Large-v3-Turbo (~574 MB) — best quality/size ratio for multilingual
- Large-v3 (~3.1 GB) — unquantized maximum accuracy
Model Additions
- Gemma-4-E2B-it Snapdragon 8 Elite NPU — appears only on SM8750 devices
UI Changes
- "AI Chat" renamed to "Chat" in app bar, home screen shortcut, and empty state
- "Audio Scribe" (Voice tab) renamed to "Whisper Scribe" — avoids confusion with the upstream LiteRT Audio Scribe
feature on the home screen
Bug Fixes
LaTeX - bugs
Fix #46 — Whisper Scribe crash on large audio files (both branches)
Audio decode used boxed List (~16 bytes/sample). A 30-minute recording at 16 kHz allocated ~460 MB before the
model even started. Replaced with a primitive FloatArray growing buffer (~4 bytes/sample, 4× reduction) — large
files now process without OOM.
Fix #47 — TTS silent on GrapheneOS when a non-Amy voice is downloaded (custom-rom-support only)
TTS auto-init always attempted to load the first model in the list (Amy) regardless of what was actually downloaded.
On GrapheneOS, with no Android TTS fallback, a failed Amy init produced silence with no error. Auto-init now
filters by ModelDownloadStatusType.SUCCEEDED before selecting a model to load.
Misc bugs

Box v1.0.8
Box v1.0.8
A huge thank you to everyone who has reported issues and taken the time to share feedback — your reports directly drive
improvements in Box and are genuinely appreciated. Keep them coming.
_**Two variants available:**_
Box_v1.0.8_Main_Signed_Release.apk — stock Android 15 +
Box_v1.0.8_custom-rom-support_Signed_Release.apk — GrapheneOS / custom ROMs without Google Play Services
New Features
- Saved System Prompts — Save, name, and reuse system prompts directly in the model settings dialog. Tap a saved prompt to
apply it instantly; swipe or long-press to delete. - Restore Defaults — New button in model settings resets all sliders (temperature, top-K, top-P, max tokens) back to their
default values in one tap.
Fixes
- System prompt now actually applied — Changing the system prompt mid-session correctly resets the conversation with the new
instruction. Previously the prompt was saved in the UI but not passed to the model. - Markdown rendering in math responses — Plain-text segments inside chat bubbles now render through the Markdown pipeline,
fixing broken formatting in responses that mix text and LaTeX math. - Randomised inference seed — Each conversation now uses a unique random seed, producing more varied outputs across sessions
when using CPU backend.
UI Polish
- AI chat bubbles now use the full available width.
- Removed "API Documentation", "Example code", and "Learn more" links from the model list — they pointed to upstream Google
resources not relevant to Box. - Removed the stray ? icon that appeared next to models that hadn't been downloaded yet.
- LaTeX headers fixed.
Known Issue Upstream
- GPU backend produces identical outputs — On devices where the GPU sampler is unavailable (affects Pixel 6a and others), the
LiteRT LM engine internally restricts token candidates to 1 before sampling, forcing greedy decoding regardless of
temperature/top-K settings. This is a limitation in LiteRT LM v0.11.0 with no app-level workaround. Switch to CPU in model
settings for varied outputs. Reported upstream as issue #817.

Box 1.0.7
Box v1.0.7
Two variants available:
Box_v1.0.7_Main_Signed_Release.apk — stock Android 15 +
Box_v1.0.7_custom-rom-support_Signed_Release.apk — GrapheneOS / custom ROMs without Google Play Services
✨ New
Catppuccin Accent
Settings now has a Catppuccin Accent option. When enabled, the app's accent colors (buttons, links, chat bubbles, tabs) switch
to the Catppuccin palette — Mocha in dark mode, Latte in light mode. 14 accent colors to pick from: Mauve, Blue, Sapphire, Sky,
Teal, Green, Lavender, Pink, Peach, Rosewater, Flamingo, Maroon, Red, Yellow. Wallpaper-derived surfaces are preserved so it
still feels like Material You.
LaTeX
Functional.
Bug Fixes
New Chat (+) button opened the wrong model
If you had only downloaded E4B, tapping + would open the E2B download panel instead of starting a chat with E4B. Now picks the
first model you actually have downloaded.
New Chat (+) didn't create a new conversation
After tapping + the next message was silently appended to the previous conversation in History instead of starting a fresh
one. Fixed — + now always begins a new conversation.
Switching models crashed the app with two models downloaded
Switching between two downloaded LiteRT models caused both to load on GPU simultaneously → out of memory → process crash. Root
cause: a Compose state bug where remember { "" } on a plain String didn't persist across recompositions, causing the old model
to be re-selected ~58ms into the new model's init. Fixed with mutableStateOf.
Switching models lost conversation history for the new model
After a model switch, the new model's messages were saved under the previous model's conversation ID, corrupting history. Fixed
— stale conversation ID is now cleared on model switch.
Voice-to-voice: turning off mic or speaker didn't stop speech immediately
Tapping the mic toggle or speaker icon to OFF while the AI was talking had no effect on already-queued TTS sentences — the AI
kept talking. Both toggles now call stop immediately.
Same Whisper models showed as separate downloads in Voice Input and Audio Scribe
Whisper Large-v3-Turbo downloaded in Voice Input would show as "not downloaded" in Audio Scribe (and vice versa) due to a name
mismatch. Both tabs now share the same model objects — one download covers both.
Whisper model stuck in permanent ERROR state after a bad download
A corrupted or truncated Whisper download left the model stuck showing ERROR with no way to retry. Now automatically resets to
"not downloaded" if the file is missing or undersized, so you can tap Download again.
LaTeX ∇ (nabla) rendered as abla or nabla in AI Chat math
The gradient operator consistently broke in math responses. Fixed — the LLM tokenizer's newline corruption of \nabla is now
repaired before any math parsing runs.
HTTP connection leaked in the update checker
The update checker opened an HTTP connection but never closed it on early exits. Fixed with a try-finally block.
Audio Scribe leaked audio codec resources on errors
MediaCodec and MediaExtractor were not released if an exception occurred during audio processing. Fixed.
Image generation OOM was silently swallowed
OutOfMemoryError during Stable Diffusion generation was caught by catch (Exception) and discarded, leaving the UI stuck with no
feedback. Now surfaces a user-readable "Out of memory — try a smaller image size" message.
Security
SQLCipher database key was stored in plain SharedPreferences
When biometric database encryption was turned off, the SQLCipher passphrase was Base64-encoded and written to unprotected
SharedPreferences. Migrated to EncryptedSharedPreferences backed by Android Keystore AES-256-GCM. Existing keys are
automatically migrated on first launch — no data loss.
PII was being written to logcat
A security audit found several places where user data was logged at debug level — readable by any USB-connected computer or
rooted device:
- Email content (to, subject, body), SMS messages, phone numbers, calendar events, alarm/timer details, and locations
- User prompts logged in MobileActions
- AI prompts and responses logged in TinyGarden
- All intent extras (including values) dumped on every app launch and deep link
- Full FCM message body and deep link URL logged
All wrapped in BuildConfig.DEBUG or removed. Nothing is logged in release builds.
Hardened Manifest
Upstream remaining firebase logging stripped and removed.
Box v1.0.6
### Box v1.0.6
New: On-Device Image Generation
First stable release of on-device image generation. Previous builds had crashes and instability in the Stable Diffusion
pipeline — v1.0.6 resolves these and is the first version we'd consider ready for daily use.
- Image generation time dropped from ~27 minutes to under 4 minutes — earlier builds required 20 steps with base SD 1.5;
LCM-SSD-1B (recommended) produces quality results in just 4 steps thanks to consistency distillation, combined with the CPU
optimisations below
- Added Image Gen — generate images from text prompts fully on-device using Stable Diffusion
- 6 models available to download, powered by stable-diffusion.cpp:
- LCM-SSD-1B Q4_K (~2.2 GB) — recommended, fast SDXL-class results in 4 steps
- SDXL-Lightning 4-step Q4_0 (~2.8 GB) — ByteDance distillation, high quality in 4 steps
- SDXL-Turbo Q4_0 (~4.2 GB) — vivid results in 1–4 steps
- SDXL Base Q4_0 (~3.9 GB) — full SDXL at native 1024² resolution
- SD 1.5 Q4_0 (~2.1 GB) — classic reliable all-rounder
- SD 1.5 Q8_0 (~4.0 GB) — higher precision SD 1.5
- Adjustable steps, CFG scale, negative prompt, and image size (256² up to 1024²)
- Save generated images directly to your gallery
- Import your own GGUF model files from device storage
- Fixed crash (SIGSEGV) on second generation — was a use-after-free in the sd.cpp context; context is now reloaded before each
generation
### Performance
- Enabled ARM dotprod + FP16 CPU kernels for all ggml-based inference (Stable Diffusion, SmolLM,llama.cpp) — these were silently disabled
at build time due to cross-compilation defaults - Upgraded ggml release builds from -O2 to -O3 optimisation
- Enabled flash attention in Stable Diffusion — reduces memory pressure during sampling
- Compiled in experimental Vulkan GPU backend for Stable Diffusion (auto-falls back to CPU if unsupported)
Voice Input / Audio Scribe
- Removed Whisper Tiny — was hanging on transcription; Whisper Base is now the smallest option
General
- Model cards now show descriptions when expanded — tap any model card to see details and recommended settings
- All Image Gen model cards include plain-English descriptions and recommended CFG/step settings
Two variants available:
- Box_v1.0.6_Main_Signed_Release.apk — stock Android 15 +
- Box_v1.0.6_custom-rom-support_Signed_Release.apk — GrapheneOS / custom ROMs without Google Play Services
APK size reduced from ~890 MB to ~550 MB — native libraries are now compiled for arm64 only, dropping unused x86 and 32-bit
ARM builds. All devices that can run Box (Android 15+) are arm64.
Box 1.0.5
Main — v1.0.5
New Models
- Gemma 4 E2B & E4B model files refreshed — updated commit hashes from HuggingFace.
New Features
Audio Scribe
Record audio directly in the app or import a WAV file. Whisper transcribes it on-device, optional speaker diarization labels each speaker, then
the LLM can summarise, analyse, or answer questions about the content. Entirely offline.
Ask Audio (multimodal chat)
Send a recorded audio clip or WAV file directly into AI Chat with Gemma 4 E2B / E4B. The model hears and responds to the content.
Text-to-Speech screen
Dedicated TTS tab for on-device voice synthesis using system TTS or an imported Piper/ONNX model.
Real-time voice reply updated
Enable in Settings to have the AI speak its reply sentence by sentence as it generates, rather than waiting for the full response. Works with
Android system TTS or an imported Piper model.
TTS voice picker
Settings → TTS Voice — choose which installed offline system voice is used for AI replies.
AI Chat shortcut
Long-press the Box icon → AI Chat. Navigates directly into chat even from a cold start.
In-app update checker
Settings → Check for updates. Fetches the latest release from GitHub and shows a direct download button if a newer version is available.
Model import from list
Whisper and TTS models can now be imported directly from the model list screen without needing a model already downloaded.
Performance
- Speculative decoding / MTP working — capability is now checked against the model file itself, not the allowlist. Gemma 4 E2B reaches 66–91
tok/s with GPU + speculative decoding on real conversation text vs ~52 tok/s plain GPU (Galaxy S26 Ultra). - Sustained Performance Mode — CPU/GPU clocks locked during inference. No more thermal throttle mid-conversation.
- Benchmark speculative decoding toggle — benchmark screen now exposes the toggle for models that support it.
Bug Fixes
- Fixed app shortcut navigating to home screen instead of chat on cold start.
### custom-rom-support — v1.0.5
All changes from Main above, plus:
New Models
Same model set as Main. Accelerator order includes NPU (gpu,npu,cpu) for Tensor devices on supported ROMs.
Performance
- Speculative decoding and Performance Mode as above.
- GPU is the recommended accelerator on Snapdragon. NPU path on Snapdragon is untested on custom ROMs — falls back to GPU automatically.
custom-rom-support specific
- Piper TTS (Amy) available as a built-in download in the TTS tab — no third-party TTS app needed on de-Googled ROMs.
- No Google Play Services dependency — AICore/Firebase paths are bypassed.
- TTS voice reply works out of the box with the bundled Piper engine.
Notes
This build is for GrapheneOS, LineageOS, CalyxOS, and other custom ROMs without Google Play Services. If you are on stock Android (Pixel,
Samsung, etc.) use the Main APK. If you previously installed Main, uninstall it before switching — the package ID is the same and you will
get a signature conflict.
Box v1.0.4
Box 1.0.3
custom-rom-support v1.0.4
custom-rom-support — v1.0.4
What's new in v1.0.4
Bug fixes
- Fixed missing GPU option on some devices. — GPU is now available as an accelerator alongside TPU and CPU
- Fixed accelerator setting resetting to GPU after app is fully closed — your chosen accelerator (TPU, GPU, or CPU) now persists across app restarts




