Skip to content
CAI
Software that uses CAICheck a score

amir1376/ab-download-manager

51.1

Weak · 25 September 2026

90.1k

lines of production code

Kotlin

primary language

4

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

This system is a cross-platform download manager application built with Kotlin Multiplatform and Jetpack Compose, supporting Windows, macOS, Linux, and Android. It features a core download engine capable of handling segmented files and HLS streaming, alongside a REST API and CLI for headless management and browser integration via native messaging. The application includes platform-specific installers, automatic update mechanisms, and a localized UI with system tray and auto-start capabilities.

How it got here

2024 — Android expansion and infrastructure modernization

32 changes.

The project established its public presence and build foundation while significantly expanding to support Android via Kotlin Multiplatform. This period involved a major modernization of the desktop and server components, including migrating to Ktor, refactoring the downloader core, and introducing native CLI and browser integration features.

2025–2026 — Android port and cross-platform refactoring

22 changes.

This period focused on porting the application to Android and refactoring the core architecture to support multi-platform development. Key efforts included restructuring the download engine, implementing platform-specific UI and utility modules, and enhancing cross-platform features like updates and localization.

Features

Add macOS native menu and event handling

The application now integrates with macOS native behaviors by registering handlers for the dock icon click, the About dialog, the Settings (Preferences) menu, and the Quit action. When the app icon is clicked, the About menu item is selected, or the Settings menu is triggered, the corresponding callbacks are invoked. For the Quit action, the default quit behavior is cancelled to allow custom handling via the provided callback.

_desktop/mac\utils · high confidence

Android platform support added

The application now supports Android, enabling core functionality such as file handling, URL opening, auto-start management, and update installation on mobile devices. This change introduces platform-specific implementations for file utilities (using Android's FileProvider and Intents), sparse file creation, and system startup, alongside an Android-specific update applier that installs APKs directly. Existing desktop implementations for Windows, Linux, and macOS remain unchanged.

(repo-wide) · high confidence

Android platform support and UI adaptations

This change introduces Android-specific implementations for the application's shared components, enabling the app to run on Android devices. It includes platform-specific settings (such as disabling sparse file allocation and controlling launcher icons), Android-native UI themes (defining specific text sizes, shapes, and scrollbar styles), and platform-specific behaviors like long-press tooltips, context menus, clipboard access, disk space checks, and wake locks to keep the device awake during downloads. The diff also adds Android-specific notification sound handling that respects Do Not Disturb and silent modes, and sets the default download location to the system's public Downloads folder.

shared/app/src/commonMain · high confidence

Android plugin adds automated APK signing and file-type manifest generation

The Android build plugin now includes Gradle tasks to streamline the release process. A new SignApkTask allows users to sign APKs using a keystore provided via file path or Base64 string, leveraging the platform's apksigner tool. Additionally, a new manifest generation task automatically creates AndroidManifest entries that register the app's main activity to handle file intents for specific file extensions, using a Handlebars template to define the necessary intent filters.

compositeBuilds/plugins/common-android · high confidence

Desktop auto-start implementation for macOS, Windows, and Linux

The desktop auto-start mechanism has been implemented with platform-specific handlers: macOS now uses LaunchAgents (plist files), Windows uses the registry Run key, and Linux uses XDG autostart directories. This change introduces the \Startup\ factory to select the correct manager based on the OS and adds support for passing command-line arguments to the application on startup, replacing the previous generic headless implementation.

shared/auto-start/src/desktopMain · high confidence

Expanded localization support with new language files

The application now includes new translation resource files for Arabic (ar\_SA), Bengali (bn\_BD), Bakhtiari (bqi\_IR), Central Kurdish (ckb\_IR), Czech (cs\_CZ), and German (de\_DE). These additions provide full UI string coverage for these languages, enabling users to interact with the download manager in their preferred locale.

shared/resources/src/commonMain/resources/com/abdownloadmanager/resources/locales · high confidence

Initial Android application support

This change introduces the first Android version of the download manager, built with Kotlin and Jetpack Compose. It includes the core application entry point, an AndroidManifest with necessary permissions (storage, notifications, foreground service), and the main UI pages for adding single or multiple downloads, browsing, and viewing download status. The implementation leverages Koin for dependency injection and integrates with the shared core logic for download handling, queue management, and settings.

android · high confidence

Initial project documentation and build infrastructure

This release establishes the project's public presence and build foundation by adding the Apache 2.0 license, a comprehensive contributing guide, a donation page, and a detailed README with installation instructions for Windows, macOS, and Linux. It also introduces a REST API specification for managing downloads, a Crowdin configuration for translations, and updates the Gradle wrapper scripts to use the \-jar\ flag for execution and corrects error output redirection.

(repo-wide) · high confidence

Introduces new core download engine architecture with HLS support and proxy configuration

The download core has been restructured with new foundational classes including \DownloadSettings\ for global configuration (thread count, speed limits), \DownloaderRegistry\ for managing download implementations, and \DownloadJob\ for handling download lifecycle and status. A new \HttpDownloaderClient\ abstraction with an \OkHttpHttpDownloaderClient\ implementation adds support for custom user agents, proxy strategies (direct, system, manual, PAC scripts), and authentication. HLS (HTTP Live Streaming) downloads are now supported via dedicated \HLSDownloadItem\, \HLSDownloader\, and \HLSPartDownloader\ classes, enabling streaming media downloads. The \SegmentedDownloadDestination\ handles multi-part file assembly with proper cleanup and progress tracking.

downloader/core/src/commonMain · high confidence

New CLI and native messaging infrastructure for browser integration

The desktop application now includes a command-line interface (CLI) and a native messaging host to enable deeper integration with web browsers. Users can manage downloads directly from the terminal using commands to add, show, pause, resume, and remove downloads, as well as start the GUI in the background. Additionally, the app can now install and manage native messaging manifests for Firefox and Chromium-based browsers (Chrome, Edge, Brave, Vivaldi, Opera) on Windows, macOS, and Linux, allowing browser extensions to communicate with the download manager via standard input/output.

desktop/app/src · high confidence

New Gradle installer plugin for macOS DMG and Windows NSIS builds

A new Gradle plugin (\installer-plugin\) has been introduced to automate the creation of native installers. It adds a \createInstaller\ task that generates macOS DMG packages via the \CreateDmgTask\ (using \create-dmg\) and Windows installers via the \NsisTask\ (using NSIS). Users can configure these builds through \installerPlugin { macos { ... } }\ and \installerPlugin { windows { ... } }\ blocks in their Gradle scripts, specifying assets like icons, backgrounds, and license files.

compositeBuilds/plugins/installer-plugin · high confidence

New Linux installation and uninstallation scripts

Added install.sh and uninstall.sh scripts to automate the deployment and removal of AB Download Manager on Linux. The installer detects the OS and architecture (x64 or arm64), installs required dependencies (curl, tar), downloads the latest release tarball from GitHub, and sets up the application in \~/.local along with a FreeDesktop-compliant .desktop entry. The uninstaller safely terminates any running instances, removes the application binaries, desktop entry, and optionally cleans up user configuration data in \~/.abdm.

scripts · high confidence

New desktop utility layer for platform-specific system interactions

This change introduces a new set of utilities in the desktop shared module to handle platform-specific system operations. It adds support for managing power actions (shutdown) on Windows, macOS, and Linux, toggling the macOS Dock icon, and activating the macOS application window. It also includes a refactored Windows Registry helper that switches from shell commands to JNA for more reliable registry access, and provides UI scaling utilities for desktop screens.

desktop/shared · high confidence

New shared Compose utility library for localization, icons, and actions

The \shared/compose-utils\ module has been introduced to centralize common UI utilities, providing a unified foundation for the application's interface. This includes a comprehensive localization system (\LanguageManager\, \ILanguageNameProvider\) that supports dynamic language switching, argument replacement, and RTL layout handling via \WithLanguageDirection\. It also introduces a flexible \IconSource\ abstraction for resolving and rendering icons (including vector and painter sources) and a \StringSource\ system for managing translatable text with arguments. Additionally, the module provides reusable Compose modifiers like \autoMirror()\ for RTL mirroring, \silentClickable\ for interaction control, and a structured \AnAction\ and \MenuDsl\ framework for defining menu items and actions with consistent title and icon handling.

shared/compose-utils · high confidence

New shared icon and localization resource infrastructure

The application now includes a centralized, shared resource module for common UI assets. This adds a comprehensive set of Compose-based vector icons (including the app logo, browser icons for Chrome, Edge, Firefox, and Opera, and standard UI controls like Add, Back, Check, and Clear) and a new language resource system that loads localized strings from bundled properties files, enabling consistent theming and internationalization across the app.

shared/resources/src/commonMain/kotlin · high confidence

New shared utility library for common application logic

The \shared/utils\ module now provides a comprehensive set of utility classes and functions for the application. This includes helpers for managing selection states in lists, tracking application version upgrades, and handling single-entry caching. It introduces file system utilities for atomic moves and path validation, alongside string utilities for filename decoding and wildcard matching. The update also adds coroutine helpers for debouncing, combining multiple flows, and guarded execution, as well as a new logging system backed by Kermit and a robust data size converter supporting both binary and decimal units.

shared/utils/src/commonMain · high confidence

SLF4J logging bridge to Kermit

The desktop application now includes a new SLF4J provider implementation that bridges SLF4J logging calls to the Kermit logging library. This allows any desktop component using SLF4J to automatically route its log output through Kermit, ensuring consistent logging behavior across the application without requiring changes to existing SLF4J-dependent code.

desktop/slf4j-impl · high confidence

Windows installer now supports native messaging and CLI binaries

The NSIS installer script has been updated to include and install the native messaging host and CLI executables alongside the main application binary. This ensures that users on Windows can utilize command-line interface features and browser integration via native messaging immediately after installation, with the installer handling the necessary file placement and process management for these components.

desktop/app/resources/installer · high confidence

Removals

Removal of NanoHTTPD-based HTTP server implementation

The \NanoHttpServer\ implementation, which previously wrapped the NanoHTTPD library to provide an HTTP server for the http4k framework, has been removed from the \shared/nanohttp4k\ module. This change eliminates the dependency on the \fi.iki.elonen:NanoHTTPD\ library and its associated ProGuard rules, indicating a shift away from this specific server backend.

shared/nanohttp4k · high confidence

Removal of custom window frame hit-test and unsafe reflection utilities

The custom window frame module has removed the \ToolbarItem.kt\, \CustomWindowDecorationAccessing.kt\, and \UnsafeAccessing.kt\ files. This eliminates the previous implementation that used Java reflection and \sun.misc.Unsafe\ to manipulate AWT window decorations, set title bar heights, and define hit-test spots for custom window frames. Users relying on this specific low-level window decoration mechanism will no longer have access to these features within this module.

desktop/custom-window-frame · high confidence

Removal of deprecated utility modules

The \CallAwait\, \CollectionUtils\, \FileUtils\, and \FlowUtils\ utility modules have been removed from the shared utilities library. This deletion eliminates custom implementations for awaiting OkHttp calls, swapping list/set elements, opening files and folders via system commands, and converting Flows to MutableStateFlows, indicating these capabilities are no longer maintained in this location.

shared/utils/src/main · high confidence

Removal of legacy DownloadDestination base class

The abstract \DownloadDestination\ class, which previously served as the base for managing download output files and part writers, has been removed from the codebase. This change eliminates the legacy destination handling logic, indicating that download destination management has been refactored or replaced by a different implementation in the downloader core.

downloader/core/src/main/kotlin/ir/amirab/downloader/destination · high confidence

Removal of legacy HTTP connection and client classes

The legacy \Connection\ data class, the abstract \DownloaderClient\ interface, and the \OkHttpDownloaderClient\ implementation have been removed from the downloader core. This cleanup eliminates the previous abstraction layer for HTTP requests and response handling, indicating a shift in how the downloader manages network connections and data sources.

downloader/core/src/main/kotlin/ir/amirab/downloader/connection · high confidence

Removal of legacy URL validation and extraction utilities

The \shared/app-utils\ module has removed several legacy utility components: the \isValidUrl\ function (which validated URLs via \java.net.URL\), the \LocalIsDebugMode\ Compose composition local for debug state, the \DownloadCredentialExtractor\ interface and its string-based implementation, and the \StringUrlExtractor\ object that used regex to find URLs. These deletions indicate a cleanup of older URL handling and debugging infrastructure within this shared utilities package.

shared/app-utils · high confidence

Removal of legacy auto-start implementation

The legacy auto-start module (\shared/auto-start\) has been removed from the application. This deletes the platform-specific startup managers for Linux (\UnixXDGStartup\), macOS (\MacOSStartup\), and Windows (\WindowsStartup\), along with the central \Startup\ factory and utility classes. Users relying on the previous auto-start feature will no longer have this capability managed by this specific code path.

shared/auto-start/src/main · high confidence

Removal of legacy in-app update implementation

The legacy in-app update mechanism has been removed from the shared updater module. This change deletes the core components responsible for checking GitHub releases and applying updates, including the \GithubApi\ client, \ArtifactUtil\ for parsing artifact names, \UpdateChecker\ and \VersionData\ models, and the \JavaUpdateApplier\ for executing the update. Users will no longer receive automatic in-app update notifications or installations via this specific code path.

shared/updater/src/main · high confidence

Removed external drag-and-drop support from desktop UI

The \desktop/external-draggable\ module has been removed, eliminating the ability to drag and drop files, images, or text from external applications (such as Finder or File Explorer) into the desktop application. This change deletes the \CustomDropTarget\ implementation and associated \DragData\ extensions that previously handled AWT drop targets and Compose modifier integration for external drag events.

desktop/external-draggable · high confidence

Behavioural changes

3 commits (0 fixes) modifying desktop/app/icons

A change to existing behaviour in desktop/app/icons — 3 commits, 2 files.

desktop/app/icons · medium confidence · unverified

App settings now use schema-based validation for type safety

The configuration system in shared/config has been refactored to replace the previous primitive-key MapConfig approach with a schema-driven architecture using SchemaKt. This change introduces type-safe validation for application settings, ensuring that configuration data is parsed and validated against defined schemas rather than relying on manual type casting. The legacy Config interface and its associated JSON serialization helpers have been removed in favor of this new, more robust data store implementation.

shared/config · high confidence

Build system refactored to support Android and modernize desktop Compose configuration

The build configuration has been significantly restructured to enable Android support and improve desktop build reliability. New Gradle plugins (androidBase, kotlinMultiplatform, composeAndroid) and updated plugin definitions in Plugins.kts allow the project to target Android devices. Desktop Compose builds now explicitly manage Skiko runtime dependencies to prevent unwanted Material dependencies from being included, and the ProGuard configuration has been migrated to use the dev.nucleusframework plugin instead of the previous JetBrains Compose plugin.

buildSrc/src/main/kotlin/myPlugins · high confidence

Custom title bar now adapts to platform conventions and Linux desktop settings

The custom window title bar now renders differently based on the operating system: macOS places the traffic-light buttons on the left, while Windows and Linux place them on the right. On Linux, the button order and position are dynamically detected from the desktop environment (GNOME, MATE, XFCE, or KDE) to match system preferences. The implementation has been refactored into a shared \TitleBar\ interface with platform-specific providers, moving window control logic out of the main app module into \app-utils\ for better reuse.

desktop/app-utils/src/main/kotlin/com/abdownloadmanager/desktop/window/custom/titlebar · high confidence

Desktop UI enhancements: tooltips, context menus, and table improvements

The desktop interface now displays tooltips on action buttons when hovered, and introduces a custom context menu representation for right-click interactions. The download table has been refactored to use cell IDs instead of names for sorting and column configuration persistence, ensuring sort preferences are saved correctly. Additionally, the table now supports column reordering via drag-and-drop and uses multiplatform scrollbars for consistent scrolling behavior.

shared/app/src/desktopMain/kotlin/com/abdownloadmanager/shared/ui · high confidence

Desktop app settings now use SchemaKt for validation

The desktop-specific application settings are now validated using the SchemaKt library. This change introduces a formal schema definition for desktop-specific options such as merging the top bar with the title bar, using a native menu bar, and enabling the system tray, ensuring these settings are properly typed and validated against their default platform values.

shared/app/src/desktopMain/kotlin/com/abdownloadmanager/shared/storage · high confidence

Desktop updates now apply automatically via platform-specific scripts

The desktop updater now supports fully automatic updates for Windows, macOS, and Linux. When an update is available, the application extracts the archive (ZIP or tar.gz) and executes a platform-specific shell script (Windows batch, macOS/Linux bash) to safely stop the running process, replace the installation files, and restart the application. On Windows, it also supports direct .exe installer execution for NSIS-installed versions.

shared/updater/src/desktopMain · high confidence

Gradle wrapper upgraded to version 9.7.1

The project's Gradle wrapper has been updated from version 8.5 to 9.7.1. This upgrade includes new configuration properties for network timeout (set to 10,000ms) and distribution URL validation, which may affect build performance and reliability when downloading or verifying the Gradle distribution.

gradle · high confidence

Improved platform and architecture detection with Android support

The platform detection logic has been enhanced to reliably identify Android environments by checking JVM vendor and VM name properties, correcting a previous bug where macOS was misidentified as Linux in string-based lookups. Additionally, a new architecture detection system has been introduced to determine CPU types (x64, arm64, x32, arm32) from JVM properties, and helper extension functions have been added to the platform finder for convenient checks like isWindows, isMac, isLinux, and isAndroid.

compositeBuilds/shared/platform · high confidence

Integration server migrated to Ktor with API key authentication and expanded endpoints

The integration server has been rewritten to use the Ktor framework, replacing the previous custom HTTP server implementations. This change introduces API key authentication for all integration endpoints, requiring a valid key to access the API. The REST API now supports additional capabilities: a new \/queues\ endpoint to list download queues, a \/start-headless-download\ endpoint for headless download tasks, and an updated \/add\ endpoint that supports silent downloads and options. The server is now bound to localhost (127.0.0.1) by default, and the integration handler interface has been expanded to support GUI-involved downloads, queue listing, and direct download task creation.

integration/server · high confidence

Introduce desktop-specific platform utilities and behaviors

This change adds desktop-specific implementations for several platform-dependent features, ensuring the application behaves correctly on Windows, macOS, and Linux. Users will now experience proper clipboard integration, system theme detection (including dark mode support), and customizable notification sounds on desktop. Additionally, download locations are resolved using native OS standards (e.g., XDG directories on Linux, Known Folders on Windows), and the system will prevent sleep during downloads via platform-specific wake locks. A disk statistics utility has also been moved to the shared module to support this cross-platform structure.

shared/app/src/desktopMain/kotlin/com/abdownloadmanager/shared/util · high confidence

Introduce new cross-platform update checker and installer

The update module has been refactored to support platform-specific artifact selection. A new \ArtifactUtil\ parses release asset names to match the user's platform and architecture (including universal builds), while \GithubUpdateChecker\ uses this logic to filter GitHub release assets. The update flow now relies on a new \UpdateManager\ that coordinates \UpdateChecker\ implementations (including a \DummyUpdateChecker\ for testing) and \UpdateApplier\ strategies to download and install updates, replacing the previous single-platform logic.

shared/updater/src/commonMain · high confidence

Migrate window and dialog components to the new Compose Window API

The custom window and dialog implementations in the app-utils module have been updated to use the new Compose Window API (v2). This migration introduces safer handling of window initialization states to prevent crashes, adds support for minimum window sizes and modeless modality for dialogs, and integrates UI scaling for better visual consistency. Additionally, the codebase now leverages JetBrains Runtime (JBR) window decorations where supported to provide native-looking title bars and controls, while falling back to custom Compose-rendered decorations on platforms that do not support them.

desktop/app-utils/src/main/kotlin/com/abdownloadmanager/desktop/window/custom · high confidence

Refactor download monitor to support pluggable state factories and cross-platform compatibility

The download monitor module has been refactored to support multi-platform usage (including Android) by moving core logic to commonMain and introducing a \DownloadItemStateFactory\ interface. This allows platform-specific implementations to define how download states are created, decoupling the monitor from concrete state classes. The monitor now exposes typed flows for active and completed downloads via the \IDownloadMonitor\ interface, and internal speed tracking has been updated to use a new \SpeedAtTime\ structure for better average speed calculation. Utility functions for checking download status and speed have also been added to simplify state inspection.

downloader/monitor/src/commonMain · high confidence

Refactored CI binary packaging to include architecture and support NSIS

The build logic for generating release artifacts has been updated to include the target architecture in the output filename (e.g., \app\_1.0\_linux\_x86\_64.zip\), replacing the previous naming scheme. The system now supports NSIS installers for Windows and generates distributable archives (tar.gz/zip) for desktop platforms, while also introducing specific utilities to locate and hash these packaged binaries for CI release tasks.

buildSrc/src/main/kotlin/buildlogic · high confidence

Removal of default configuration path property

The default configuration path property (app.config.path) has been removed from the application's common resource properties. This change aligns with the shift towards a portable application model, where the application no longer relies on a fixed user-home directory for its configuration storage.

desktop/app/resources/common · high confidence

Removal of global download settings configuration

The global \DownloadSettings\ data class has been removed from the downloader core. This eliminates the previous centralized configuration options for default thread count, dynamic part creation mode, global speed limits, and minimum part size, requiring users to configure these parameters through other means or accept new defaults.

downloader/core/src/main/kotlin/ir/amirab/downloader · high confidence

Removal of internal download validation exception classes

The internal exception hierarchy used for download validation has been removed. Specifically, the \DownloadValidationException\ abstract class and its concrete subclasses (\PartTooManyErrorException\, \ServerPartIsNotTheSameAsWeExpectException\, and \TooManyErrorException\) have been deleted from the core downloader module. This cleanup eliminates specific error types that were previously thrown when parts exceeded retry limits or when server responses did not match expectations, likely as part of a broader refactoring of error handling logic.

downloader/core/src/main/kotlin/ir/amirab/downloader/exception · high confidence

Removal of legacy download item model and status enum

The legacy \DownloadItem\ data class, which previously handled download metadata such as links, credentials, file paths, and status tracking, along with the \DownloadStatus\ enum and the \withCredentials\ extension function, has been removed from the core download item module. This change eliminates the old data structure used to represent download tasks, indicating a shift in how download state and configuration are managed within the application.

downloader/core/src/main/kotlin/ir/amirab/downloader/downloaditem · high confidence

Removal of legacy download state data classes

The download monitor module has removed the legacy Kotlin data classes \CompletedDownloadItemState\, \ProcessingDownloadItemState\, \UiPart\, and the utility functions in \DownloadStateUtil\. This cleanup eliminates the previous internal representation of download progress and completion states, indicating a shift in how the application tracks and displays download information to the user.

downloader/monitor/src/main · high confidence

Removal of legacy header extraction logic

The \RangeHeaderExtractor\ and \fileNameExtractor\ files have been deleted from the codebase. This removes the previous implementations for parsing Content-Range headers and extracting filenames from Content-Disposition headers, indicating that this logic has been refactored or replaced by other components in the downloader core.

downloader/core/src/main/kotlin/ir/amirab/downloader/connection/response · high confidence

Removal of legacy utility classes from downloader core

The \downloader/core\ module has removed several internal utility files, including \ByteConverter\, \ExceptionUtils\, \FileNameUtil\, \IDiskStat\, \LockList\, \SuspendLockList\, \Logger\, and \SplitToRange\. This cleanup eliminates legacy helper objects for byte formatting, exception categorization, file naming, disk space checking, concurrent locking, logging, and range splitting, indicating a refactoring of the internal implementation details.

downloader/core/src/main/kotlin/ir/amirab/downloader/utils · high confidence

Simplified version string logic and added Android version code conversion

The build logic for versioning has been updated to support Android packaging and simplified version string handling. A new \convertToVersionCode\ function allows converting semantic version components (major, minor, patch) into a single integer suitable for Android version codes, with strict range validation. Additionally, the \getAppVersionStringForPackaging\ function no longer differentiates version strings based on the target format (e.g., RPM vs. MSI); it now consistently returns the simple \major.minor.patch\ string for all formats, removing the previous OS-based target guessing logic.

buildSrc/src/main/kotlin/buildlogic/versioning · high confidence

System tray initialization no longer throws exceptions on unsupported platforms

The desktop tray component now handles environments where the operating system does not support a system tray gracefully. Instead of crashing the application with an exception, the component logs a warning to standard error and exits early, allowing the rest of the application to continue functioning even when tray features are unavailable.

desktop/tray · high confidence

Update Git tag timestamp retrieval to use Instant API

The Git version plugin now retrieves the creation time of Git tags using the modern \whenAsInstant\ API instead of the deprecated \when\ field. This change ensures compatibility with newer versions of the underlying Git library and removes deprecation warnings, resulting in a cleaner build output without altering the functional behavior of tag versioning.

compositeBuilds/plugins/git-version-plugin · high confidence

Fixes

The application now handles opening external links on macOS more robustly to prevent crashes. The underlying implementation ensures that the correct application bundle path is identified before attempting to launch a URL, addressing a stability issue where previous attempts to open links could fail or crash the application on macOS systems.

desktop/app-utils/src/main/kotlin/com/abdownloadmanager/desktop/window · high confidence

Dependencies

Android support and major dependency upgrades

This release adds an Android build for the application, introducing new modules like \android:app\ and converting several shared components (such as \downloader:core\, \shared:app\, and \shared:utils\) to Kotlin Multiplatform. The build system has been significantly upgraded, including a major jump in the Compose version (1.6.11 to 1.12.0), Kotlin (2.0.0 to 2.4.20), and the Android Gradle Plugin (to 9.1.1). Additionally, the project has replaced several libraries, such as swapping \http4k\ for \ktor\ and \nanoHttpd\ for \slf4j-impl\, and introduced new dependencies like \kotlinx-rpc\ and \SchemaKt\ for validation.

(dependencies) · high confidence

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

How this codebase got here

This is the PUBLIC form of this artifact. Findings are listed in full, but the details of SECURITY findings — which rule fired, in which file, on which line, and how to fix it — are deliberately withheld, and any secret-scanner results are excluded entirely. Where detail is absent here it was REMOVED FOR PUBLICATION; it is not missing from the analysis. The complete artifact is available from the repository owner.

Score

  • CAI 41 → 51 (+9.9)
  • Rubric changed (rubric-2026.08.15 → rubric-2026.09.15) — scores are not directly comparable.

Lenses

  • Code Health 95 → 93 (-1.9)
  • Architecture 94 → 99 (+4.5)
  • Maturity 50 → 56 (+5.7)
  • Readiness 26 → 40 (+13.9)
  • Security 39 → 49 (+9.4)

Resolved (33)

  • Dimension evaluation failed
  • Duplicated block (12 lines × 3) (desktop/app/src/main/kotlin/com/abdownloadmanager/desktop/pages/home/HomePage.kt)
  • Duplicated block (13 lines × 2) (android/app/src/main/kotlin/com/abdownloadmanager/android/pages/home/Prompts.kt)
  • Duplicated block (13 lines × 2) (android/app/src/main/kotlin/com/abdownloadmanager/android/pages/home/Prompts.kt)
  • Duplicated block (13 lines × 2) (desktop/app/src/main/kotlin/com/abdownloadmanager/desktop/pages/home/HomePage.kt)
  • Duplicated block (15 lines × 2) (desktop/app-utils/src/main/kotlin/com/abdownloadmanager/desktop/window/custom/titlebar/mac/MacTitleBar.kt)
  • Duplicated block (15 lines × 2) (desktop/app/src/main/kotlin/com/abdownloadmanager/desktop/pages/addDownload/ShowAddDownloadDialogs.kt)
  • Duplicated block (16 lines × 2) (downloader/core/src/androidMain/kotlin/ir/amirab/downloader/utils/SparseFile.android.kt)
  • Duplicated block (16 lines × 2) (shared/app/src/commonMain/kotlin/com/abdownloadmanager/shared/util/ui/MyColors.kt)
  • Duplicated block (19 lines × 2) (shared/app/src/commonMain/kotlin/com/abdownloadmanager/shared/ui/widget/Text.kt)
  • Duplicated block (20 lines × 2) (android/app/src/main/kotlin/com/abdownloadmanager/android/pages/home/sections/Categories.kt)
  • Duplicated block (20 lines × 2) (desktop/app/src/main/kotlin/com/abdownloadmanager/desktop/pages/home/sections/category/Categories.kt)
  • Duplicated block (23 lines × 2) (shared/utils/src/commonMain/kotlin/ir/amirab/util/datasize/SizeFactors.kt)
  • Duplicated block (24 lines × 3) (desktop/app/src/main/kotlin/com/abdownloadmanager/desktop/pages/home/HomePage.kt)
  • Duplicated block (26 lines × 2) (desktop/app/src/main/kotlin/com/abdownloadmanager/desktop/pages/home/HomePage.kt)
  • Duplicated block (41 lines × 2) (desktop/app/src/main/kotlin/com/abdownloadmanager/desktop/nativemessaging/NativeMessagingManifestApplier.kt)
  • Duplicated block (8 lines × 2) (shared/app/src/commonMain/kotlin/com/abdownloadmanager/shared/singledownloadpage/DownloadStatusStringSource.kt)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • …and 13 more

New (290)

  • Change coupling: main.kt ↔ HomeComponent.kt (desktop/app/src/main/kotlin/com/abdownloadmanager/desktop/actions/main.kt)
  • ClassTooLong: AppComponent (desktop/app/src/main/kotlin/com/abdownloadmanager/desktop/AppComponent.kt)
  • ClassTooLong: HttpDownloadJob (downloader/core/src/commonMain/kotlin/ir/amirab/downloader/downloaditem/http/HttpDownloadJob.kt)
  • DashedBorderKt.dashedBorder (cognitive 30) (shared/app/src/commonMain/kotlin/com/abdownloadmanager/shared/ui/widget/DashedBorder.kt)
  • DashedBorderKt.dashedBorder (cyclomatic 19) (shared/app/src/commonMain/kotlin/com/abdownloadmanager/shared/ui/widget/DashedBorder.kt)
  • Dependency hygiene PARTLY measured — Maven/Gradle declarations read, no dependency graph resolved
  • Documentation: no installation or build instructions (README.md)
  • Documentation: no usage examples (README.md)
  • DownloadListKt.DownloadList (cyclomatic 19) (desktop/app/src/main/kotlin/com/abdownloadmanager/desktop/pages/home/sections/DownloadList.kt)
  • DownloadMonitor.startUpdateCompletedList (cognitive 16) (downloader/monitor/src/commonMain/kotlin/ir/amirab/downloader/monitor/DownloadMonitor.kt)
  • Duplicated block (10 lines × 2) (android/app/src/main/kotlin/com/abdownloadmanager/android/pages/add/shared/SelectQueue.kt)
  • Duplicated block (10 lines × 2) (android/app/src/main/kotlin/com/abdownloadmanager/android/pages/credits/thirdpartylibraries/ExternalLibsPage.kt)
  • Duplicated block (10 lines × 2) (android/app/src/main/kotlin/com/abdownloadmanager/android/pages/credits/thirdpartylibraries/LibraryDialog.kt)
  • Duplicated block (10 lines × 2) (downloader/core/src/commonMain/kotlin/ir/amirab/downloader/downloaditem/hls/HLSDownloadJob.kt)
  • Duplicated block (10 lines × 3) (desktop/app/src/main/kotlin/com/abdownloadmanager/desktop/ui/configurable/comon/renderer/FloatConfigurableRenderer.kt)
  • Duplicated block (101–106 lines × 2) (android/app/src/main/kotlin/com/abdownloadmanager/android/pages/batchdownload/BatchDownloadPage.kt)
  • Duplicated block (10–11 lines × 2) (android/app/src/main/kotlin/com/abdownloadmanager/android/pages/add/single/AddSingleDownloadPage.kt)
  • Duplicated block (11 lines × 2) (android/app/src/main/kotlin/com/abdownloadmanager/android/pages/about/AboutPage.kt)
  • Duplicated block (11 lines × 2) (android/app/src/main/kotlin/com/abdownloadmanager/android/pages/credits/thirdpartylibraries/LibraryDialog.kt)
  • Duplicated block (11 lines × 2) (android/app/src/main/kotlin/com/abdownloadmanager/android/pages/credits/thirdpartylibraries/LibraryDialog.kt)
  • …and 270 more

Changes since last survey

  • 24 commits — 23 feature/other, 1 fixes

By area

  • desktop/app — 6 commits
  • shared/app — 6 commits
  • (root) — 3 commits
  • shared/resources — 3 commits
  • android/app — 2 commits
  • gradle/libs.versions.toml — 2 commits
  • compositeBuilds/plugins — 1 commit
  • shared/utils — 1 commit

Notable commits

  • fix: fix: create windows with their title already set (#1432)
  • change: add additional browser integration installation links
  • change: add custom dns support (#1380)
  • change: add more items to system tray
  • change: add native messaging manifest to extra browsers (#1366)
  • change: cleanup UI entry logic
  • change: cleanup code
  • change: feat: save download location on add new download (#1406)
  • change: improve file name detection (#1393)
  • change: migrate to new window api (#1397)
  • change: only expose api to localhost (#1402)
  • change: update CHANGELOG.md
  • change: update CHANGELOG.md
  • change: update CHANGELOG.md
  • change: update dependencies
  • change: update dependencies
  • change: update dependencies and improve third-party library ID presentation
  • change: update dependencies, improve system tray
  • change: update gradle and replace some deprication codes
  • change: update translations
  • …and 4 more

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

Survey your own repository

amir1376/ab-download-manager was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.

About this page

  • The score is its most recent published measurement, taken on 25 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
  • Measured at commit 2beb913e7ec9b2cf50303f15242696a2744a34d5 — the exact code this score is about.
  • Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer preprod-dd72cc24c749.