fs — File System
Reading, writing, and manipulating files and directories in Node.js — fs/promises, streams, watching files, and common patterns.
What it is, in plain English: The fs module (built into Node.js) provides APIs for working with the file system. Use fs/promises for async file operations with async/await. readFile() reads an entire file into memory. writeFile() writes or creates a file. For large files, use streams (createReadStream/createWriteStream) to process data incrementally. fs.watch() monitors files for changes.
Reading and writing files in Node.js
Node.js only. The
fs module doesn't exist in browsers —
use browser storage APIs (localStorage, IndexedDB, File System Access API) there.
Import the module
// ESM (recommended — .mjs files or "type": "module" in package.json):
import { readFile, writeFile, mkdir, readdir, stat, unlink, rename } from "fs/promises";
import { existsSync } from "fs"; // sync version (ok for startup checks)
// CommonJS (.js files without "type": "module"):
const { readFile, writeFile } = require("fs/promises");Reading files
// Read as string:
const text = await readFile("notes.txt", "utf-8");
console.log(text);
// Read JSON:
const raw = await readFile("config.json", "utf-8");
const conf = JSON.parse(raw);
console.log(conf.port); // 3000
// Read as Buffer (binary — images, PDFs etc.):
const bytes = await readFile("photo.jpg"); // no encoding = Buffer
console.log(bytes.byteLength, "bytes");
// Handle missing files:
try {
const data = await readFile("missing.txt", "utf-8");
} catch (e) {
if (e.code === "ENOENT") console.log("File not found");
else throw e; // something unexpected — re-throw
}Writing files
// Write string (creates file if it doesn't exist, overwrites if it does):
await writeFile("output.txt", "Hello, World!", "utf-8");
// Write JSON:
const data = { name: "Alice", score: 95 };
await writeFile("user.json", JSON.stringify(data, null, 2));
// Append (add to end of file):
import { appendFile } from "fs/promises";
await appendFile("log.txt", `[${new Date().toISOString()}] Server started
`);Directories
// Create directory (including parents):
await mkdir("dist/css/fonts", { recursive: true }); // won't throw if exists
// List directory:
const files = await readdir("./src");
console.log(files); // ["app.js", "utils.js", "style.css"]
// Filter to only JS files:
const jsFiles = files.filter(f => f.endsWith(".js"));
// Delete a file:
await unlink("old-file.txt");
// Rename / move:
await rename("old-name.txt", "new-name.txt");
await rename("file.txt", "archive/file.txt"); // also moves across dirs
Try It Yourself
Official Sources
- Node.js Docs — File system (fs)
- Node.js Docs — File system promises API
- Node.js Docs — stream.pipeline()
The Codex links only to official documentation and the ECMAScript specification. No third-party tutorials.