End state you’re aiming for: an open source Notion AI workspace on your own server, AppFlowy v0.12.5 desktop syncing to it, and a local Ollama model handling AI so no prompts leave your machine. This guide walks backwards through the commands – desktop first, then the Cloud backend, then the local AI layer.
AppFlowy is built with Flutter and Rust, AGPL-3.0 licensed, and positioned as the leading open source Notion alternative. If you’ve ever wanted Notion without the SaaS lock-in, this is the closest thing that actually ships a working self-hosted backend.
System requirements (the real ones)
Two very different requirement sets exist – desktop client vs. full self-hosted server. Most tutorials blur this.
| Component | Minimum | Recommended |
|---|---|---|
| Desktop client | Any modern macOS / Windows / Linux | 4 GB RAM, SSD |
| Self-host VPS | 2 vCPU, 4 GB RAM, 20 GB disk | 4 vCPU, 8 GB RAM, 40 GB disk |
| Docker | Engine 24.0+, Compose 2.20+ | Latest stable |
| Local AI (Ollama) | macOS M1+, Windows 10+, or Linux; 8 GB RAM for 7B models | 16 GB RAM + GPU for 13B+ |
| Android | Android 10+, ARM64 only | – |
The VPS minimums – 2 vCPUs, 4 GB RAM, 20 GB storage – come from community deployment reports (as of mid-2025; this may shift as the stack grows). The full stack actually burns 2-4 GB RAM across PostgreSQL, Redis, MinIO, GoTrue, and the API combined, plus about 1 GB on disk for the application itself. The Android row is easy to miss: ARMv7 is not supported, per the official compatibility notes. Older budget phones can’t run it.
Step 1: Install the desktop client (v0.12.5)
Straight from GitHub. AppFlowy 0.12.5 shipped 2026-06-23, following v0.12.4 which revamped row page comments with notifications, added full row page comment mode, improved find-and-replace, and fixed Kanban board column colors not persisting.
# macOS (Apple Silicon)
curl -LO https://github.com/AppFlowy-IO/AppFlowy/releases/download/0.12.5/AppFlowy-0.12.5-macos-arm64.zip
unzip AppFlowy-0.12.5-macos-arm64.zip -d /Applications/
# Linux (AppImage)
wget https://github.com/AppFlowy-IO/AppFlowy/releases/download/0.12.5/AppFlowy-0.12.5-linux-x86_64.AppImage
chmod +x AppFlowy-0.12.5-linux-x86_64.AppImage
./AppFlowy-0.12.5-linux-x86_64.AppImage
Windows: download the .exe from the same releases page. If SmartScreen blocks it, click “More info” → “Run anyway.”
Step 2: Self-host AppFlowy Cloud with Docker
The desktop app works standalone. Multi-device sync needs the Cloud backend. It’s not one service – it’s five.
PostgreSQL, Redis, MinIO, GoTrue, and the AppFlowy Cloud API all run as separate containers (per the official self-hosting docs). Docker wraps them, but you’re still responsible for the wiring. Current backend version: AppFlowy Cloud 0.9.46 (released 2026-04-26).
# On your VPS (Ubuntu 22.04+ recommended)
sudo apt update && sudo apt upgrade -y
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
sudo usermod -aG docker $USER
# log out and back in for the group change
docker --version # expect 24.0+
docker compose version # expect 2.20+
# Pull the Cloud repo
git clone https://github.com/AppFlowy-IO/AppFlowy-Cloud.git
cd AppFlowy-Cloud
cp deploy.env .env
# edit .env - see next section
docker compose up -d
That’s the happy path. It rarely runs clean on the first try.
Step 3: The .env configuration that actually works
Startup failures cluster around five .env values. Miss any of them and containers restart forever – the logs are rarely obvious about why.
APPFLOWY_BASE_URL– must match your domain (e.g.https://appflowy.yourdomain.com). WebSocket URLs derive from this.APPFLOWY_DATABASE_URL– Postgres connection string. Wrong hostname here is the #1 startup failure.GOTRUE_JWT_SECRET– must be at least 32 characters. Reuse it consistently across services.MINIO_ROOT_USER/MINIO_ROOT_PASSWORD– must match theAPPFLOWY_S3_*values further down the file.APPFLOWY_MAILER_*– SMTP for magic-link auth. Skip this and accounts can’t verify.
JWT_SECRET under 32 characters? Restart loop. Wrong or missing MinIO bucket? API crashes on first upload – the Docker Compose doesn’t auto-provision it, so create it manually via the MinIO console on port 9001 before AppFlowy Cloud writes its first attachment. GoTrue logs throwing database migration errors? That’s expected on first run: turns out GoTrue auto-creates the auth schema, so wait 30 seconds and check again before assuming a real failure.
The hyphen trap: Use
docker compose– two words, no hyphen. The deployment docs explicitly warn thatdocker-composewith the hyphen may not be supported on modern Docker installations. It produces cryptic container linkage errors rather than a clean failure message.
Step 4: Wire up local AI with Ollama
This is where AppFlowy stops being a Notion clone.
Local AI has been free for everyone since v0.8.7 (March 2025), with Ollama wired in so your LLM runs entirely on your machine. It’s matured across the 0.9-0.12 releases.
# Install Ollama (macOS/Linux)
curl -fsSL https://ollama.com/install.sh | sh
# Pull a model AppFlowy officially supports
ollama pull llama3.1
# or, if you have the RAM:
ollama pull deepseek-r1
# Confirm it's serving on the default port
curl http://localhost:11434/api/tags
Then in AppFlowy desktop: Settings → AI Settings → toggle Local AI on → paste the Ollama endpoint. Supported models: Llama 3.1, DeepSeek R1, Gemma 3, Phi4 – all good for text generation, code generation, and summarization.
The marketing pages skip this entirely: text-to-image is not available in AppFlowy Local AI. Chat, summarization, and writing assistance are what actually work today. Image generation routes through cloud providers only.
Verify the install
Three checks. Do them in order.
- Cloud health:
curl https://your-domain/api/health– expect 200 with a JSON status body. - Desktop sync: Settings → Cloud Settings → paste your self-hosted URL → sign up. Magic-link email arriving means GoTrue + SMTP are wired correctly.
- Local AI: Open any doc, type
/, pick AI Writer, ask it something. Turn off Wi-Fi first to confirm the response isn’t sneaking out to a cloud provider.
The AGPL trap nobody warns you about
Internal use – replacing Notion for your team – zero legal risk. But if you modify AppFlowy’s codebase and embed it in a customer-facing web app, the AGPL-3.0 network clause activates. You’re then legally required to open-source your entire proprietary stack. That’s not a hypothetical reading of the license; it’s the explicit intent of AGPL-3.0, and community legal analysis (opentechhub.io) confirms it applies here.
If you’re building a SaaS product on top of AppFlowy, get legal advice before you ship. The license is the constraint – not the technology.
Common errors, real fixes
These cover the majority of first-deploy failures, based on community reports across r/selfhosted and deployment guides:
- Cloud container in restart loop: Check that PostgreSQL and Redis are “healthy” – not just “running” – via
docker compose ps. AppFlowy Cloud won’t start until both pass their health checks. - Login redirects loop: WebSocket traffic isn’t being forwarded. If you’re using an external reverse proxy (Nginx, Caddy, Traefik) instead of the bundled one, forward
UpgradeandConnectionheaders on the/wspath. - Mobile edits vanish: Early 2025 releases dropped edits on spotty connections. The 0.10.x and 0.11.x branches resolved most of this. Still seeing it on 0.12.x? File an issue with logs – it’s rare enough now to be a real bug, not a known limitation.
Upgrade and uninstall
Desktop upgrades: download the new release, replace the binary. Done.
Cloud upgrades are different – database migrations run against your live Postgres data. Pull the latest, bring the stack down, run migrations per the official upgrade guide, then bring it back up. Test in staging first if you have thousands of documents; migrations can be slow. To fully uninstall: docker compose down -v removes containers and volumes (destructive – back up first), then delete the AppFlowy-Cloud directory.
FAQ
Do I need to self-host to use the AI features?
No – install the desktop app, connect Ollama on the same machine, done.
How does AppFlowy compare to AFFiNE or Docmost for self-hosting?
Different tools for different needs. AFFiNE centers on whiteboards and canvas-based editing. Docmost is web-first and built around wikis. AppFlowy is the one that most closely mirrors Notion’s document-plus-database model – and it’s the only one of the three with a built-in local AI story via Ollama. Which you pick depends on whether your team actually uses databases and grid views (AppFlowy), needs collaborative whiteboards (AFFiNE), or wants a clean wiki with no extras (Docmost). Hardware comparisons aren’t readily available across all three, so check each project’s docs for current specs before committing.
Is my data really local?
Depends on what you turn on. Desktop app alone: yes, everything lives in a local SQLite store on your machine. Add the self-hosted Cloud: data moves to your server, not AppFlowy’s. Add Local AI: prompts stay on-device. The one exception – if you deliberately configure a cloud AI provider like OpenAI in Settings → AI Settings, those prompts go to OpenAI. The default Ollama path doesn’t touch the internet at all, which is the whole point.
Pick a spare server, run the Docker Compose above, and watch which of these errors you hit first. That failure is your actual starting point.