A lightning-fast, privacy-first AI assistant that works seamlessly during meetings, interviews, and conversations without anyone knowing.
This is a local-only fork of the open-source Pluely project. The hosted cloud API, license activation, auto-updater, and all telemetry have been removed. It runs entirely against your own configured providers β including built-in support for Ollama and, on macOS Apple Silicon, FluidAudio in-process ASR as the default speech-to-text (no Python server required), with Whisper/Parakeet/Nemotron as advanced local options.
local-parakeet) support live partial transcriptions. Text appears as you speak, not after. FluidAudio streams final text via Rust events but does not expose live partials (text is delivered only when the utterance ends).localhost:11434)localhost:8000) or mlx-audio ASR (localhost:8001, default Parakeet TDT v3)macOS 14 (Sonoma) or later on Apple Silicon for the default FluidAudio STT path. On Intel macOS or other platforms, FluidAudio is unavailable and you must run one of the advanced local STT servers below (or a cloud STT provider).
Node.js v18+
Rust (stable toolchain)
Ollama installed and running
# Pull a model
ollama pull llama3.2
(Optional, advanced STT only) Python 3.12 for local STT servers. Required only if you want to use local-whisper, local-parakeet, or local-nemotron instead of the built-in FluidAudio default.
# For faster-whisper STT (all platforms)
python3.12 -m venv .whisper-venv
.whisper-venv/bin/pip install faster-whisper fastapi uvicorn python-multipart
# For mlx-audio STT + parakeet-mlx streaming (Apple Silicon only; supports Parakeet TDT v3 / Nemotron)
python3.12 -m venv .mlx-asr-venv
.mlx-asr-venv/bin/pip install "git+https://github.com/Blaizzy/mlx-audio.git" parakeet-mlx fastapi uvicorn python-multipart websockets requests soxr librosa
# Clone
git clone <your-repo-url>
cd assistant
# Install frontend dependencies
npm install
# Run in development
npm run tauri dev
# Build for production
npm run tauri build
ollama serve
npm run tauri dev).Cmd+Shift+D / Ctrl+Shift+D).FluidAudio runs in-process via the fluidaudio-rs Rust crate and is the default STT provider on macOS 14+ Apple Silicon. It uses CoreML inference and requires no Python server, venv, or external binary. Select local-fluidaudio in Dev Space β STT Providers and it works immediately.
How it works: FluidAudio uses a batch STT path. When VAD detects the end of an utterance, the captured WAV is sent to the Rust stt_transcribe_speech command and the final text is returned. It does not expose live partial transcriptions while you speak. For live partials, use local-parakeet (advanced, requires the mlx-audio server) instead.
. .whisper-venv/bin/activate
python3.12 whisper_server.py --model Systran/faster-whisper-large-v3
Serves at http://localhost:8000/v1/audio/transcriptions.
Available models: Systran/faster-whisper-tiny, base, small, medium, large-v2, large-v3.
. .mlx-asr-venv/bin/activate
python3.12 mlx_asr_server.py
Serves batch transcription at http://localhost:8001/v1/audio/transcriptions and
live streaming at ws://localhost:8001/v1/audio/stream.
Model: mlx-community/parakeet-tdt-0.6b-v3 (600M, optimized for English).
Real-time streaming β when the local-parakeet STT provider is selected in
Dev Space, the app opens a WebSocket to the server and sends audio chunks while
you speak. Partial transcriptions appear in real-time (within ~1s) and the final
text is confirmed when speech ends. The streaming uses parakeet_mlx's
transcribe_stream API with cache-aware local attention.
The server uses a dual model loader:
parakeet_mlx (supports both batch and streaming)mlx_audio.stt (batch only)Non-Parakeet models are rejected on the streaming endpoint with an error message.
The chunk interval is configurable in the VAD settings (default: 1000ms). Lower values give more responsive partials at the cost of more IPC traffic.
Ollama, OpenAI, Claude, Gemini, Grok, Groq, Mistral, Cohere, Perplexity, OpenRouter, LM Studio β plus any custom provider via curl.
LM Studio: run LM Studio's local server on port 1234, then select the
lm-studioprovider in Dev Space. Set MODEL to the loaded model identifier and API_KEY to any non-empty string (e.g.lm-studio).
Local FluidAudio (macOS CoreML, default), Local Parakeet TDT v3 (MLX), Local Nemotron (MLX), Local Whisper (faster-whisper), OpenAI Whisper, Groq Whisper, ElevenLabs, Google, Deepgram, Azure, Speechmatics, Rev.ai, IBM Watson β plus any custom provider via curl.
Tip: FluidAudio is the default local STT on macOS Apple Silicon (no server needed; batch transcription per utterance). Parakeet TDT v3 needs the mlx-audio server but supports real-time streaming partials. Nemotron supports 40 languages but batch-only in this setup.
src/
components/ # Shared React components
config/ # Constants: providers, storage keys, shortcuts
contexts/ # React context (app state)
hooks/ # Custom hooks
layouts/ # Page layouts
lib/ # Core logic: AI/STT functions, storage, database
pages/ # Route pages
routes/ # React Router config
types/ # TypeScript types
src-tauri/
src/ # Rust source (window, capture, shortcuts, speaker, STT/fluidaudio)
capabilities/ # Tauri permissions (HTTP scopes, plugin permissions)
tauri.conf.json # Tauri config
Cargo.toml # Rust dependencies (includes fluidaudio-rs)
See AGENTS.md for detailed architecture notes.
npx tsc --noEmit # Typecheck
npm run build # Frontend build
cargo check --manifest-path src-tauri/Cargo.toml # Rust check
GPL-3.0 β inherited from the original Pluely project.
A lightning-fast, privacy-first AI assistant that works seamlessly during meetings, interviews, and conversations without anyone knowing.
This is a local-only fork of the open-source Pluely project. The hosted cloud API, license activation, auto-updater, and all telemetry have been removed. It runs entirely against your own configured providers β including built-in support for Ollama and, on macOS Apple Silicon, FluidAudio in-process ASR as the default speech-to-text (no Python server required), with Whisper/Parakeet/Nemotron as advanced local options.
local-parakeet) support live partial transcriptions. Text appears as you speak, not after. FluidAudio streams final text via Rust events but does not expose live partials (text is delivered only when the utterance ends).localhost:11434)localhost:8000) or mlx-audio ASR (localhost:8001, default Parakeet TDT v3)macOS 14 (Sonoma) or later on Apple Silicon for the default FluidAudio STT path. On Intel macOS or other platforms, FluidAudio is unavailable and you must run one of the advanced local STT servers below (or a cloud STT provider).
Node.js v18+
Rust (stable toolchain)
Ollama installed and running
# Pull a model
ollama pull llama3.2
(Optional, advanced STT only) Python 3.12 for local STT servers. Required only if you want to use local-whisper, local-parakeet, or local-nemotron instead of the built-in FluidAudio default.
# For faster-whisper STT (all platforms)
python3.12 -m venv .whisper-venv
.whisper-venv/bin/pip install faster-whisper fastapi uvicorn python-multipart
# For mlx-audio STT + parakeet-mlx streaming (Apple Silicon only; supports Parakeet TDT v3 / Nemotron)
python3.12 -m venv .mlx-asr-venv
.mlx-asr-venv/bin/pip install "git+https://github.com/Blaizzy/mlx-audio.git" parakeet-mlx fastapi uvicorn python-multipart websockets requests soxr librosa
# Clone
git clone <your-repo-url>
cd assistant
# Install frontend dependencies
npm install
# Run in development
npm run tauri dev
# Build for production
npm run tauri build
ollama serve
npm run tauri dev).Cmd+Shift+D / Ctrl+Shift+D).FluidAudio runs in-process via the fluidaudio-rs Rust crate and is the default STT provider on macOS 14+ Apple Silicon. It uses CoreML inference and requires no Python server, venv, or external binary. Select local-fluidaudio in Dev Space β STT Providers and it works immediately.
How it works: FluidAudio uses a batch STT path. When VAD detects the end of an utterance, the captured WAV is sent to the Rust stt_transcribe_speech command and the final text is returned. It does not expose live partial transcriptions while you speak. For live partials, use local-parakeet (advanced, requires the mlx-audio server) instead.
. .whisper-venv/bin/activate
python3.12 whisper_server.py --model Systran/faster-whisper-large-v3
Serves at http://localhost:8000/v1/audio/transcriptions.
Available models: Systran/faster-whisper-tiny, base, small, medium, large-v2, large-v3.
. .mlx-asr-venv/bin/activate
python3.12 mlx_asr_server.py
Serves batch transcription at http://localhost:8001/v1/audio/transcriptions and
live streaming at ws://localhost:8001/v1/audio/stream.
Model: mlx-community/parakeet-tdt-0.6b-v3 (600M, optimized for English).
Real-time streaming β when the local-parakeet STT provider is selected in
Dev Space, the app opens a WebSocket to the server and sends audio chunks while
you speak. Partial transcriptions appear in real-time (within ~1s) and the final
text is confirmed when speech ends. The streaming uses parakeet_mlx's
transcribe_stream API with cache-aware local attention.
The server uses a dual model loader:
parakeet_mlx (supports both batch and streaming)mlx_audio.stt (batch only)Non-Parakeet models are rejected on the streaming endpoint with an error message.
The chunk interval is configurable in the VAD settings (default: 1000ms). Lower values give more responsive partials at the cost of more IPC traffic.
Ollama, OpenAI, Claude, Gemini, Grok, Groq, Mistral, Cohere, Perplexity, OpenRouter, LM Studio β plus any custom provider via curl.
LM Studio: run LM Studio's local server on port 1234, then select the
lm-studioprovider in Dev Space. Set MODEL to the loaded model identifier and API_KEY to any non-empty string (e.g.lm-studio).
Local FluidAudio (macOS CoreML, default), Local Parakeet TDT v3 (MLX), Local Nemotron (MLX), Local Whisper (faster-whisper), OpenAI Whisper, Groq Whisper, ElevenLabs, Google, Deepgram, Azure, Speechmatics, Rev.ai, IBM Watson β plus any custom provider via curl.
Tip: FluidAudio is the default local STT on macOS Apple Silicon (no server needed; batch transcription per utterance). Parakeet TDT v3 needs the mlx-audio server but supports real-time streaming partials. Nemotron supports 40 languages but batch-only in this setup.
src/
components/ # Shared React components
config/ # Constants: providers, storage keys, shortcuts
contexts/ # React context (app state)
hooks/ # Custom hooks
layouts/ # Page layouts
lib/ # Core logic: AI/STT functions, storage, database
pages/ # Route pages
routes/ # React Router config
types/ # TypeScript types
src-tauri/
src/ # Rust source (window, capture, shortcuts, speaker, STT/fluidaudio)
capabilities/ # Tauri permissions (HTTP scopes, plugin permissions)
tauri.conf.json # Tauri config
Cargo.toml # Rust dependencies (includes fluidaudio-rs)
See AGENTS.md for detailed architecture notes.
npx tsc --noEmit # Typecheck
npm run build # Frontend build
cargo check --manifest-path src-tauri/Cargo.toml # Rust check
GPL-3.0 β inherited from the original Pluely project.