Skip to content
CAI
Software that uses CAICheck a score

xpipe-io/xpipe

64.8

Adequate · 25 September 2026

91.8k

lines of production code

Java

primary language

5

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

This system is a cross-platform desktop application for managing remote hosts, identities, and computing resources, built on a modernized Java 26 architecture. It provides core abstractions for host connections, data stores, and user actions, supported by a modular extension system for specific integrations like Incus containers. The application features a unified interface for configuring and executing batch actions, with native distribution packaging for Windows, Linux, and macOS.

How it got here

2021 — Legacy API removal and build modernization

13 changes.

This period focused on removing the legacy API, beacon, and core data structure modules to eliminate outdated socket-based communication and serialization logic. The project simultaneously modernized its build infrastructure by upgrading to Gradle 9 and Java 26, restructuring the module layout into app, base, and ext components.

2023–2025 — Modular architecture and extensibility

12 changes.

This period focused on establishing a robust modular foundation through the introduction of the ext/base extension for core abstractions and the implementation of a new action system with configuration UI. The work also involved enhancing platform support by adding debug scripts for Linux and Windows, refining macOS build metadata, and removing system dependencies by bundling fonts and updating third-party licenses.

Features

Added Linux debug launcher script

A new shell script (xpiped\_debug.sh) has been added to the Linux distribution to facilitate debugging. This script sets up JVM options via the CDS\_JVM\_OPTS environment variable and launches the xpiped runtime, keeping the terminal open after execution for easier inspection.

dist/debug/linux · high confidence

Added Windows debug batch script for local development

A new batch file (xpiped\_debug.bat) has been added to the dist/debug/windows directory to facilitate local debugging on Windows. This script configures the console code page to UTF-8, sets a placeholder for JVM arguments, and invokes the main runtime script, pausing at the end to allow users to view output.

dist/debug/windows · high confidence

Added macOS application metadata configuration for jpackage builds

The distribution build process now includes a specific Info.plist file for macOS applications created via jpackage. This configuration defines core application metadata such as the bundle identifier, executable name, and copyright, while also registering the 'xpipe' URL scheme to handle custom protocol links for ssh, sftp, and s3 connections. It sets the minimum supported macOS version to 10.11 and categorizes the app under developer tools.

dist/jpackage · high confidence

Initial repository setup with Apache 2.0 license and documentation

The repository has been initialized with core documentation and configuration files, including a Code of Conduct, Contributor Guide, Security policy, and the Apache License 2.0. Installation scripts for Windows (PowerShell) and Linux/macOS (Bash) have been added to facilitate easy setup, alongside standard Git configuration files (.gitignore, .gitattributes) and a Lombok configuration. The project version is set to 24.5-2.

(repo-wide) · high confidence

New action system with configuration and confirmation UI

The application introduces a new action framework that allows users to configure and execute actions with explicit confirmation. This includes a new action picker interface, configuration components for selecting target stores and editing JSON settings, and a confirmation dialog that displays action details before execution. The system supports single, batch, and multi-store actions, with serialization handled via a new Jackson mapper that validates store references and applicability.

app/src · high confidence

New ext/base extension for core host, identity, and desktop abstractions

The new ext/base extension introduces foundational data store types and UI components that underpin connection and identity management. It adds AbstractHostStore for defining hosts with optional tunnel gateways, HostAddressSwitchStore for switching between multiple available addresses, and DesktopApplicationStore for launching local desktop applications. It also provides the IdentityApplyHubLeafProvider and IdentityApplyDialog to push SSH keys and configuration to remote hosts, along with IdentityConvert for migrating local identities to synced or multi-identity stores. On the UI side, HostAddressChoice and HostAddressChoiceComp enable selecting and managing multiple hostnames/IPs with port configuration, while CopyIpActionProvider adds a quick action to copy the last known IP to the clipboard.

ext/base · high confidence

Removals

Removal of legacy generic data structure and serialization classes

The core data package has removed the entire legacy generic data structure implementation, including the \DataStructureNode\ hierarchy (\ArrayNode\, \TupleNode\, \ValueNode\), the associated type system (\ArrayType\, \TupleType\, \ValueType\), and the generic I/O readers and writers (\DataStreamReader\, \DataStreamWriter\). This cleanup eliminates the old untyped node model and its corresponding serialization logic from the \core/src/main/java/io/xpipe/core/data\ module.

core/src/main/java/io/xpipe/core/data · high confidence

Removal of legacy socket-based beacon communication

The socket-based communication layer for the beacon module has been removed. This change deletes the \SocketClient\, \SocketServer\, and \Sockets\ classes from the \beacon/src/main/java/io/xpipe/beacon/socket\ package, eliminating the previous TCP/IP implementation that handled local inter-process communication via JSON messages and body separators.

beacon/src/main/java/io/xpipe/beacon/socket · high confidence

Removal of the legacy API module

The \api\ module has been completely removed from the codebase. This change deletes the \DataTable\ interface and its implementation, along with supporting classes such as \IntConverter\, \XPipeApiConnector\, \XPipeDataStructureSource\, \XPipeDataTableBuilder\, and \XPipeException\. The associated test suite (\DataTableTest\, \XPipeConfig\) and the test daemon startup script (\start\_test\_daemon.bat\) have also been removed, indicating that the legacy API functionality is no longer part of the product.

api · high confidence

Architecture

Java module definition added for ext/proc

The ext/proc extension now includes a module-info.java file, defining the module as io.xpipe.ext.proc. This change establishes the Java Platform Module System (JPMS) structure for this component, enabling proper module encapsulation and dependency management within the application's modular architecture.

ext/proc · high confidence

Behavioural changes

Beacon message exchange architecture removed

The \beacon/src/main/java/io/xpipe/beacon/message\ package has been completely removed, eliminating the legacy \MessageProvider\ interface and its \ServiceLoader\-based discovery mechanism (\MessageProviders\). This deletion removes all specific protocol implementations for beacon exchanges, including \ListCollectionsExchange\, \ListEntriesExchange\, \ModeExchange\, \ReadStructureExchange\, \ReadTableDataExchange\, \ReadTableInfoExchange\, \StatusExchange\, and \VersionExchange\, as well as the error handling records \ClientErrorMessage\ and \ServerErrorMessage\.

beacon/src/main/java/io/xpipe/beacon/message · high confidence

Bundled Inter font with logical mapping to remove fontconfig dependency

The distribution now includes the Inter font (Inter-Regular.ttf) and configuration files (allfonts.properties, logicalfonts.properties) that map the logical 'sans.regular' family to this bundled file. This change ensures consistent typography by providing a built-in fallback, eliminating the runtime dependency on the system fontconfig library.

dist/fonts · high confidence

Incus container support now includes a force-stop action

The Incus container integration has been updated to allow users to forcefully stop containers. This is implemented by adding a \forceStop\ method to the \IncusCommandView\ and exposing it via the \IncusContainerStore\, which maps to the \--force\ flag in the underlying \incus stop\ command. This change is specific to the Incus implementation; the parallel LXD integration does not include this force-stop capability in this update.

ext/system · high confidence

New application and service labels added to English localization

The English localization file (fixed\_en.properties) now includes display names for a wide range of supported terminals, editors, IDEs, password managers, and system services. This ensures that when users select or view these applications in the interface, they see the correct, user-friendly labels rather than internal identifiers.

lang/strings · high confidence

New development environment configuration and documentation

Added a README explaining the purpose of the gradle helper scripts and Java module generation rules, and introduced a default development properties file (dev\_default.properties) that configures local installation version checks, PTB installation usage, showcase mode, data directory location, and HTTP server debugging output.

_gradle/gradle\scripts · high confidence

Removal of Java Module Descriptor

The Java module descriptor (module-info.java) for the beacon component has been removed, indicating a shift away from the Java Platform Module System (JPMS) for this module. This change eliminates the explicit module boundaries, service provider declarations (such as MessageProvider implementations), and required dependencies (like Jackson and SLF4J) that were previously defined in the module system.

beacon/src/main/java · high confidence

Removal of Java Platform Module System (JPMS) module descriptor

The core module has removed its module-info.java file, meaning the io.xpipe.core module is no longer defined as a named module within the Java Platform Module System. This change removes explicit module boundaries, requiring dependencies (such as Jackson and Apache Commons) to be available on the classpath without module-path enforcement, and eliminates the explicit service provider registration for CoreJacksonModule and the specific exports/opens declarations that previously controlled access to internal packages like store, source, and data types.

core/src/main/java · high confidence

Removal of legacy Jackson serialization helpers

The \CoreJacksonModule\ and \JacksonHelper\ classes in the core utility package have been removed. This eliminates the previous custom serialization logic for \Charset\ and \Path\ types, as well as the centralized \ObjectMapper\ initialization that relied on \ServiceLoader\ to discover Jackson modules. Users relying on the previous JSON serialization behavior for these specific types or the global mapper instance will need to adapt to the new serialization setup provided by the updated core infrastructure.

core/src/main/java/io/xpipe/core/util · high confidence

Removal of legacy beacon exception classes and connector infrastructure

The beacon module has removed the legacy exception classes (ClientException, ConnectorException, ServerException) and the core connector infrastructure (XPipeConnector, XPipeDaemon). This eliminates the previous mechanism for starting the xpipe daemon and managing socket-based communication, indicating a significant shift in how the beacon component handles connectivity and error reporting.

beacon/src/main/java/io/xpipe/beacon · high confidence

Removal of legacy data source interfaces

The legacy data source abstraction layer in the core module has been removed. This includes the deletion of the \DataSource\ interface and its specific implementations for tables (\DataTableSource\, \DataTableConnection\, \DataTableWriteConnection\) and structures (\DataStructureSource\, \DataStructureConnection\), along with supporting classes like \DataSourceId\ and \DataSourceType\. Users relying on these specific internal interfaces for custom integrations will need to adopt the new data source structure.

core/src/main/java/io/xpipe/core/source · high confidence

Removal of legacy data store abstractions

The \DataStore\, \StreamDataStore\, \FileDataInput\, \LocalFileDataInput\, \RemoteFileDataInput\, and \InputStreamDataStore\ classes in the core store module have been removed. This cleanup eliminates the previous abstraction layer for local and remote file inputs, indicating a structural shift in how data sources are handled within the application.

core/src/main/java/io/xpipe/core/store · high confidence

Updated application logo asset

The distributed logo file (dist/logo/logo.svg) has been updated with a new design. This change replaces the previous version of the SVG asset, which may affect how the application icon or branding is rendered in the user interface.

dist/logo · high confidence

Dependencies

Migration to Gradle 9 and Java 26 with modular build restructure

The build system has been upgraded to Gradle 9 and the project now targets Java 26, replacing the previous Java 17 configuration. This change includes a significant restructure of the module layout, removing the legacy 'core', 'beacon', and 'api' modules in favor of a new 'app', 'base', and 'ext' (extensions) structure. The build now utilizes the 'extra-java-module-info' plugin to manage Java module descriptors for third-party dependencies and integrates the 'spotless' plugin for code formatting. Additionally, the root project name has been changed from 'xpipe\_java' to 'xpipe', and the distribution logic has been consolidated into a dedicated 'dist' module.

(dependencies) · high confidence

Updated third-party license and metadata files

The distribution now includes updated license text and metadata files for several third-party dependencies, reflecting version bumps and dependency changes. Specifically, the entry covers AtlantaFX themes (1.9.0), AtlantaFX (2.0.1), Bouncy Castle Crypto Package For Java (1.81), Commons IO (2.22.0), Commons Lang (3.20.0), flexmark (0.64.0), fx-builders (0.4), github-markdown-css (5.1.0), Ikonli (12.2.0), The Inter font family (4.2), and Jackson Databind (3.2.0).

dist/licenses · high confidence

Upgrade Gradle wrapper to version 9.6.1

The Gradle wrapper has been updated from version 7.3 to 9.6.1, requiring a download of the new distribution upon first build. Additionally, new configuration properties have been added to the wrapper settings to control network behavior, including a 10-second timeout, retry logic with a 500ms backoff, and URL validation.

gradle/wrapper · 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

Score

  • CAI 62 → 65 (+2.6)
  • Rubric changed (rubric-2026.08.19 → rubric-2026.09.15) — scores are not directly comparable.

Lenses

  • Code Health 99 → 86 (-12.8)
  • Architecture 100 → 99 (-1.1)
  • Maturity 69 → 74 (+4.3)
  • Readiness 44 → 48 (+4.1)
  • Security 77 → 82 (+4.4)

Resolved (51)

  • Coverage not included — suite not readable by the collector
  • Dependency hygiene not measured — dependency manifest found but not parsed for hygiene
  • Duplicated block (10 lines × 2) (ext/base/src/main/java/io/xpipe/ext/base/identity/LocalIdentityStoreProvider.java)
  • Duplicated block (10 lines × 2) (ext/base/src/main/java/io/xpipe/ext/base/identity/LocalIdentityStoreProvider.java)
  • Duplicated block (10 lines × 2) (ext/base/src/main/java/io/xpipe/ext/base/script/ScriptTextSource.java)
  • Duplicated block (10 lines × 2) (ext/base/src/main/java/io/xpipe/ext/base/service/ServiceProtocolTypeHelper.java)
  • Duplicated block (11 lines × 2) (core/src/main/java/io/xpipe/core/JacksonMapper.java)
  • Duplicated block (13 lines × 2) (ext/system/src/main/java/io/xpipe/ext/system/incus/IncusCommandView.java)
  • Duplicated block (14 lines × 2) (ext/system/src/main/java/io/xpipe/ext/system/incus/IncusCommandView.java)
  • Duplicated block (16 lines × 2) (ext/base/src/main/java/io/xpipe/ext/base/service/FixedServiceStoreProvider.java)
  • Duplicated block (17 lines × 2) (ext/system/src/main/java/io/xpipe/ext/system/incus/IncusContainerStore.java)
  • Duplicated block (5 lines × 2) (ext/base/src/main/java/io/xpipe/ext/base/identity/IdentityApplyHubLeafProvider.java)
  • Duplicated block (5 lines × 2) (ext/base/src/main/java/io/xpipe/ext/base/identity/PasswordManagerIdentityStoreProvider.java)
  • Duplicated block (5 lines × 2) (ext/system/src/main/java/io/xpipe/ext/system/incus/IncusContainerStoreProvider.java)
  • Duplicated block (6 lines × 2) (ext/system/src/main/java/io/xpipe/ext/system/incus/IncusContainerStoreProvider.java)
  • Duplicated block (6 lines × 2) (ext/system/src/main/java/io/xpipe/ext/system/incus/IncusInstallStore.java)
  • Duplicated block (6 lines × 2) (ext/system/src/main/java/io/xpipe/ext/system/incus/IncusInstallStoreProvider.java)
  • Duplicated block (6 lines × 3) (ext/base/src/main/java/io/xpipe/ext/base/service/CustomServiceStoreProvider.java)
  • Duplicated block (7 lines × 2) (core/src/main/java/io/xpipe/core/StreamCharset.java)
  • Duplicated block (7 lines × 2) (ext/base/src/main/java/io/xpipe/ext/base/identity/IdentityConvert.java)
  • …and 31 more

New (462)

  • 1.handle (cognitive 34) (app/src/main/java/io/xpipe/app/beacon/mcp/AppMcpServer.java)
  • 1.handle (cyclomatic 18) (app/src/main/java/io/xpipe/app/beacon/mcp/AppMcpServer.java)
  • 1.scan (cognitive 22) (app/src/main/java/io/xpipe/app/util/ScanDialogAction.java)
  • AbstractServiceStore.newSession (cognitive 45) (ext/base/src/main/java/io/xpipe/ext/base/service/AbstractServiceStore.java)
  • AbstractServiceStore.newSession (cyclomatic 25) (ext/base/src/main/java/io/xpipe/ext/base/service/AbstractServiceStore.java)
  • AbstractServiceStore.requiresTunnel (cognitive 18) (ext/base/src/main/java/io/xpipe/ext/base/service/AbstractServiceStore.java)
  • AbstractServiceStoreProvider.supportsSession (cognitive 28) (ext/base/src/main/java/io/xpipe/ext/base/service/AbstractServiceStoreProvider.java)
  • Action.executeImpl (cognitive 25) (app/src/main/java/io/xpipe/app/browser/menu/impl/compress/ZipActionProvider.java)
  • ActionUrls.parse (cognitive 16) (app/src/main/java/io/xpipe/app/action/ActionUrls.java)
  • AppDistributionType.determine (cognitive 67) (app/src/main/java/io/xpipe/app/update/AppDistributionType.java)
  • AppDistributionType.determine (cyclomatic 35) (app/src/main/java/io/xpipe/app/update/AppDistributionType.java)
  • AppExtensionManager.findAndParseExtension (cognitive 22) (app/src/main/java/io/xpipe/app/core/AppExtensionManager.java)
  • AppLayoutModel.addListeners (cognitive 21) (app/src/main/java/io/xpipe/app/core/AppLayoutModel.java)
  • AppLayoutModel.addListeners (cyclomatic 16) (app/src/main/java/io/xpipe/app/core/AppLayoutModel.java)
  • AppLogs.init (cognitive 18) (app/src/main/java/io/xpipe/app/core/AppLogs.java)
  • AppMainWindowContentComp.createSimple (cognitive 18) (app/src/main/java/io/xpipe/app/comp/base/AppMainWindowContentComp.java)
  • AppMainWindowContentComp.createSimple (cyclomatic 16) (app/src/main/java/io/xpipe/app/comp/base/AppMainWindowContentComp.java)
  • AppModifiedStage.applyModes (cognitive 16) (app/src/main/java/io/xpipe/app/core/window/AppModifiedStage.java)
  • AppModifiedStage.applyModes (cyclomatic 17) (app/src/main/java/io/xpipe/app/core/window/AppModifiedStage.java)
  • AppOpenArguments.parseActions (cognitive 17) (app/src/main/java/io/xpipe/app/core/AppOpenArguments.java)
  • …and 442 more

Changes since last survey

  • 111 commits — 49 feature/other, 62 fixes

By area

  • app/src — 74 commits
  • (root) — 21 commits
  • lang/strings — 7 commits
  • dist/changelog — 4 commits
  • ext/base — 3 commits
  • app/build.gradle — 1 commit
  • ext/system — 1 commit

Notable commits

  • fix: Bitwarden fixes [stage]
  • fix: Fix AOT again [release]
  • fix: Fix NPE
  • fix: Fix NPE
  • fix: Fix NPE
  • fix: Fix NPEs
  • fix: Fix SFTP uploads failing for files on network paths (#934)
  • fix: Fix a few race conditions
  • fix: Fix antigravity launch
  • fix: Fix aot train [release]
  • fix: Fix askpass focus
  • fix: Fix beacon issues
  • fix: Fix beacon log
  • fix: Fix build [release]
  • fix: Fix busy state
  • fix: Fix default expand value for entries
  • fix: Fix dev build dependency
  • fix: Fix dev build extension loading
  • fix: Fix dialog button widths
  • fix: Fix dnd transfer modes
  • …and 91 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

xpipe-io/xpipe 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 de26d57913d6740f0fc1670450bd0f8892b7ae44 — 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-f917f263222d.