π Found CHANGELOG.md - extracting release notes...
β
Using changelog entries for v2.0.0
Composr v2.0.0
π Container Management Platform
Added
- π― Service-Centric Model: a service's profile, compose file, and host are now attributes you change directly, not scattered one-off buttons
- Compose Profiles: select which optional profiles are active for a stack (toggle chips + Deploy in the stack modal), and mark any core service "Inactive" with one click β edits the file with a line-based insert/removal (never rewrites the whole file, so comments and formatting survive) and immediately redeploys, stopping (not removing) the container so it shows up as a normal
Exited/Inactivestatus rather than vanishing - Move a Service: move a service from one compose file to another via the container popup β two-step preview/commit flow shows a diff of both files and flags real risks before you confirm (cross-file
depends_on, top-level volumes/networks the target doesn't declare,${VAR}references missing from the target's.env, name/port collisions, andnetwork_mode: hostorbuild:services that may not be portable to a different location) - Per-Stack Deploy Host: send a stack to a specific connected host from its properties β file stays local, only where the containers run changes. If the target host is offline, the deploy is refused outright rather than silently landing on local (no silent fallback, ever)
- Port-Conflict Resolution: before any deploy, host ports are checked against what's already published on the target β a conflict shows which container holds it, suggests the nearest free port, or offers to deploy to a different connected (and architecture-aware) host instead
- Service Properties Panel: the container "More" popup now leads with Profile / Compose file / Host as live attribute-changers, with the existing logs/inspect/terminal/repull/remove actions below
- Compose Profiles: select which optional profiles are active for a stack (toggle chips + Deploy in the stack modal), and mark any core service "Inactive" with one click β edits the file with a line-based insert/removal (never rewrites the whole file, so comments and formatting survive) and immediately redeploys, stopping (not removing) the container so it shows up as a normal
- Images β Multi-Select & Bulk Remove: "Select Multiple" toggle with checkboxes (grid and table view) to remove several images at once, instead of one at a time
- Intermittent Host Support: mark a host as "expect offline" (e.g. a Windows Docker Desktop PC that isn't always on) so it shows as paused rather than an error β display only, doesn't relax the no-silent-fallback deploy rule
Fixed
- Security: path traversal in the compose/env file read+write endpoints β an absolute or
../path could escape the configured compose directory; now resolved and validated against the allowed directories before every read or write - Security:
remote_hosts.py's background health-check thread mutated shared connection state without a lock, racing request threads β could produce a "dictionary changed size during iteration" error under real concurrent use - Security: batch container actions (start/stop/restart/remove) ignored which host a selected container was actually on in multi-host setups, always acting against the local/last-switched host instead
- Security: startup now logs a clear warning when running without
AUTH_USERNAME/AUTH_PASSWORDset, and/loginhas basic rate-limiting (5 attempts, 5 minute lockout) β was previously unlimited - Backup:
create_backup/preview_backupnow accept ahostparameter and correctly resolve a per-host Docker client, instead of always operating on local regardless of which host was intended - Images: "Prune Images" had a duplicate event listener causing every click to fire the request twice β the second request would hit Docker's daemon-level prune lock and fail with "a prune operation is already running"
- Stale static assets: local JS/CSS files had no cache-busting at all, so a browser could keep serving old code indefinitely across upgrades β every static asset now carries a version query string that changes on each restart
- Removed a substantial amount of dead code left over from the pre-multi-host "bookmark era" (unreachable duplicate endpoints, orphaned functions, dead frontend call sites) with no behavior change for anything actually reachable from the UI
Changed
- The module-level Docker client global was removed entirely β every endpoint now resolves its own per-request, per-host client, closing a class of "wrong host in multi-host setups" bugs at the root
π³ Docker Images
docker pull vansmak/composr:2.0.0docker pull vansmak/composr:latest
π§ Supported Platforms
- linux/amd64
- linux/arm64
- linux/arm/v7
π¦ Installation
docker run -d \
--name composr \
-p 5003:5003 \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /path/to/docker/projects:/app/projects \
-v /path/to/config/composr:/app/data \
vansmak/composr:2.0.0β¨ Core Features
- Multi-host Docker container management
- Real-time container monitoring and control
- Docker Compose file editor with syntax highlighting
- Environment file management
- Image management across multiple hosts
- Backup and restore functionality
- Modern web interface with dark/light themes