Skip to content

Latest commit

 

History

136 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

CrossDriveVideo.mp4

CrossDrive

Abandoned research project: experimental access to Mac-formatted (APFS / HFS+) drives from Windows.
Unmaintained. Provided as-is, with no warranty and no support.

Known dangerous behaviour - Status - What it does - Building - License

Caution

CrossDrive is abandoned research software. It can damage or destroy the data on drives you connect to it.

  • It is not maintained, not supported and not safe for everyday use. Bugs will not be fixed and issues will not be answered (GPL source requests excepted, see SUPPORT.md).
  • Only use it on a drive you have fully backed up, or on a disk image. Never use it on your only copy of anything.
  • It is provided "as is" under the MIT License, without warranty of any kind. You alone are responsible for how you use it and for any loss that results. See DISCLAIMER.md.

Status

CrossDrive is a research project that has been abandoned. Its source is published so that others can study it, fork it and improve it under the MIT License. There will be no further releases, fixes or support from the original author. See SUPPORT.md.

What is on main

The last published build is v1.5.35. Its exact source is the v1.5.35 tag.

main also contains later, unreleased and untested work from June 2026 that was never built into a release:

  • The app no longer uses the WSL2 path. Mounting goes only through the bundled native Windows helpers and WinFsp (native_first / native_only).
  • A native, read-only classic HFS provider.
  • More APFS read support (uncompressed decmpfs files, sparse files with holes, resource forks shown as AppleDouble ._ files), HFS+ resource forks shown the same way, and more APFS and HFS+ tests.
  • Installer and clean-machine smoke-test scripts and a production release gate.

None of this was ever validated on real drives. It has the same dangerous HFS+ behaviour described below.

Known dangerous behaviour

Read this before running any build of CrossDrive.

  • HFS+ volumes are mounted read-write by default. The native engine only mounts HFS+ read-only if the environment variable CROSSDRIVE_EXPERIMENTAL_HFS_WRITES=0 is set before CrossDrive starts.
  • A read-write HFS+ mount switches the volume's journal off. CrossDrive clears the "journaled" flag and zeroes the journal pointer in both volume headers without replaying the journal first (HfsPlusNativeReader.DisableJournalAsync, called from RawDiskEngine.cs). Changes still waiting in the journal are lost, and the volume can stop mounting on a Mac. Most Mac external drives are formatted "Mac OS Extended (Journaled)" and are affected. A user reported exactly this in #3.
  • The optional WSL2 path in v1.5.35 and earlier builds repairs and force-mounts drives. Its scripts/wsl_mount.sh runs fsck.hfsplus -f -y (automatic repair) and then mounts HFS+ with -o rw,force.
  • v1.5.35 and earlier builds ship scripts/wsl_format_and_mount.sh, which erases a drive. It reformats the target with mkfs.hfsplus and was included as a recovery tool. Never run it on a drive that holds data. (These WSL scripts are no longer on main, but they are in every published build.)
  • APFS writes are experimental and off by default (CROSSDRIVE_EXPERIMENTAL_APFS_WRITES=1 turns them on). Do not turn them on.

If you only need to read files from a Mac drive on Windows, use a maintained tool instead.

What it does

  • Attempts to mount APFS, HFS and HFS+/HFSX Mac-formatted volumes on Windows (on main, classic HFS is read-only through a native provider).
  • Exposes mounted volumes through local Windows drive letters.
  • Uses bundled native Windows helper services to read the disk.
  • v1.5.35 also kept WSL2 kernel filesystem drivers as an optional advanced path; main has removed it.
  • Keeps backend communication local through loopback HTTP and named pipes.

CoreStorage / FileVault 1 is detected but not supported.

Downloads

Past builds are kept for research only. They all include the dangerous behaviour described above.

The v1.5.35 Windows installer and portable executable are unsigned. Obtain them and CrossDrive-GPL-Source-v1.5.35.zip from the same GitHub release, and verify the SHA-256 hashes in its notes. All builds before v1.5.35 (including every v1.5.17 to v1.5.34 installer) have an unresolved GPL source provenance gap for their bundled kernel components, are no longer distributed, and should not be redistributed.

License

CrossDrive application source code is Free/Libre/Open Source Software distributed under the MIT License. See LICENSE.

Third-party dependencies, bundled prerequisites, and GPL-covered kernel/module binaries remain under their own license terms. See the third-party and GPL source notices below for the full binary-distribution license picture.

Copyright (c) 2026 George Karagioules and contributors.

Third-Party Notices

Binary distributions include third-party components under their own terms. See:

  • build/THIRD_PARTY_NOTICES.txt
  • build/GPL_SOURCE_OFFER.txt
  • docs/GPL_SOURCE_MANIFEST.md
  • build/LICENSE.GPL-2.0.txt

The v1.5.35 GPL provenance record documents the new source-built binaries. The v1.5.34 record retains the historical build-provenance gap.

Required WinFsp attribution:

WinFsp - Windows File System Proxy, Copyright (C) Bill Zissimopoulos

https://github.com/winfsp/winfsp

CrossDrive uses the WinFsp FLOSS exception path by distributing the app under MIT and shipping the unmodified WinFsp installer. Do not distribute CrossDrive as proprietary software with WinFsp unless you have a separate commercial WinFsp license.

Architecture

On main:

Electron main process -> Express API on 127.0.0.1:3001
React UI              -> polls local API for drive state
.NET native helpers   -> broker, service, and user-session drive mapping
RawDiskEngine         -> APFS/HFS/HFS+ raw-disk parsing and providers
WinFsp                -> bundled Windows filesystem presentation support

Mount modes are controlled by CROSSDRIVE_MOUNT_MODE:

  • native_first - default, using the bundled native helpers.
  • native_only - native helpers only.
  • Older values (including v1.5.35's wsl_kernel) fall back to native_first.

v1.5.35 also had an optional wsl_kernel mode that mounted drives through the bundled WSL2 kernel and filesystem modules.

Requirements

  • Windows 10/11 64-bit
  • Administrator privileges
  • WinFsp runtime, bundled as prereqs/winfsp.msi for installers
  • Node.js 20+ for development
  • .NET 9 SDK for native builds
  • v1.5.35 only: WSL2 with Ubuntu if using the optional wsl_kernel mount mode

Development

npm install
npm run start

The Vite dev server runs on http://localhost:5173. The backend binds only to 127.0.0.1:3001.

Useful commands:

npm run test
npm run fs:test
npm run installer:smoke
npm run build
npm run security:audit
npm run commercial:gate
npm run native:publish
npm run hfs:test
npm run apfs:test

Native source folders still use the historical CrossDrive.* namespace. Those names are internal implementation details; shipped app branding, helper processes, installer metadata, update feed paths, and user-visible state paths use CrossDrive.

Release

There will be no further releases. This section documents how v1.5.35 was built; build it from the v1.5.35 tag, not from main.

npm run release:candidate

This signed path requires a real Authenticode certificate. For an explicitly unsigned release candidate, run npm run release:candidate:unsigned. Both paths build and audit the matching GPL source archive. The release artifacts are:

  • dist/CrossDriveSetup.exe
  • dist/CrossDrive-<version>.exe
  • dist/CrossDrive-GPL-Source-v<version>.zip

From a clean checkout, run the following to publish all three assets and label the release unsigned:

.\scripts\publish-release.ps1 -Version 1.5.35 -AllowUnsigned

Omit -AllowUnsigned to require signing.

For production Authenticode signing, configure a real certificate with CSC_LINK / WIN_CSC_LINK and matching password environment variables.

Packaging Policy

The v1.5.35 installer ships:

  • unmodified prereqs/winfsp.msi
  • prereqs/crossdrive-kernel/wsl_kernel
  • prereqs/crossdrive-kernel/modules/apfs.ko
  • prereqs/crossdrive-kernel/modules/hfs.ko
  • prereqs/crossdrive-kernel/modules/hfsplus.ko
  • published native service, broker, and user-session helper binaries
  • LICENSE.txt
  • THIRD_PARTY_NOTICES.txt
  • GPL_SOURCE_OFFER.txt
  • GPL_SOURCE_MANIFEST.md

The unreleased native-only build on main no longer packages the WSL kernel, modules or WSL scripts. The kernel, the modules, scripts/wsl_install_modules.sh and scripts/wslSetup.js stay in this repository because they are part of the v1.5.35 GPL source record.

The installer should not ship extracted WinFsp SDK/runtime folders such as prereqs/winfsp-extract.

The bundled WSL kernel/modules are GPL-covered components. Keep build/GPL_SOURCE_OFFER.txt and docs/GPL_SOURCE_MANIFEST.md up to date for every binary release. Before distributing a public installer, publish the complete corresponding source package for those GPL-covered binaries, including the exact source revisions, kernel .config, local patches, and build commands/scripts.

Known issues

These will not be fixed by the original author.

  • #3: an HFS+ drive became unmountable on a Mac after being mounted by CrossDrive (see Known dangerous behaviour).
  • #1: some drives are detected but show no files.
  • #2: in v1.5.35, the WSL2 path looks for a distro named exactly Ubuntu and fails when it has another name (for example Ubuntu-26.04).
  • APFS writes are experimental and hidden by default.
  • Hardware-bound APFS encryption requires the original Mac.
  • CoreStorage / FileVault 1 is unsupported.
  • CrossDrive was never validated on real physical drives for general release.

About

Abandoned research project: experimental APFS/HFS+ Mac drive access for Windows. Unmaintained, no warranty, can damage data. Read the README first.

Topics

Resources

Stars

4 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages