Two surfaces — Chat for conversation, Imagine for images and video. Local models, custom endpoints, web search, deep research, agents, artifacts. No backend, no account, no telemetry.
EchoFlow is a native Android app for talking to AI models — your way. There's no EchoFlow server sitting in the middle: you bring your own API keys, point it at your own Ollama box, or skip the network entirely and run a model on your phone. Nothing you type gets logged anywhere except your own device.
It started as a chat app and grew into a small workspace: web search, background research, structured data extraction, a controllable browser, generated documents, and a few ways to make multiple models work together.
| Nothing leaves your control | No EchoFlow backend, no account, no analytics. Conversations, keys, and settings live on your device. |
| Any model you want | OpenRouter, OpenAI, Claude, Gemini, Cerebras, Sarvam, a local Ollama server, any OpenAI-compatible endpoint, or fully offline on-device models. |
| More than chat | Web search, deep research with citations, structured data extraction, browser automation, and document generation, built around whichever model you're using. |
| Models working together | Have one model consult a stronger one mid-answer, run several models in parallel and let a judge synthesize the results, or hand a model its own tools and a worker to delegate to. |
1. Install the APK from Releases.
2. Open Settings and connect a model:
- Models -> OpenRouter & on-device
- Custom -> OpenAI, Claude, Gemini, Cerebras, Sarvam, xAI
- Anything else -> Echo Labs -> Custom API Endpoint
3. Start chatting.
No keys are required just to install and look around — on-device models work fully offline.
| Provider | Where to set it up | Attachments |
|---|---|---|
| OpenRouter | Settings → Models | Images/PDFs, depending on the model |
| OpenAI · Claude · Gemini · Cerebras · xAI | Settings → Custom | Images and PDFs (Cerebras: Gemma-family images only) |
| Sarvam | Settings → Custom → Sarvam | Text chat with Sarvam 105B; Saaras v4 dictation |
| Ollama (local/LAN) | Echo Labs → Custom API Endpoint → Ollama API | Per-model toggle |
| OpenAI-compatible (LM Studio, Jan, vLLM, LocalAI…) | Echo Labs → Custom API Endpoint | Per-model toggle |
| On-device (LiteRT / MediaPipe) | Settings → Models → On-device | .litertlm models only |
Enable Sarvam and save your API key under Settings → Custom → Sarvam. sarvam-105b is preselected for the chat model picker. To use its speech recognition, choose Saaras v4 under Settings → Dictation. Dictation uses the selected provider’s key independently of the chat model; longer recordings are split to fit Sarvam’s 30-second request limit.
Web search (Exa, Parallel, Firecrawl) and OpenRouter's own server-side search work across every provider above except where noted.
Chat — streaming responses, markdown, code highlighting, reasoning traces, citations, and model switching mid-conversation. Chat and Imagine keep separate histories; conversations that predate the split stay in Chat.
Web search — toggle it per message or set a default. OpenRouter's search only works with OpenRouter models; Exa, Parallel, and Firecrawl work with anything.
Deep research — a background mode for questions that need real investigation. Runs notify you of progress, survive interruption, and come back as a cited report with sections and tables.
Data Agent — point it at a page or task and get structured output (prices, specs, contacts) instead of prose, with a visible credit budget.
Browser Flow — a live browser session that chat can drive across multiple turns, with confirmation prompts before it visits a new domain or sends anything.
Artifacts — generate and revise self-contained pages, reports, and documents, versioned as you iterate.
Imagine — a separate surface for making things. Describe an image and edit it conversationally ("make the sky purple"), or describe a short clip and get it back as video. Shape, model and audio live beside the prompt; results are presented as a contact sheet rather than a chat log. Rendering a clip takes minutes, so it keeps going with the app closed and picks itself back up if the app is killed mid-render — you choose the shape, the model chooses the length. See docs/modes.md and docs/video-generation.md.
Echo Adviser — let your model call in a stronger or more specialized model mid-answer when it's stuck.
Echo Fusion — run several models on the same prompt and have a judge model compare and merge their answers.
Echo Agents — give a model its own search/fetch tools plus a cheaper worker model to delegate sub-tasks to.
EchoFlow can run models entirely offline using LiteRT-LM and MediaPipe:
- A curated catalog of mobile-ready models
- Hugging Face search for
.taskand.litertlmfiles - Importing your own model files
- Token support for gated Hugging Face models
- No internet connection or API key required once a model is downloaded
Kotlin and Jetpack Compose (Material 3 Expressive), targeting Android 24+. Networking via OkHttp/Retrofit, persistence via Room, on-device inference via LiteRT-LM and MediaPipe GenAI, search and research via Exa/Parallel/Firecrawl/OpenRouter, markdown rendering via a custom Compose renderer.
app/src/main/java/com/echoflow
├── data # Room entities/DAOs, provider services, settings, research, agents, browser, artifacts, image/video generation, local models
├── ui # ViewModels and feature state controllers
├── ui/components # cards, reports, markdown, browser/data/research result UI
├── ui/screens # chat/, imagine/, projects/, settings/ feature packages
└── ui/theme # color, shape, motion
See Architecture for feature ownership and Contributing for setup and verification.
./gradlew assembleDebugNo keys are needed to build — everything is configured at runtime in Settings.
MIT — see LICENSE.txt.