*Path Mapping Problem Solver for Docker arr apps
MapArr scans your actual Docker Compose setup and tells you exactly what's wrong with your volume mounts. It doesn't just quote TRaSH Guides at you — it reads your real config, understands your full media pipeline, and generates specific fixes for your setup.
Most *arr app problems come down to path mapping. Sonarr mounts /host/tv:/data/tv, qBittorrent mounts /host/downloads:/downloads, and hardlinks silently fail because Docker sees them as separate filesystems. MapArr detects this automatically.
Two modes:
- Fix Mode — Paste an error from Sonarr/Radarr, MapArr identifies the service, matches it to the right stack, and shows you exactly what to change
- Browse Mode — Browse all your stacks, pick one, get a full analysis with mount intelligence
Pipeline Intelligence:
MapArr scans your entire root directory on boot and builds a unified map of all media services. When you analyze a single stack, it already knows about every other service — their roles, mount paths, and relationships. This isn't per-stack isolation. This is full directory awareness.
- Pipeline-first analysis — Scans 35+ compose files in under 1 second, builds a unified media service map
- Role detection — Automatically classifies services as *arr apps, download clients, or media servers
- Mount consistency checking — Verifies all media services share a common host mount (required for hardlinks)
- Smart error matching — Paste an error, MapArr figures out which stack caused it
- Auto-apply fixes — Apply corrected volume configuration directly to your compose file (with backup)
- Mount intelligence — Detects NFS, CIFS/SMB, WSL2, and local mounts with hardlink compatibility warnings
- Category advisory — Warns about the download client category trap that catches everyone
- Quick-switch — Type-to-search for instant stack switching without navigating back
- RPM Wizard — Guided Remote Path Mapping setup when mount restructuring isn't an option
- Two-track solutions — Quick Fix (RPM) or Proper Fix (restructure) for every conflict
- Real-time logging — Full log panel with SSE streaming, level filtering, and download
- Diagnostic export — One-click markdown export of your analysis for sharing/debugging
- Update checker — Checks GitHub releases for newer versions
docker run -d \
--name maparr \
-p 9494:9494 \
-v /path/to/your/stacks:/stacks:ro \
-v /var/run/docker.sock:/var/run/docker.sock:ro \
ghcr.io/coaxk/maparr:latestThen open http://localhost:9494.
services:
maparr:
image: ghcr.io/coaxk/maparr:latest
container_name: maparr
restart: unless-stopped
ports:
- "9494:9494"
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- /path/to/your/stacks:/stacks:ro
environment:
MAPARR_STACKS_PATH: /stacksgit clone https://github.com/coaxk/maparr.git
cd maparr
pip install -r requirements.txt
uvicorn backend.main:app --host 0.0.0.0 --port 9494- Discovery — Scans your stacks directory for Docker Compose files (up to 3 levels deep)
- Pipeline Scan — Identifies all media services, classifies their roles, maps their host mount paths
- Analysis — Resolves the compose file, extracts volumes, detects conflicts between services
- Fix Generation — Produces corrected YAML following the TRaSH Guides unified
/datapattern - Apply — Optionally write the fix directly to your compose file (with
.bakbackup)
The analysis covers:
- Separate mount trees — the #1 cause of hardlink failure in *arr setups
- Inconsistent host paths — same container path backed by different host directories
- Remote filesystems — NFS/CIFS mounts where hardlinks can't work
- Unreachable paths — container paths with no backing volume mount
- Pipeline mount conflicts — services across different stacks using incompatible mount roots
| Mount | Purpose | Required? |
|---|---|---|
/stacks:ro |
Your compose files directory | Yes |
/var/run/docker.sock:ro |
Docker socket for docker compose config resolution |
Recommended |
The :ro flag ensures MapArr operates read-only during analysis. The auto-apply feature writes only when you explicitly confirm, and always creates a backup first.
Docker socket security note: The Docker socket grants full Docker API access. The :ro flag does NOT limit this — it's a Docker limitation. Only mount it if you trust MapArr. It runs read-only analysis — no containers are modified.
# Linux — stacks in /opt/docker
-v /opt/docker:/stacks:ro
# Linux — stacks in home directory
-v ~/docker:/stacks:ro
# Windows (Docker Desktop / WSL2)
-v C:\DockerContainers:/stacks:ro
# Komodo / Portainer / Dockge style (one stack per directory)
-v /home/user/stacks:/stacks:ro| Variable | Default | Description |
|---|---|---|
MAPARR_PORT |
9494 |
Port to run on |
MAPARR_STACKS_PATH |
/stacks |
Path to scan for compose files |
DOCKER_SOCKET |
/var/run/docker.sock |
Docker socket path |
LOG_LEVEL |
info |
Logging level (debug, info, warning, error) |
MapArr recommends the TRaSH Guides unified mount structure:
/host/data/
media/
tv/ <- Sonarr manages
movies/ <- Radarr manages
music/ <- Lidarr manages
torrents/ <- Download client saves here
usenet/ <- Usenet client saves here
All services mount the same parent: /host/data:/data. Subdirectories handle separation. Hardlinks work because everything is on one filesystem through one bind mount.
"No stacks found" — Make sure you're mounting the right directory. The stacks directory should contain subdirectories, each with a docker-compose.yml or compose.yml.
"docker compose config failed" — MapArr falls back to manual YAML parsing automatically. This is fine for most setups. If you need full resolution (extends, includes), ensure the Docker socket is mounted.
"Analysis failed" — Usually means the compose file has invalid YAML. Check syntax with docker compose config on the host.
- Backend: Python 3.11 + FastAPI (11 endpoints)
- Frontend: Vanilla HTML/CSS/JS (no framework, no build step)
- Analysis Engine: Volume mount classification, conflict detection, RPM calculation, TRaSH Guides pattern matching
- Pipeline: Full directory scanning with role detection, mount consistency checking across all stacks
- Tests: 426 tests covering RPM, pipeline, analysis, smart-match, cross-stack, and edge cases
MapArr is part of a planned 4-tool ecosystem for Docker media stack management:
| Tool | Purpose |
|---|---|
| MapArr | Path mapping analysis and fixes |
| ComposeArr | Docker Compose hygiene linting (30 rules, health scoring) |
| SubBrainArr | Subtitle intelligence |
| Apart | Service separation analysis |
MapArr runs entirely locally. No telemetry. No external API calls. No data collection. Your compose files never leave your machine.
MIT License. See LICENSE for details.
*arr app logos and names are trademarks of their respective projects. MapArr is an independent third-party tool — not affiliated with or endorsed by any *arr project.

