A powerful desktop chat application that connects to multiple LLM providers, offering voice interaction, real-time streaming, and side-by-side response comparison — all from a single interface.
- OpenAI — GPT-4o, GPT-4o Mini, GPT-4 Turbo, o1, o1 Mini
- Anthropic — Claude Sonnet 4, Claude Opus 4, Claude 3.5 Haiku
- Google Gemini — Gemini 2.5 Flash, Gemini 2.5 Pro, Gemini 2.0 Flash Lite
- DeepSeek — DeepSeek Chat, DeepSeek Reasoner
- Groq — Llama 3.3 70B, Llama 3.1 8B, Mixtral 8x7B, Gemma 2 9B
- Mistral AI — Mistral Large, Small, Medium, Codestral
- xAI (Grok) — Grok 3, Grok 3 Mini, Grok 2
- Perplexity — Sonar Pro, Sonar, Sonar Reasoning Pro/Standard
- Ollama (Local) — Llama 3.1/3.2, Mistral, CodeLlama, Phi-3, Gemma 2, Qwen 2.5, DeepSeek R1
- LM Studio (Local) — Any locally loaded model
- Real-time streaming responses with markdown rendering and syntax highlighting
- Encrypted API key storage via Electron safeStorage
- Single model — select one model chip for normal chat
- Multi-model comparison — select 2+ models to see side-by-side responses with analysis
- Natural language routing — say "ask Gemini and Claude about quantum computing" and the app automatically detects the intent, selects the providers, and runs the comparison
- Side-by-side response panels with latency metrics
- Automated analysis: differences, commonalities, contrasts
- Merged summary combining the best of all responses
- All comparison data persisted to database
- Always-on live mode — Gemini Live / ChatGPT Voice style continuous conversation
- Voice Activity Detection (VAD) — automatically detects when you start and stop speaking
- Interruption handling — speak during AI response to interrupt, just like a real conversation
- Mute button — mute mic without stopping the session
- Push-to-talk — alternative to always-on mode
- Voice typing — dictate into the text input with real-time transcription preview
- Speak responses toggle — AI reads responses aloud via OpenAI TTS or browser speech
- Configurable sensitivity — adjust silence threshold and VAD sensitivity for your environment
- Powered by OpenAI Whisper API (STT) and OpenAI TTS / browser SpeechSynthesis (TTS)
- All conversations saved to local SQLite database
- Sidebar with search and date-grouped history (Today, Yesterday, This Week, Older)
- Auto-generated conversation titles
- Supports chat, voice, and comparison conversation modes
- Dark and light themes with smooth transitions
- Custom title bar with sidebar toggle
- Keyboard shortcuts (Ctrl+N new chat, Ctrl+B sidebar, Ctrl+1/2 views, Ctrl+Shift+T theme)
- Markdown rendering with syntax-highlighted code blocks and copy button
- Streaming typewriter animation with loading indicators
- Responsive layout with collapsible sidebar
| Layer | Technology |
|---|---|
| Framework | Electron + React 18 |
| Language | TypeScript (strict mode) |
| Styling | Tailwind CSS v4 |
| State | Zustand |
| Database | SQLite via better-sqlite3 |
| Voice STT | OpenAI Whisper API |
| Voice TTS | OpenAI TTS API + browser SpeechSynthesis fallback |
| LLM SDKs | openai (also used for DeepSeek, Groq, Mistral, xAI, Perplexity, Ollama, LM Studio), @anthropic-ai/sdk, @google/generative-ai |
| Bundler | Webpack (Electron Forge) |
| Packaging | Electron Forge (Squirrel for Windows, DMG for macOS) |
| CI/CD | GitHub Actions (Windows + macOS builds) |
Pre-built installers are automatically generated via GitHub Actions on every push to main.
- Go to the Actions tab in this repository
- Click the latest successful "Build & Package" workflow run (green ✓)
- Scroll to the Artifacts section at the bottom of the run page
- Download for your platform:
| Artifact | Platform | Installer |
|---|---|---|
| AnyLLMChat-Windows | Windows 10/11 | .exe (Squirrel installer) |
| AnyLLMChat-macOS | macOS 12+ | .dmg disk image |
Windows: SmartScreen may warn — click "More info" → "Run anyway" (app is not code-signed).
macOS: Gatekeeper may block — go to System Settings → Privacy & Security → "Open Anyway".
# Clone the repository
git clone https://github.com/jaimalleshk/AnyLLMChat.git
cd AnyLLMChat
# Install dependencies (requires Node.js 18+)
npm install
# Run in development mode
npm start
# Or build installer for your platform
npm run make
# Output: out/make/squirrel.windows/x64/ (Windows) or out/make/ (macOS)Windows build requires: Visual Studio Build Tools with "Desktop development with C++" workload.
macOS build requires: Xcode Command Line Tools (
xcode-select --install).
- Launch the app
- Open Settings — click the gear icon in the sidebar, or press Ctrl+, (Windows) / Cmd+, (macOS)
- Enter API keys for your preferred providers:
| Provider | Get API Key |
|---|---|
| OpenAI | https://platform.openai.com/api-keys |
| Anthropic | https://console.anthropic.com/settings/keys |
| Google Gemini | https://aistudio.google.com/apikey |
| DeepSeek | https://platform.deepseek.com/api_keys |
| Groq | https://console.groq.com/keys |
| Mistral AI | https://console.mistral.ai/api-keys |
| xAI (Grok) | https://console.x.ai/ |
| Perplexity | https://www.perplexity.ai/settings/api |
- For local LLMs: Install Ollama or LM Studio, then enter
ollamaorlmstudioas the API key - Keys are encrypted and stored locally via Electron safeStorage
- Voice chat requires an OpenAI API key (for Whisper STT and TTS)
Detailed installation guide: See docs/INSTALL.md for platform-specific instructions, local LLM setup, voice configuration, and troubleshooting.
src/
main/ # Electron main process
db/ # SQLite database, migrations, repositories
llm/ # LLM provider implementations, orchestrator, comparison engine
voice/ # Whisper STT + OpenAI TTS wrappers
ipc/ # IPC handlers (chat, settings, voice, comparison)
renderer/ # React UI
components/ # Chat, Voice, Settings, Layout, Common components
hooks/ # useChat, useVoice, useComparison, useConversations, useSettings
stores/ # Zustand stores (chat, voice, comparison, settings, UI)
lib/ # Intent detection, utilities
shared/types/ # Shared TypeScript interfaces
- Main process handles all API calls — API keys never reach the renderer process
- IPC streaming —
invoke/handlefor request-response,webContents.sendfor streaming chunks - Zustand with selectors — individual property subscriptions to prevent re-render cascades
- Meta-prompt comparison — LLM responses are analyzed by sending all outputs to a provider with a structured analysis prompt, producing higher quality diffs than algorithmic text comparison
| Shortcut | Action |
|---|---|
| Ctrl+N | New chat |
| Ctrl+B | Toggle sidebar |
| Ctrl+1 | Chat view |
| Ctrl+2 | Voice view |
| Ctrl+3 | Settings |
| Ctrl+, | Settings |
| Ctrl+Shift+T | Toggle dark/light theme |
GitHub Actions builds Windows (.exe) and macOS (.dmg) installers on demand (manual trigger).
- Workflow:
.github/workflows/build.yml - Trigger: Manual only — go to Actions tab → "Build & Package" → "Run workflow"
- Platform options: Windows only, macOS only, or Both
- Artifacts: Download from Actions tab → latest run → Artifacts section (retained 14 days)
- macOS builds use 10× GitHub Actions minutes — build only when needed
- Single LLM chat with OpenAI, Anthropic, and Google Gemini
- Multi-LLM comparison with side-by-side response panes and analysis (differences, commonalities, merged summary)
- Live voice chat with VAD speech detection, Whisper transcription, and TTS responses
- Speak/Pause/Stop controls on all responses (chat + comparison panes)
- Conversation history with search and auto-generated titles
- API key management with encrypted storage
- Live voice chat has occasional feedback looping — after AI speaks, residual audio from the speaker can be picked up by the mic and re-submitted. Cooldown and buffer flushing mitigations are in place but not fully resolved.
- Native SpeechRecognition (browser API) does not work in Electron; Whisper API is required for all voice transcription.
- Web interface for browser access
- Mobile apps (iOS/Android) via Capacitor
- Additional LLM providers as they become available
| Document | Description |
|---|---|
| docs/ARCHITECTURE.md | High-level architecture, data flows, file-by-file guide, design decisions |
| docs/INSTALL.md | Download, install, setup, provider configuration, troubleshooting |
Built with Electron, React, and TypeScript.