Library / SDK
tuxera/ntfs-3g avatar
tuxera/ntfs-3g

NTFS-3G read/write mounting on Linux and Unix-like systems

NTFS-3G Safe Read/Write NTFS Driver

1,528 stars223 forksCGPL-2.0

At a glance

What is it?
NTFS-3G provides a userspace route to read and write NTFS volumes on Linux, FreeBSD, macOS and other supported systems. It supports NTFS metadata beyond basic file access, but its FUSE-based design adds dependencies and configuration decisions.
Who is it for?
NTFS-3G is appropriate for administrators and users who must read and write NTFS volumes on one of its documented platforms, especially when Windows interoperability requires ownership, permissions, ACLs or junction points. It is less suitable for users seeking only basic read access, environments that cannot support its userspace filesystem architecture, or anyone who cannot verify compatibility with their kernel and existing FUSE setup.
Can I use it commercially?
Yes, with conditions. GPL-2.0 is a copyleft licence: if you distribute software that includes it, you must release that software's source code under the same licence. Running it internally without distributing it does not trigger that obligation.
Is it still maintained?
Yes. The repository last received commits 24 days ago.
What is it written in?
Mainly C, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on October 23, 2026, and from our analysis. They are not legal advice.

Editorial analysis

Why NTFS-3G targets cross-platform NTFS access

NTFS-3G solves a specific interoperability problem: reading and writing an NTFS filesystem on Linux, FreeBSD, macOS, NetBSD, OpenIndiana, QNX and Haiku. The README names support for NTFS used by Windows NT through Windows 11 and several Windows Server releases. Its intended users are people who move an NTFS volume between Windows and a supported Unix-like system, or who need to maintain that volume without formatting it as another filesystem. The project is aimed at hardware platforms and operating systems where reliable NTFS interoperability is needed. That is a narrower goal than providing a general-purpose replacement for every filesystem operation, and it explains why the project concentrates on NTFS metadata, ownership and Windows interoperability. The driver is implemented in C and follows a hybrid kernel/user space filesystem-driver approach. It also includes the ntfsprogs utilities for inspecting, repairing, formatting, resizing and recovering NTFS data.

The hybrid driver architecture and its data path

The README identifies NTFS-3G as a hybrid kernel/user space filesystem driver. In practical terms, the project can use a FUSE-based path while providing its own FUSE integration through the fuse-lite library. The repository layout separates the filesystem driver sources under src/, the shared filesystem library under libntfs-3g/, the lightweight FUSE library under libfuse-lite/, and command-line tools under ntfsprogs/. The documented configuration also provides an external FUSE mode, so the architecture is not limited to one integration choice. A mounted NTFS volume is exposed through a filesystem path such as /mnt/windows. The driver handles filesystem operations against that NTFS device, while applications use the mounted path through the operating system's normal filesystem interface. The README does not document the internal request path, thread model or buffering behavior in enough detail to make claims beyond that separation.

Installing NTFS-3G and mounting the first volume

The README recommends using the distribution package because most distributions have an up-to-date NTFS-3G package. That avoids requiring a source build for the usual case. For a customized installation, the documentation says to obtain the released source tarball, ensure that basic development tools and kernel headers with the FUSE kernel module are available, unpack the archive, and run the following commands. The build does not require the FUSE user space package according to the README.

bash
./configure
make
make install

The README says to use `sudo make install` when the current user is not root. For a first read-write mount, replace the example device and mount point with the actual values. Unmount the volume first if it is already mounted, then run one of these commands as root:

bash
mount -t ntfs-3g /dev/sda1 /mnt/windows

The alternative invocation documented by the project is:

bash
ntfs-3g /dev/sda1 /mnt/windows

The reader should see the NTFS volume mounted at the selected mount point with read-write access. The manual page is identified by the README as the place for additional mount options. The example is not a substitute for checking the device path, filesystem state, mount permissions or any distribution-specific package behavior.

Boot mounting and test builds without installation

NTFS-3G can be tested without replacing an existing installation. The documented workflow configures and builds the source, then activates the generated scripts from the src directory. The test invocation is run as root and accepts the same general mount form as the installed command.

bash
./configure
make
bash
src/ntfs-3g /dev/sda1 /mnt/windows

The README says this creates the `ntfs-3g` and `lowntfs-3g` scripts in the src directory. To finish the test, unmount the volume in the usual way:

bash
umount /dev/sda1

For persistent mounting, the README instructs administrators to put an entry at the end of `/etc/fstab`:

text
/dev/sda1 /mnt/windows ntfs-3g defaults 0 0

That placement requirement is explicit in the documentation. The example does not specify a mount option for error handling, automatic checking or device discovery. The README points to the manual page for other options, so teams that need stricter startup failure behavior or different defaults will need project-specific configuration beyond this example.

NTFS metadata, ACLs and compression support

Beyond ordinary file and directory access, NTFS-3G documents support for file ownership and permissions, POSIX ACLs, junction points and extended attributes. The source build has explicit switches for POSIX ACL support and system extended attribute mappings. These features matter when a volume moves between Windows and a Unix-like environment because access rules and filesystem metadata are not represented by file contents alone. The README also states that internally compressed files can be created, with parameter files in the `.NTFS-3G` directory potentially required, and that the newer compressed file formats available in Windows 10 can be read through a plugin. This is a mixed model. Some compression-related behavior is tied to configuration or plugins rather than being presented as an unconditional default. The `--disable-plugins` option can remove plugin support, while `--enable-xattr-mappings` and `--enable-posix-acls` enable particular build configurations. A prospective user should therefore distinguish between capabilities visible in a default build and capabilities selected at configure time.

Configuration choices and the FUSE dependency

The configure step exposes several choices that determine what gets built. `--disable-ntfsprogs` omits the utilities, `--enable-extras` builds more of them, `--disable-plugins` disables plugin support, and the ACL and extended-attribute options enable specific mappings. The README also lists partial make targets: `make libntfs`, `make libs`, `make drivers` and `make ntfsprogs`. The final target builds ntfsprogs and libntfs-3g without drivers. This separation is useful when a deployment needs only part of the project, but it also means that the expected feature set depends on the selected target and configure options. The documented external FUSE choice is an actual alternative to the bundled approach. With `--with-fuse=external`, the Linux default is overridden in favor of external FUSE. The README does not specify which external package versions are compatible or how this choice performs, so an adopter must compare that dependency with the distribution package or the bundled `fuse-lite` path rather than assuming the choices are interchangeable.

Operational limits and maintenance context

NTFS-3G is not a replacement for every NTFS administration task, and its own utilities have deliberately separate purposes. `ntfsfix` attempts to fix an NTFS partition and asks Windows to check NTFS, while `mkntfs` formats a partition. `ntfsresize` resizes volumes, `ntfsclone` creates or restores partition images, and `ntfsrecover` recovers updates committed by Windows but not synchronized before an interruption. These names describe the documented responsibilities; the README does not promise that every repair operation can be completed without Windows, or that recovery succeeds in every damaged-volume case. The project is not archived, and the last push was on 2026-09-29. Recent releases include 2026.9.28, 2026.7.7 and 2026.9.18. That maintenance record supports checking release notes for the exact platform and feature changes, but it does not remove the need to inspect the build and mounting configuration. NTFS-related components are distributed under GPL version 2 or a later version, while `fuse-lite` is under LGPLv2. Those are licensing terms to account for in redistribution and integration, not a legal conclusion.

Choosing NTFS-3G against an external FUSE setup

The clearest documented alternative is to select external FUSE instead of the default Linux integration. NTFS-3G normally documents a build that can use its own FUSE-related components, including the fuse-lite library. Passing `--with-fuse=external` changes the dependency direction by asking the build to use external FUSE. The project itself does not present this as a feature comparison with performance numbers, so the choice cannot be reduced to a claim that one mode is faster. The practical distinction is packaging and integration. A system administrator may prefer a distribution-managed external FUSE package if that is already part of the operating system's support policy. A user building an isolated or customized environment may prefer the default path because the README says NTFS-3G no longer requires the FUSE user space package. Either route still requires the kernel to include the FUSE kernel module according to the installation instructions. Neither route removes the need to verify mount behavior, permissions and volume state.

Editorial conclusion

NTFS-3G is appropriate for administrators and users who must read and write NTFS volumes on one of its documented platforms, especially when Windows interoperability requires ownership, permissions, ACLs or junction points. It is less suitable for users seeking only basic read access, environments that cannot support its userspace filesystem architecture, or anyone who cannot verify compatibility with their kernel and existing FUSE setup. Check the documented build dependencies, the required FUSE kernel support, and the volume mounting procedure before adopting it. On the documented edge branch, the last push was on 2026-09-29, and the listed releases include 2026.9.28, 2026.9.18 and 2026.7.7.

Frequently asked questions

How do I install NTFS-3G and mount an NTFS volume?

The README recommends installing the distribution package. For a source build, run `./configure`, `make` and `make install`, then mount the device with `mount -t ntfs-3g /dev/sda1 /mnt/windows` or `ntfs-3g /dev/sda1 /mnt/windows` as root.

Does NTFS-3G require the FUSE user space package?

The README states that NTFS-3G does not require the FUSE user space package anymore. It does require basic development tools for a source build and says that the kernel must include the FUSE kernel module.

Can NTFS-3G mount an NTFS filesystem at boot?

Yes. The README documents adding `/dev/sda1 /mnt/windows ntfs-3g defaults 0 0` at the end of `/etc/fstab`. The device and mount point are examples that must be changed for the actual system.

Official sources

  1. License: GPL-2.0
  2. Project website
  3. README
  4. Releases
  5. tuxera/ntfs-3g on GitHub
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/tuxera-ntfs-3g.svg)](https://hysenlabs.com/projects/tuxera-ntfs-3g)

Was this useful?