xpipe-io/xpipe
64.8
Adequate · 25 September 2026
91.8k
lines of production code
Java
primary language
5
measurements over time
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.