memfs provides JavaScript file system utilities for Node.js and browsers, including an in-memory implementation of the Node.js fs API and the browser File System API. It’s useful for testing or running code that expects filesystem behavior without writing to a real disk, and it also includes adapters between the Node fs API and the browser File System API.
Project status
- Actively maintained, GitHub activity is recent (upstream push on 2026-09-02), and the memfs repository shows continuous patch and feature updates through late August 2026.
- Update cadence appears steady, with multiple updates in August 2026 (roughly every few days to a couple of weeks) and additional watcher-related updates in early July 2026.
AI summary generated
Recent updates
v4.71.0
v4.71.0 focuses on normalizing errors to be more Node.js-like, including standardized `err.code`, `err.errno`, `err.syscall`, and path-related fields. The change also restructures error creation into new core modules and updates how errors propagate across watchers and worker boundaries.
BreakingFeaturesv4.70.0
This release adds a hard cap of 40 symbolic link hops during resolution and improves the algorithm used for `.open()` operations. The diff also shows several related behavior changes around trailing slashes, `O_NOFOLLOW`, and error-path reporting that are not described in the release notes.
BreakingFeaturesv4.69.1
Release v4.69.1 is a refactor aimed at improving how dependencies are shared across the memfs monorepo packages (PR #1281). The release notes only mention dependency refactoring, but the diff shows multiple code paths were moved or re-exported between packages, which can affect runtime behavior and deep imports.
v4.69.0
Release v4.69.0 adds improved support for the POSIX O_NOFOLLOW flag. The implementation updates core path resolution in Superblock.open to detect symlinks and throws an ELOOP error, with new tests covering open/openSync and stream and promises APIs.
BreakingFeaturesv4.68.2
Release v4.68.2 is a bug fix release that changes append-mode write behavior to match Linux. The code now treats O_APPEND as always writing to the current end of the file, regardless of any caller-provided position.
Breakingv4.68.1
This release changes memfs unlink behavior so that attempting to unlink a directory does not remove it. The release notes mention empty directories specifically. The code also broadens the restriction to all directory cases and standardizes the thrown error to an EPERM-style error.
v4.68.0
v4.68.0 adds support for a node creation time (birth time), exposing it through Node and the fs-compatible Stats APIs. The change introduces Node.btime, includes it in serialization, and updates stats generation so reported birthtime values are stable and distinct from ctime.
BreakingFeaturesv4.67.0
Release v4.67.0 primarily updates the memfs Git File System Access (git-fsa) browser demo to persist the user-selected directory handle and reuse it on later visits. The code diff also includes several demo build/runtime changes (IndexedDB handle storage, worker removal, and webpack/dev-server adjustments) that are not mentioned in the release notes.
Featuresv4.66.1
Release v4.66.1 is a small build-focused change across the memfs monorepo. The only functional-area change shown in the diff is enabling inline sources for sourcemaps (to embed sources in published sourcemaps), alongside the usual version bumps across packages.
v4.66.0
This release updates memfs to better handle Windows drive-letter file URLs and adjusts the package metadata around tslib peer dependencies. In addition to the documented behavioral fix, the implementation changes the underlying POSIX/Windows URL-to-path conversion logic and adds targeted tests.
v4.65.0
Release v4.65.0 refactors directory listing in the File System Access API adapter (FsaNodeFs) to support the `recursive` option. It also adds additional test coverage around FileHandle behavior after unlinking.
Featuresv4.64.0
Release v4.64.0 is described in the notes as “Fsa watch bridge improvements”. The actual diff shows broader watch-related changes across multiple packages, including new/extended `watch()` options (signal, ignore, throwIfNoEntry, buffer encoding) and updated abort semantics for `fs.promises.watch`.
Featuresv4.63.0
This release introduces a Node.js fs.watch to File System Access (FSA) watcher bridge (“node-to-FSA watcher bridge”). It adds a new NodeFileSystemObserver implementation, wires it into the exports, and extends the fsa-to-node adapter behavior to support fs.watch/watchFile so events can flow across both stacks.
Featuresv4.62.0
This release adds an FSA-to-Node watcher bridge, implementing Node-like `fs.watch` and `fs.watchFile` functionality for the `fs-fsa-to-node` adapter using the browser/FS `FileSystemObserver` (and polling for stat changes). New watcher classes (`FsaNodeFsWatcher`, `FsaNodeStatWatcher`) are introduced and wired into `FsaNodeFs` along with a configurable observer constructor. The release notes only mention the bridge at a high level.
Featuresv4.61.0
This release (v4.61.0) primarily introduces a real implementation of `FileSystemObserver` in `fs-fsa`, replacing previously unimplemented methods. It also adds extensive tests to validate observer behavior, including Windows-specific hardening for test reliability.
BreakingFeatures