<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>Urja Labs — Writing</title><description>Notes on on-device AI, Kotlin Multiplatform, and shipping local LLMs.</description><link>https://urjalabs.in/</link><language>en-us</language><item><title>What&apos;s new in NativeLM v0.9.0: charts in chat, an adaptive UI, and a real engine library</title><link>https://urjalabs.in/blog/nativelm-v0-9-0/</link><guid isPermaLink="true">https://urjalabs.in/blog/nativelm-v0-9-0/</guid><description>v0.9 teaches the on-device model to answer with charts, makes the UI adapt from phone to tablet, and pulls the whole AI core out of the app into a reusable Kotlin Multiplatform library — still fully local, no account, no upload, no telemetry.</description><pubDate>Fri, 05 Jun 2026 00:00:00 GMT</pubDate><category>on-device-llm</category><category>android</category><category>release</category><category>charts</category><category>kotlin-multiplatform</category></item><item><title>Your data, your key: local encrypted backup without a server</title><link>https://urjalabs.in/blog/nativelm-local-encrypted-backup/</link><guid isPermaLink="true">https://urjalabs.in/blog/nativelm-local-encrypted-backup/</guid><description>NativeLM keeps everything on your phone — which means losing the phone means losing the data. v0.7 fixes that with a passphrase-encrypted .nlmbak file you fully control: Argon2id → AES-256-GCM, no server, no account, no key we hold.</description><pubDate>Thu, 04 Jun 2026 00:00:00 GMT</pubDate><category>on-device-llm</category><category>android</category><category>privacy</category><category>cryptography</category><category>backup</category></item><item><title>Talk to your local LLM: on-device voice input with Whisper</title><link>https://urjalabs.in/blog/nativelm-on-device-voice-input/</link><guid isPermaLink="true">https://urjalabs.in/blog/nativelm-on-device-voice-input/</guid><description>NativeLM v0.8 lets you dictate your questions — transcribed entirely on-device with Whisper (whisper.cpp), no cloud. Here&apos;s why we picked Whisper over Android&apos;s built-in recognizer, and how the Whisper model became a first-class &apos;Audio&apos; entry in the model catalog.</description><pubDate>Thu, 04 Jun 2026 00:00:00 GMT</pubDate><category>on-device-llm</category><category>android</category><category>privacy</category><category>speech-to-text</category><category>whisper</category></item><item><title>The OCR library that phoned home: restoring NativeLM&apos;s zero-telemetry guarantee</title><link>https://urjalabs.in/blog/nativelm-zero-telemetry-mlkit/</link><guid isPermaLink="true">https://urjalabs.in/blog/nativelm-zero-telemetry-mlkit/</guid><description>Google&apos;s ML Kit gave NativeLM on-device OCR — and quietly bundled a datatransport pipeline that uploaded diagnostics to firebaselogging.googleapis.com on startup. Here&apos;s how we found it and stripped it out with a three-line manifest merge.</description><pubDate>Thu, 04 Jun 2026 00:00:00 GMT</pubDate><category>on-device-llm</category><category>android</category><category>privacy</category><category>telemetry</category><category>ml-kit</category></item><item><title>AirDrop for your LLM: building cloudless peer-to-peer sync without Google Play Services</title><link>https://urjalabs.in/blog/nativelm-p2p-sync/</link><guid isPermaLink="true">https://urjalabs.in/blog/nativelm-p2p-sync/</guid><description>How we built local device-to-device sync for NativeLM using mDNS and TCP sockets, keeping your private AI data completely off the cloud—and why we explicitly avoided Google&apos;s Nearby Connections API.</description><pubDate>Wed, 03 Jun 2026 00:00:00 GMT</pubDate><category>on-device-llm</category><category>android</category><category>privacy</category><category>sync</category><category>architecture</category></item><item><title>Ask in your language, about your English documents: on-device cross-lingual RAG</title><link>https://urjalabs.in/blog/nativelm-multilingual-rag/</link><guid isPermaLink="true">https://urjalabs.in/blog/nativelm-multilingual-rag/</guid><description>NativeLM v0.8 answers in Hindi, Tamil, Kannada and more — reading your English documents and replying in your language, with zero translation model. The whole feature is one prompt directive (plus one stubborn script bug).</description><pubDate>Wed, 03 Jun 2026 00:00:00 GMT</pubDate><category>on-device-llm</category><category>android</category><category>multilingual</category><category>rag</category><category>india</category></item><item><title>Turning your documents into artifacts, on-device: NativeLM Studio</title><link>https://urjalabs.in/blog/on-device-studio-nativelm/</link><guid isPermaLink="true">https://urjalabs.in/blog/on-device-studio-nativelm/</guid><description>NativeLM v0.6.0 adds Studio — generate briefings, FAQs, study guides, timelines, mind maps, and even spoken audio overviews from your own documents, entirely on the phone, via a map-reduce pipeline over on-device Gemma.</description><pubDate>Wed, 03 Jun 2026 00:00:00 GMT</pubDate><category>on-device-llm</category><category>android</category><category>gemma</category><category>map-reduce</category><category>text-to-speech</category><category>privacy</category></item><item><title>What&apos;s new in NativeLM v0.5.0: open, highlight, zoom, OCR, better retrieval</title><link>https://urjalabs.in/blog/nativelm-v0-5-0/</link><guid isPermaLink="true">https://urjalabs.in/blog/nativelm-v0-5-0/</guid><description>v0.4 made on-device document chat work. v0.5 makes it usable — tap a citation to open the source at the exact page with the passage highlighted, pinch to zoom, chat with scans, and get sharper answers. Plus the bugs we fixed along the way.</description><pubDate>Tue, 02 Jun 2026 00:00:00 GMT</pubDate><category>on-device-llm</category><category>android</category><category>rag</category><category>ocr</category><category>release</category></item><item><title>Chatting with scanned documents: on-device OCR (no cloud)</title><link>https://urjalabs.in/blog/on-device-ocr-nativelm/</link><guid isPermaLink="true">https://urjalabs.in/blog/on-device-ocr-nativelm/</guid><description>NativeLM v0.5.0 reads scanned PDFs and photos with on-device OCR, and blends keyword + vector search so exact terms actually get retrieved — all without an image ever leaving the phone.</description><pubDate>Tue, 02 Jun 2026 00:00:00 GMT</pubDate><category>on-device-llm</category><category>android</category><category>ocr</category><category>rag</category><category>vector-search</category><category>privacy</category></item><item><title>The low-end gauntlet: running a local LLM on budget Android phones</title><link>https://urjalabs.in/blog/nativelm-low-end-devices/</link><guid isPermaLink="true">https://urjalabs.in/blog/nativelm-low-end-devices/</guid><description>A local LLM that only runs on flagships isn&apos;t private AI for everyone — it&apos;s a toy for people with expensive phones. Here&apos;s how NativeLM tiers models across devices, why budget phones break in two different ways (RAM and the navigation bar), and what&apos;s still hard about the 4–6 GB tier.</description><pubDate>Mon, 01 Jun 2026 00:00:00 GMT</pubDate><category>on-device-llm</category><category>android</category><category>performance</category><category>memory</category><category>ux</category></item><item><title>Why Android&apos;s ActivityManager lies about RAM — and how litertlm-kmp works around it</title><link>https://urjalabs.in/blog/android-oem-ram-lies/</link><guid isPermaLink="true">https://urjalabs.in/blog/android-oem-ram-lies/</guid><description>Xiaomi, Realme, and OPPO inflate reported RAM with swap-to-flash. Here&apos;s how we detect it and prevent OOM crashes when loading on-device LLMs.</description><pubDate>Mon, 01 Jun 2026 00:00:00 GMT</pubDate><category>on-device-llm</category><category>android</category><category>kotlin-multiplatform</category><category>gemma</category><category>oem</category></item><item><title>Shipping on-device RAG: Building NativeLM for Android</title><link>https://urjalabs.in/blog/on-device-rag-nativelm/</link><guid isPermaLink="true">https://urjalabs.in/blog/on-device-rag-nativelm/</guid><description>How we implemented fully offline document RAG using MediaPipe&apos;s USE-Lite and ObjectBox HNSW vector search to ground Gemma&apos;s chat answers in imported PDFs.</description><pubDate>Mon, 01 Jun 2026 00:00:00 GMT</pubDate><category>on-device-llm</category><category>android</category><category>rag</category><category>vector-search</category><category>gemma</category></item><item><title>Stateful KV-cache sessions for on-device Gemma on Android</title><link>https://urjalabs.in/blog/litertlm-kmp-v0-3-kv-cache-sessions/</link><guid isPermaLink="true">https://urjalabs.in/blog/litertlm-kmp-v0-3-kv-cache-sessions/</guid><description>How litertlm-kmp v0.3 makes multi-turn memory lossless and free — plus what an on-device CPU/GPU/NPU benchmark actually told me.</description><pubDate>Sat, 30 May 2026 00:00:00 GMT</pubDate><category>on-device-llm</category><category>android</category><category>kotlin-multiplatform</category><category>gemma</category></item><item><title>Seeing on-device: multimodal image input for local Gemma</title><link>https://urjalabs.in/blog/nativelm-multimodal-vision/</link><guid isPermaLink="true">https://urjalabs.in/blog/nativelm-multimodal-vision/</guid><description>litertlm-kmp v0.2.4 added vision — attach an image and the local Gemma model reasons over it, on-device. Here&apos;s how image attachments flow through the engine, why we default to the CPU vision backend, and the model gotcha that bites you on init.</description><pubDate>Tue, 26 May 2026 00:00:00 GMT</pubDate><category>on-device-llm</category><category>android</category><category>multimodal</category><category>vision</category><category>kotlin</category></item><item><title>Wrapping Google&apos;s LiteRT-LM into a Kotlin Multiplatform engine</title><link>https://urjalabs.in/blog/litertlm-kmp-engine-architecture/</link><guid isPermaLink="true">https://urjalabs.in/blog/litertlm-kmp-engine-architecture/</guid><description>The engine origin story: how litertlm-kmp turns Google&apos;s LiteRT-LM into a clean KMP library — four core abstractions, a resumable SHA-256 download manager, typed-Kotlin-to-OpenAPI function calling, and the thread discipline that keeps a non-thread-safe native runtime honest.</description><pubDate>Mon, 25 May 2026 00:00:00 GMT</pubDate><category>on-device-llm</category><category>android</category><category>kotlin</category><category>architecture</category><category>kmp</category></item></channel></rss>