New:Microsoft Teams Notifications Are Now Available in Socket.Learn more
Get Started

@zenfs/dom

Package Overview
Dependencies
Maintainers
1
Versions
63
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@zenfs/dom

DOM backends for ZenFS

latest
Source
npmnpm
Version
1.2.14
Version published
Weekly downloads
7.4K
38.14%
Maintainers
1
Weekly downloads
 
Created
Source

ZenFS DOM Backends

ZenFS backends for DOM APIs. DOM APIs are only available natively in browsers.

Please read the ZenFS core documentation!

Backends

  • WebStorage stores files in a Storage object, like localStorage and sessionStorage.
  • IndexedDB stores files into an IndexedDB object database.
  • WebAccess uses the File System Access API.
  • XML uses an XMLDocument to store files, which can be appended to the DOM.

For more information, see the API documentation.

Usage

You can use the backends from @zenfs/dom just like the backends from @zenfs/core:

import { configure, fs } from '@zenfs/core';
import { WebStorage } from '@zenfs/dom';

await configureSingle({ backend: WebStorage, storage: localStorage });

if (!fs.existsSync('/test.txt')) {
	fs.writeFileSync('/test.txt', 'This will persist across reloads!');
}

const contents = fs.readFileSync('/test.txt', 'utf-8');
console.log(contents);

XML

The XML backend can be used to create a file system which lives in the DOM:

<!-- ... -->
<fs />
<!-- ... -->
import { configure, fs } from '@zenfs/core';
import { XML } from '@zenfs/dom';

await configureSingle({
	backend: XML,
	root: document.querySelector('fs'), // root is optional
});

fs.writeFileSync('/test.txt', 'This is in the DOM!');

If you choose to add the root element to the DOM by appending it, you will likely want to hide its contents (display:none works well).

The root option is not required. If you choose not to pass in a root, you can always append it to the DOM later:

import { configure, fs, mounts } from '@zenfs/core';
import { XML } from '@zenfs/dom';

await configureSingle({ backend: XML });

const { root } = mounts.get('/');

document.body.append(root);

This may disrupt use cases that involve saving the HTML file locally and loading it later, since a new element is created when configuring. In contrast, when using an existing element and passing in a root, the existing element's contents will be preserved.

Keywords

filesystem

FAQs

Package last updated on 07 Sep 2026

Related posts