CrossDriveVideo.mp4
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.
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.
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.
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=0is 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 fromRawDiskEngine.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.shrunsfsck.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 withmkfs.hfsplusand was included as a recovery tool. Never run it on a drive that holds data. (These WSL scripts are no longer onmain, but they are in every published build.) - APFS writes are experimental and off by default
(
CROSSDRIVE_EXPERIMENTAL_APFS_WRITES=1turns 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.
- 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;
mainhas removed it. - Keeps backend communication local through loopback HTTP and named pipes.
CoreStorage / FileVault 1 is detected but not supported.
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.
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.
Binary distributions include third-party components under their own terms. See:
build/THIRD_PARTY_NOTICES.txtbuild/GPL_SOURCE_OFFER.txtdocs/GPL_SOURCE_MANIFEST.mdbuild/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.
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 tonative_first.
v1.5.35 also had an optional wsl_kernel mode that mounted drives through the
bundled WSL2 kernel and filesystem modules.
- Windows 10/11 64-bit
- Administrator privileges
- WinFsp runtime, bundled as
prereqs/winfsp.msifor installers - Node.js 20+ for development
- .NET 9 SDK for native builds
- v1.5.35 only: WSL2 with Ubuntu if using the optional
wsl_kernelmount mode
npm install
npm run startThe 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:testNative 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.
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:candidateThis 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.exedist/CrossDrive-<version>.exedist/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 -AllowUnsignedOmit -AllowUnsigned to require signing.
For production Authenticode signing, configure a real certificate with
CSC_LINK / WIN_CSC_LINK and matching password environment variables.
The v1.5.35 installer ships:
- unmodified
prereqs/winfsp.msi prereqs/crossdrive-kernel/wsl_kernelprereqs/crossdrive-kernel/modules/apfs.koprereqs/crossdrive-kernel/modules/hfs.koprereqs/crossdrive-kernel/modules/hfsplus.ko- published native service, broker, and user-session helper binaries
LICENSE.txtTHIRD_PARTY_NOTICES.txtGPL_SOURCE_OFFER.txtGPL_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.
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
Ubuntuand fails when it has another name (for exampleUbuntu-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.