Highlights
This release adds internationalization support, automatic device scanning, and multi-distribution ClamAV detection — making ClamUI usable in more languages, on more distros, and with less manual setup.
A Big Thanks to Marksonthegamer for adding Chinese (simplified) translation and of course anyone who reported issues ( i know, a perfect software should have 0 issues :) but this is a hobby project )
New Features
- Internationalization (i18n) — Full gettext infrastructure with 941 translatable strings across 44 source files. German translation included. Translation validation CI workflow and contributing guide added.
(docs/TRANSLATING.md) - Automatic device scanning — New DeviceMonitor watches for USB drives, external disks, and network mounts, triggering background ClamAV scans automatically. Configurable device type filters, max size limits, scan
delay, battery-skip mode, and auto-quarantine. New "Device Scan" preferences page. - Multi-distro ClamAV config detection — Auto-detects ClamAV configuration paths for Debian/Ubuntu, Fedora/RHEL, and generic installations. Manual override via Detect/Browse buttons in Preferences. Detected paths
persist to settings. - Clean subprocess environment —
get_clean_env()isolates ClamAV subprocess calls from the Python virtual environment, preventing path pollution. - GPG signing — Optional GPG signing for CI build workflows.
Performance
- Non-blocking startup — Moved
clamscan --version, clamd socket checks, freshclam status, and matplotlib imports off the main thread. UI no longer freezes during initialization. - Quarantine pre-initialization — Pre-initializes quarantine database and resources at startup, eliminating the lag when first switching to the quarantine view.
Bug Fixes
- Fixed file manager integration: added missing scan scripts, tri-state detection (installed/partial/none), and proper removal support.
- Fixed packaging: added missing filesystem integrations to Debian and install.sh packages.
- Fixed German translations for database_page and updater modules.
- Fixed test locale handling: force C locale to prevent translated strings from breaking assertions.
Architecture & Refactoring
- App decomposition — Extracted
ClamUIApp's 1400+ line monolith into focused collaborator modules:AppLifecycleManager,NotificationDispatcher,TrayIntegration, andViewCoordinator. - Modular scan view — Decomposed monolithic
scan_view.pyintosrc/ui/scan/package with dedicated coordinator, controller, progress widget, results widget, profile selector, and target selector. - Dependency injection — QuarantineManager now passed via DI rather than created inline, improving testability.
- AppContext — New shared application state container for cross-module coordination.
Testing
- Test coverage improved from 69% to 77%
- Added comprehensive tests for: components view, scan results dialog, statistics view, tray service, window, virustotal results dialog, notification manager, device monitor, ClamAV detection, preferences pages
CI/CD
- Added POTFILES.in consistency check to lint workflow
- Added translation validation CI workflow
- Replaced dpkg-sig verification with ar-based method in Debian build
- Updated dependencies: packaging 26.0, pathspec 1.0.4, numpy 2.4.2, coverage 7.13.4
Full Changelog: v0.1.3...v0.1.4