Prerequisites
- Bun v1.3 or later
- A chat model — either a local server (llama.cpp, LM Studio) or a cloud API key (Bedrock, Gemini, OpenRouter)
Install and run
Configure deployment settings
.env file controls deployment knobs only (port, log level). Provider settings are managed in the Settings UI.Start the gateway
Configure your chat model
Click the Settings icon in the sidebar, then go to Chat.
- Select a Provider from the dropdown (e.g., llama.cpp, Bedrock, Gemini)
- Enter the Base URL if using a local provider
- Set your API key if using a cloud provider
- Choose a Model
Optional: enable semantic recall
By default, Spaceduck uses keyword search (FTS5) for cross-conversation memory. To enable vector-based semantic recall:- Go to Settings > Memory
- Toggle Semantic recall on
- Select an embedding provider and model
- Click Test to verify the connection
Semantic recall requires a separate embedding model. You can use the same provider as your chat model, or run a dedicated embedding server. See llama.cpp embeddings for a local setup.
Optional: install tools
Browser automation (Playwright)
Browser automation (Playwright)
browser tool.Document scanning (Marker)
Document scanning (Marker)
marker_single is on your PATH, the marker_scan tool is automatically registered. Upload PDFs via the paperclip button in the chat UI.Voice dictation (Whisper)
Voice dictation (Whisper)
whisper is on your PATH, the mic button appears in the chat UI. Hold to record, release to transcribe.Choose your client
Spaceduck supports multiple clients — all connecting to the same gateway.| Client | Best for | How to connect |
|---|---|---|
| Web UI | Default experience | Open http://localhost:3000 |
| Desktop app | Native macOS/Linux/Windows window | See Desktop App |
| CLI | Scripting and automation | See CLI |
| Mobile access | Requires Baileys setup |
What you now have
- A running gateway at
http://localhost:3000 - A chat model connected and streaming responses
- Persistent conversation history in SQLite
- Automatic fact extraction after every turn
- Keyword-based cross-conversation recall (or semantic recall if you enabled it)
