Skip to content

Deploy AnythingLLM v1.16.1: Chat with PDFs Open Source

Install AnythingLLM v1.16.1 for private chat with PDFs open source. Docker commands, AVX2 fix, Ollama host path, silent Windows flags, and cleanup steps.

6 min readIntermediate

Skip the 70-line LangChain recipe. AnythingLLM v1.16.1 (released 27 Aug 2026) already bundles RAG, workspaces, and agents. Your job is simpler and meaner: get the container or Desktop binary up without wiping storage on the first restart.

Docker when you need a browser service or multi-user access. Desktop when you want one machine, one user, local models. Pin sources as you go: GitHub (MIT), anythingllm.com/download, docs.anythingllm.com.

System requirements before you pull anything

Per AnythingLLM’s Docker system-requirements docs, the app is light. The hard gate on x86 is AVX2: default LanceDB was built against Haswell-era instructions. ARM builds (Apple Silicon, Graviton, Pi) skip that check.

Setup RAM CPU Disk
Docker (cloud APIs / light RAG) 2 GB min 2-core + AVX2 5 GB (10 GB cloud tip)
Desktop + local LLM ~16 GB recommended 8-core; GPU optional on Windows; M-series preferred on Mac App + model size

Linux check: lscpu | grep -o avx2. Empty? LanceDB will die on load. Proxmox/QEMU guests: CPU type host, or the flag stays masked.

Where to get AnythingLLM v1.16.1

:latest tracks moving commits. Version tags match GitHub releases when you care about reproducibility.

  • Docker Hub:mintplexlabs/anythingllm:v1.16.1 (amd64/arm64)
  • Desktop: Windows x64/ARM exe, macOS Apple Silicon/Intel dmg, Linux AppImage from the download hub
  • macOS Homebrew:brew install --cask anythingllm
  • Linux script:curl -fsSL https://cdn.anythingllm.com/latest/installer.sh -o installer.sh

Desktop = single-user plus a built-in local LLM path. Docker adds multi-user mode, embeddable widgets, password protection, and white-label options – that is the team / always-on PDF chat lane (installation overview docs).

Install: Docker path for chat with PDFs open source

Official run commands mount storage on the host. No volume → every restart wipes workspaces and embeddings. That is the whole game.

# Linux / macOS
docker pull mintplexlabs/anythingllm:v1.16.1

export STORAGE_LOCATION=$HOME/anythingllm && 
mkdir -p $STORAGE_LOCATION && 
touch "$STORAGE_LOCATION/.env" && 
docker run -d --name anythingllm -p 3001:3001 
 --cap-add SYS_ADMIN 
 -v ${STORAGE_LOCATION}:/app/server/storage 
 -v ${STORAGE_LOCATION}/.env:/app/server/.env 
 -e STORAGE_DIR="/app/server/storage" 
 mintplexlabs/anythingllm:v1.16.1

Windows PowerShell: set $env:STORAGE_LOCATION="$HOMEDocumentsanythingllm", create the folder and empty .env, then the same -v and --cap-add SYS_ADMIN pattern. SYS_ADMIN is required for Puppeteer webpage scraping in the collector.

On Linux, add --add-host=host.docker.internal:host-gateway when you need the host gateway alias for Ollama or other host-side model servers. Use a named container – not --rm – so upgrades are stop/rm/re-run.

Desktop install (quick alternate)

Windows: Current User only. All-users installs are unsupported and break paths. As of v1.16.1 (release notes): silent deploy with .AnythingLLMDesktop.exe /S skips the ~2GB Meeting Assistant model; /S /DOWNLOAD_MODEL=yes pulls it. Headless uninstall flags landed in the same release, plus collapsible agent chain-of-thought UI and Native Foundry Local SDK on Windows.

macOS: correct dmg (Apple Silicon vs Intel), drag to Applications. Linux: run installer.sh (may prompt for an AppArmor rule), then ./AnythingLLMDesktop.AppImage.

Funny how “private PDF chat” posts still treat the installer as the boring bit and the toy LangChain loop as the main event. The boring bit is where the data actually lives.

First-time configuration that actually chats with a PDF

Open http://localhost:3001 (Docker) or the Desktop window.

  1. Finish the setup wizard – cloud key, or Ollama / LM Studio / local.
  2. Ollama on the host + AnythingLLM in Docker: never http://127.0.0.1:11434 from inside the container. Use http://host.docker.internal:11434 on Docker Desktop; on Linux try http://172.17.0.1:11434 or the --add-host flag above (HOW_TO_USE_DOCKER + common community ECONNREFUSED reports).
  3. Create a workspace (e.g. contracts).
  4. Upload PDFs under workspace documents, move them into the workspace, wait for embed.
  5. Chat. Citations should point at those chunks.

Pro tip: One workspace per topic. A 200-page policy binder mixed with random invoices dilutes retrieval – RAG is scoped per workspace on purpose.

Verify the install

docker ps → port 3001. Tiny workspace. One-page PDF. Ask a fact that only exists in that file. Citation shows up? RAG is live. Desktop: version in settings, same smoke test after you pick a model.

Common install errors and fixes

Illegal instruction (core dumped) right after start or first chat:

/usr/local/bin/docker-entrypoint.sh: line 7: 115 Illegal instruction (core dumped) node /app/server/index.js

No AVX2 (or the VM hid it). Set VECTOR_DB in the mounted .env away from LanceDB to another supported store, or pass the guest CPU through as host. Docs are blunt: AVX2 is not emulated.

unable to open database file / SQLite path errors: storage owned by root while the process runs as UID/GID 1000. Fix: sudo chown -R 1000:1000 ${STORAGE_LOCATION}, remove the dead container, re-run. Official local-docker notes discourage chmod 777.env can hold API keys. Same UID story on custom paths under /opt or /mnt; $HOME/anythingllm is the path of least pain unless you chown first.

Ollama / host services “offline” in Docker: wrong base URL class of bug (same pattern hits Chroma, LM Studio, LocalAI). Fix the provider URL once in settings – see the host.docker.internal note above – do not keep patching localhost.

Upgrade and uninstall

Volumes intact = data intact. Stop and remove the old container, docker pull mintplexlabs/anythingllm:v1.16.1, re-run the same docker run with identical -v flags. Schema migrations apply on boot when storage survived. Jumping many majors? Back up anythingllm.db plus documents/lancedb folders first (community upgrade threads align with the official volume model).

Desktop: new installer over the app; user config storage persists. Homebrew: brew update && brew upgrade --cask anythingllm. Linux Desktop: re-run installer.sh or replace the AppImage.

Linux Desktop cleanup (official uninstall section):

rm installer.sh AnythingLLMDesktop.AppImage
rm ~/.local/share/applications/anythingllmdesktop.desktop
sudo rm /etc/apparmor.d/anythingllmdesktop
rm -rf ~/.config/anythingllm-desktop

Docker cleanup: docker stop anythingllm && docker rm anythingllm. Delete $STORAGE_LOCATION only if you want zero residual data. Image: docker rmi mintplexlabs/anythingllm:v1.16.1.

Ever notice how many “private PDF chat” stacks still ship a hosted embedder by default? AnythingLLM’s default embedder stays on-box – and that only helps if the process stays up past LanceDB and the volume mount.

FAQ

Do I need Docker to chat with PDFs open source with AnythingLLM?

No. Desktop covers single-user private RAG. Docker is for multi-user access, browser-only clients, or embeddable widgets.

Why does my fresh Docker instance lose everything after reboot?

No bind mount on /app/server/storage (and usually the .env). Recreate with the official -v ${STORAGE_LOCATION}:... pair from the install block. Named volumes work if you manage them on purpose; anonymous containers with no mount do not.

Can I pin v1.16.1 instead of latest, and will Ollama still work?

Yes – mintplexlabs/anythingllm:v1.16.1. Ollama is external networking, not a baked-in sidecar: point the LLM provider at the host gateway address. A bad URL looks like “the model failed” when the socket never opened. After that, one real PDF and a question only that file can answer is the production check – not another settings screenshot.

Next: run the pull + STORAGE_LOCATION block, open port 3001, embed the first PDF in a dedicated workspace before you touch agents.