A cross-platform native Node.js module for retrieving filesystem metadata, including mount points, volume information, and space utilization statistics.
Built and supported by PhotoStructure.
Cross-platform support:
GVfs
mount support where available)File and directory hidden attribute support:
ESM and CJS support
Full TypeScript type definitions
Non-blocking async native implementations
Timeout handling for wedged network volumes
Compatible with all current Node.js and Electron versions via Node-API v9 and prebuildify
Comprehensive test coverage
npm install @photostructure/fs-metadata
import {
getVolumeMountPoints,
getVolumeMetadata,
} from "@photostructure/fs-metadata";
// List all mounted volumes
const mountPoints = await getVolumeMountPoints();
console.dir({ mountPoints });
// Get metadata for a specific volume
const volumeMetadata = await getVolumeMetadata(mountPoints[0]);
console.dir({ volumeMetadata });
If you're using CommonJS:
const {
getVolumeMountPoints,
getVolumeMetadata,
} = require("@photostructure/fs-metadata");
// Usage is the same as the ESM example above
// (except of course no top-level awaits!)
Set NODE_DEBUG=fs-meta
or NODE_DEBUG=photostructure:fs-metadata
. The native debuglog determines if debug logging is enabled. Debug messages from both JavaScript and native code are sent to stderr
.
Operations use a default timeout, which may need adjustment for slower devices like optical drives (which can take 30+ seconds to spin up).
Windows can block system calls when remote filesystems are unhealthy due to host downtime or network issues. To handle this, we use a separate thread per mountpoint to check volume health status. While this approach uses more resources than the async N-API thread, it enables reliable timeouts for operations that would otherwise hang indefinitely.
Timeout duration may apply per-operation or per-system call, depending on the implementation.
Each platform handles system volumes differently:
C:
is both a system volume and typical user storageThis library uses heuristics to identify system volumes. See Options for default values and customization.
Note: getAllVolumeMetadata()
returns all volumes on Windows but only non-system volumes elsewhere by default.
This project is licensed under the MIT License.
We welcome contributions! Please see our Contributing Guide for more details.
For security-related issues, please refer to our Security Policy.