Skip to main content
Home

@cross/fs@0.1.12
Built and signed on GitHub Actions

Cross Runtime filesystem operations for JavaScript and TypeScript.

This package works with Node.js, Deno, Bun
This package works with Node.js
This package works with Deno
This package works with Bun
JSR Score
82%
Published
a month ago (0.1.12)

@cross/fs

A cross-runtime utility library offering best practices for file system operations in JavaScript and TypeScript. Available for Node.js, Deno, Bun, and browsers at jsr.io/@cross/fs.

Automated testing across Node.js (>=18), Deno, and Bun ensures cross-runtime reliability of all included methods. The library includes useful convenience functions such as which, find, diskusage, size and hash. It uses selected parts of node:fs/promises as a foundation for core operations, strategically diverging to offer performance optimizations or broader compatibility.

For cross rutime path operations, jsr.io/@std/path will cover most scenarios, this library focuses on the file system operations.

Modules

Stat

Example:

import { exists, find, hash, which } from "@cross/fs/stat";

// Check if my/file exists
console.log(await exists("my/file"));
// false

// Search for package.json recursively, starting from parent folder
console.log(await find("../", (path) => path.endsWith("package.json")));
// ["/home/.../package.json","/home/.../.../package.json"]

// Get the sha256 hash of a file
console.log(await hash("LICENSE.md", "sha256"));
// f8c9819eb0c322eef28a0d0948877df068276f487b81326af842d3a20e7c9bbc

// Find the installation folder of bun
console.log(await which("bun"));
// /home/hexagon/.bun/bin/bun

Methods:

Method Deno Node Bun Base implementation
stat X X X runtime native
lstat X X X node:fs/promises
exists X X X custom
isDir X X X custom
isFile X X X custom
isSymlink X X X custom
size X X X custom
find X X X custom
diskusage X X X custom
hash X X X custom
which X X X custom

Io

Example:

import { readFile } from "@cross/fs/io";

console.log(await readFile("my/file"));
// -> My file content

Methods:

Method Deno Node Bun Base implementation
appendFile X X X node:fs/promises
readFile X X X node:fs/promises
writeFile X X X node:fs/promises

Ops

Example:

import { dirpath, mktempdir } from "@cross/fs/ops";

console.log(await mktempdir("my-prefix"));
// -> /tmp/my-prefix-luaepc2x-74plp8j8tf7-gzaurxst88g

console.log(await dirpath("config"));
// -> /home/user/.config

Methods:

Method Deno Node Bun Base implementation
FsWatcher X X X custom
unlink X X X node:fs/promises
dirpath X X X @cross/dir
mkdir X X X node:fs/promises
cwd X X X custom
chdir X X X custom
mktempdir X X X custom
rm X X X node:fs/promises
rmdir X X X node:fs/promises
cp X X X node:fs/promises
tempfile X X X custom
link X X X node:fs/promises
unlink X X X node:fs/promises
readdir X X X node:fs/promises
readlink X X X node:fs/promises
realpath X X X node:fs/promises
rename X X X node:fs/promises
chmod X X X node:fs/promises
chown X X X node:fs/promises
rename X X X node:fs/promises
truncate X X X node:fs/promises
open X X X node:fs/promises
access X X X node:fs/promises
constants X X X node:fs/promises

Types:

Method Deno Node Bun Base implementation
FSWatcher X X X node:fs/promises

Examples:

const watcher = FsWatcher();
for await (const event of watcher.watch(tempdir)) {
  if (event.kind === "modify" && filePath == event.paths[0]) {
    console.log(event);
    break; // Stop watching after the first creation event
  }
}
watcher.close();
Built and signed on
GitHub Actions

New Ticket: Report package

Please provide a reason for reporting this package. We will review your report and take appropriate action.

Please review the JSR usage policy before submitting a report.

Add Package

deno add jsr:@cross/fs

Import symbol

import * as fs from "@cross/fs";
or

Import directly with a jsr specifier

import * as fs from "jsr:@cross/fs";

Add Package

pnpm i jsr:@cross/fs
or (using pnpm 10.8 or older)
pnpm dlx jsr add @cross/fs

Import symbol

import * as fs from "@cross/fs";

Add Package

yarn add jsr:@cross/fs
or (using Yarn 4.8 or older)
yarn dlx jsr add @cross/fs

Import symbol

import * as fs from "@cross/fs";

Add Package

npx jsr add @cross/fs

Import symbol

import * as fs from "@cross/fs";

Add Package

bunx jsr add @cross/fs

Import symbol

import * as fs from "@cross/fs";