Save anything from any app. Butler organizes it, remembers it, and lives as a little pet on your phone and laptop that can talk to each other.
Self-hosted: your data stays on a server you control.
Quick start Β· Features Β· Screenshots Β· Self-hosting guide Β· Roadmap Β· Contributing
- [2026-10-26] v0.2.0, the first tagged release: a native Android app that works offline, a new Bento-style website in light and dark, collections named by real topic, and Butler's own voice. Release notes β
- [2026-10-23] Connections, recipes and automations. Plug in any MCP server (Zapier, Notion, GitHubβ¦), save instructions as recipes, and run them on a schedule, on new email, or from a webhook. π§©
- [2026-10-22] Control your laptop from your phone, clipboard history, and AI that falls back across Gemini, OpenRouter, Groq and OpenAI. π»
- [2026-10-20] Butler 2.0 begins: save from any app, the Little Butler pet on Android and GNOME, morning brief, price watch, clipboard sync and more. π
Most "save for later" apps are a pile you never open again. Butler is different in three ways:
- It does the sorting. Share a TikTok, a GitHub repo, a screenshot or a recipe link and Butler reads it, writes a title and summary, and files it under what it is actually about. Search by meaning, not just by words, or just ask: "what was that jollof recipe I saved?"
- It lives on your devices. Little Butler peeks from the edge of your phone and laptop screens. Tap it to save, copy, analyze or translate what you're looking at, send it to your other device, or tell it what to do in plain words.
- It's yours. Butler runs on one small server you own (a free cloud VM works). Your saves, files and accounts never sit in someone else's database.
|
|
|
|
Every feature, with its settings, is in docs/features.md. Butler in Telegram: docs/telegram.md.
Phone, dark mode: home, library, recipes and inbox
Library: grouped by real topic, searchable by meaning
Screenshots use sample data.
| Platform | Status | How |
|---|---|---|
| π Web (any browser) | β Ready | The website your server hosts |
| π€ Android 8+ | β Ready | Native app with offline library and the floating pet (guide) |
| π§ Linux (GNOME 46 to 48) | β Ready | GNOME Shell extension (guide) |
| π iPhone / iPad | πΊοΈ Planned | See the roadmap |
| π macOS | πΊοΈ Planned | See the roadmap |
Which feature works on which device: docs/platforms.md. | πͺ Windows 10 and 11 | π§ͺ Built, not yet tried on a real PC | Desktop app with the same pet (guide) |
Butler is self-hosted: you run your own copy on a Linux server with Docker. An Oracle Cloud Always Free VM is enough. You need a domain name you can point at it.
# 1. Get Docker and the code
curl -fsSL https://get.docker.com | sudo sh
git clone https://github.com/Anasabubakar/Butler-2.0.git && cd Butler-2.0/deploy
# 2. Fill in your settings
cp .env.example .env # your domain and a database password
cp butler.env.example butler.env # tokens, password hash, AI keys
openssl rand -hex 32 # run twice: one for BUTLER_TOKEN, one for SESSION_SECRET
docker compose run --rm butler run server/hash-password.ts # paste the result as BUTLER_PASSWORD_HASH
# 3. Start it
docker compose up -d --buildOpen https://butler.yourdomain.com and sign in. Caddy gets the HTTPS certificate on its own.
Then install the apps:
- Android: download
butler-<version>-android.apkfrom the latest release, open it, and enter your server's save URL andBUTLER_TOKEN. Full guide β - Linux (GNOME): download
butler-<version>-gnome-extension.zipfrom the same release, thengnome-extensions install butler-*-gnome-extension.zipand log out and back in. Full guide β - Windows: download
butler-<version>-windows-setup.exefrom the same release, open it (SmartScreen: More info β Run anyway), and enter your server address andBUTLER_TOKEN. Full guide β
The self-hosting guide covers opening ports, automatic deploys from GitHub, running a local AI model instead of a cloud one, connecting Google, backups and restoring.
Butler uses AI for two jobs, set in butler.env:
| Job | Options |
|---|---|
| Organizing saves (titles, summaries, tags, collections) | Anthropic Claude (ANTHROPIC_API_KEY), or a free local model through Ollama (BUTLER_AI=local, slower on a CPU-only server) |
| Talking and seeing (Ask Butler, video notes, search by meaning, Analyze/Solve/Translate) | Google Gemini (GEMINI_API_KEY), falling back to OpenRouter, Groq or OpenAI keys in the order of BUTLER_AI_ORDER |
flowchart LR
subgraph devices[Your devices]
A[π€ Android app<br/>+ floating pet]
G[π§ GNOME pet]
X[πͺ Windows pet]
W[π Website]
end
subgraph server[Your server]
C[Caddy<br/>HTTPS]
S[Butler server<br/>Deno + TypeScript]
P[(PostgreSQL)]
F[(Saved files)]
end
A <--> C
G <--> C
X <--> C
W <--> C
C <--> S
S <--> P
S <--> F
S --> AI[AI providers<br/>Gemini Β· OpenRouter Β· Groq<br/>OpenAI Β· Claude Β· Ollama]
S --> GA[Google<br/>Calendar Β· Gmail Β· Drive]
S --> M[MCP servers<br/>Zapier Β· Notion Β· β¦]
- Devices never talk to each other directly. Each one checks in with your server, which holds messages, reminders and clipboard copies until the right device picks them up. That's how a phone in your pocket and a laptop at home stay in step.
- Saving is instant; thinking happens later. A save is stored at once and organized in the background, so a slow AI model never makes you wait.
- Anything risky asks first. Sending email, running a tool that changes something, or acting on your laptop needs your yes. Saved content and tool replies are treated as data, never as instructions.
| Path | What it is |
|---|---|
server/ |
The Butler server (Deno): saves, library API, sign-in, AI, recipes, devices, and serving the website |
db/migrations/ |
Postgres schema, applied when the server starts |
web/ |
The website (Vite + TypeScript), light and dark |
android/ |
Android app (Kotlin, Jetpack Compose): offline library, Share menu, floating pet |
desktop/gnome/ |
The GNOME Shell pet extension |
desktop/windows/ |
The Windows pet (Electron) |
deploy/ |
Docker Compose for a server: Postgres, Butler, Caddy, backups |
design/ |
Brand guide, logo masters and the Little Butler sprite kit |
tests/ |
Unit tests |
docs/ |
Guides: self-hosting, features, Android |
- Save from any app, AI organizing, search by meaning
- Little Butler pet on Android and GNOME
- Phone and laptop talking: send, clipboard sync, ring, remote control
- MCP connections, recipes and automations
- Native offline Android app
- One-command installer and a setup page, so self-hosting takes minutes
- Signed release APK and an F-Droid listing
- Windows desktop pet (built; first real-PC test pending)
- macOS desktop pet
- iPhone app (Share extension first; iOS doesn't allow a floating pet over other apps)
- "Hey Butler" wake word
- Sign in to MCP servers with OAuth
Ideas and votes are welcome in Issues.
Bug reports, device test results and pull requests are all welcome. Start with CONTRIBUTING.md for setup, tests and how releases are made. Found a security problem? Please follow SECURITY.md instead of opening an issue.
Deno Β· PostgreSQL Β· Caddy Β· Vite Β· Jetpack Compose Β· GNOME Shell Β· Model Context Protocol Β· Ollama Β· Inter and Instrument Serif
Butler's code is free software under the GNU Affero General Public License v3.0. You can use, change and share it. If you run a changed Butler as a service for other people, you have to share your changes with them too.
The Butler 2.0 logos in design/brand/ and the Little Butler character in design/little-butler/ are not covered by that license. They stay Β© Anas Abubakar, all rights reserved. You can use them unchanged to run or talk about Butler, but not for your own product or a fork with a different name.
Made with care by @Anasabubakar and Little Butler.
