Node.js "fs" and browser "File System API" adapters and in-memory implementations 👍
2,093
stars
2,152
commits
TypeScript
primary language
Sep 9, 2026
updated
JavaScript file system utilities for Node.js and browser. Implementation of in-memory Node.js fs module API and in-memory browser File System API, as well as adapters from fs module to File Sytem API and from File Sytem API to fs module.
npm i memfs
fs APIfs to File System (Access) API adapterfs adaptersnapshot utilityprint directory tree to terminalAll file-watching APIs are implemented on both sides of the fs and File System API divide:
| Feature | Package | Notes |
|---|---|---|
fs.watch — recursive, encoding, signal, throwIfNoEntry, ignore | @jsonjoy.com/fs-node | 'error'/'close' events, ref()/unref() |
fs.watchFile / fs.unwatchFile | @jsonjoy.com/fs-node | polling, bigint, Node's reappearance semantics |
fs.promises.watch async iterator | @jsonjoy.com/fs-node | maxQueue, overflow, AbortError on abort |
FileSystemObserver | @jsonjoy.com/fs-fsa | deterministic OPFS profile: precise records, real "moved" records, microtask batching |
fs.watch/fs.watchFile over a real FSA directory | @jsonjoy.com/fs-fsa-to-node | works over OPFS in Chrome 133+ via the native observer |
FileSystemObserver over any fs | @jsonjoy.com/fs-node-to-fsa | best-effort profile: renames stat-classified, no "moved" records |
Intentional divergences from real watchers (the in-memory backend is deterministic, so platform unreliability is not emulated):
filename is never null.FSWatcher delivers events synchronously inside the mutating operation, whereas
real Node defers to the event loop; the FileSystemObserver batches per microtask, as the spec
requires.fs in browser, creates a .tar file in real folderfs in browser, synchronous API, writes to real folderunionfs - creates a union of multiple filesystem volumesfs-monkey - monkey-patches Node's fs module and require functionlinkfs - redirects filesystem pathsspyfs - spies on filesystem actionsApache 2.0
(top 30 of 68)
TypeScript
98.6%
Node.js "fs" and browser "File System API" adapters and in-memory implementations 👍
2,093
stars
2,152
commits
TypeScript
primary language
Sep 9, 2026
updated
JavaScript file system utilities for Node.js and browser. Implementation of in-memory Node.js fs module API and in-memory browser File System API, as well as adapters from fs module to File Sytem API and from File Sytem API to fs module.
npm i memfs
fs APIfs to File System (Access) API adapterfs adaptersnapshot utilityprint directory tree to terminalAll file-watching APIs are implemented on both sides of the fs and File System API divide:
| Feature | Package | Notes |
|---|---|---|
fs.watch — recursive, encoding, signal, throwIfNoEntry, ignore | @jsonjoy.com/fs-node | 'error'/'close' events, ref()/unref() |
fs.watchFile / fs.unwatchFile | @jsonjoy.com/fs-node | polling, bigint, Node's reappearance semantics |
fs.promises.watch async iterator | @jsonjoy.com/fs-node | maxQueue, overflow, AbortError on abort |
FileSystemObserver | @jsonjoy.com/fs-fsa | deterministic OPFS profile: precise records, real "moved" records, microtask batching |
fs.watch/fs.watchFile over a real FSA directory | @jsonjoy.com/fs-fsa-to-node | works over OPFS in Chrome 133+ via the native observer |
FileSystemObserver over any fs | @jsonjoy.com/fs-node-to-fsa | best-effort profile: renames stat-classified, no "moved" records |
Intentional divergences from real watchers (the in-memory backend is deterministic, so platform unreliability is not emulated):
filename is never null.FSWatcher delivers events synchronously inside the mutating operation, whereas
real Node defers to the event loop; the FileSystemObserver batches per microtask, as the spec
requires.fs in browser, creates a .tar file in real folderfs in browser, synchronous API, writes to real folderunionfs - creates a union of multiple filesystem volumesfs-monkey - monkey-patches Node's fs module and require functionlinkfs - redirects filesystem pathsspyfs - spies on filesystem actionsApache 2.0
(top 30 of 68)
TypeScript
98.6%