# mkfiletree

> Make a tree of files and directories from data defined in an object

Latest version **3.1.12** (published 2026-09-08) · MIT license · 0 weekly downloads

## Install

```sh
npm install mkfiletree
pnpm add mkfiletree
yarn add mkfiletree
bun add mkfiletree
```

## Health

**Score 65/100 (B)** — status: active.

Positive: esm support; no vulnerabilities; has provenance; recently updated; high maintenance score.

Warnings: low downloads; no types.

## Facts

| | |
|---|---|
| Version | 3.1.12 |
| Published | 2026-09-08 |
| First published | 2012-08-16 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | ESM + CommonJS |
| Node | >=20 |
| Dependencies | 2 |
| Unpacked size | 20 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Provenance | attested (GitHub Actions) |
| GitHub stars | 10 |
| Author | Rod Vagg |
| Maintainers | rvagg |
| Keywords | temp, tree, test, serialize |

## Links

- npm: https://www.npmjs.com/package/mkfiletree
- Repository: https://github.com/rvagg/mkfiletree
- Homepage: https://github.com/rvagg/mkfiletree#readme
- Issues: https://github.com/rvagg/mkfiletree/issues
- npm.io page: https://npm.io/package/mkfiletree

## Dependencies (2)

- [temp](https://npm.io/package/temp.md) ^0.9.4
- [rimraf](https://npm.io/package/rimraf.md) ^6.1.3

## Alternatives

- [duck](https://npm.io/package/duck.md) — 4.2M weekly downloads
- [ava](https://npm.io/package/ava.md) — 560.2K weekly downloads
- [storybook-addon-module-mock](https://npm.io/package/storybook-addon-module-mock.md) — 71.7K weekly downloads
- [@ethereum-waffle/mock-contract](https://npm.io/package/@ethereum-waffle/mock-contract.md) — 40.0K weekly downloads
- [aws-elasticsearch-connector](https://npm.io/package/aws-elasticsearch-connector.md) — 37.4K weekly downloads

## Recent versions

- 3.1.12 (latest) — 2026-09-08
- 3.1.11 — 2026-09-08
- 3.1.10 — 2026-08-10
- 3.1.9 — 2026-07-30
- 3.1.8 — 2026-07-27
- 3.1.7 — 2026-07-21
- 3.1.6 — 2026-07-02
- 3.1.5 — 2026-06-23
- 3.1.4 — 2026-06-22
- 3.1.3 — 2026-06-04
- 3.1.2 — 2026-04-29
- 3.1.1 — 2026-04-28
- 3.1.0 — 2026-02-16
- 3.0.0 — 2023-07-01
- 2.0.0 — 2019-06-22
- … 6 more at https://npm.io/package/mkfiletree/versions

## README

# mkfiletree

[![NPM](https://nodei.co/npm/mkfiletree.svg?style=flat&data=n,v&color=blue)](https://nodei.co/npm/mkfiletree/)

Serialize an object to a file/directory tree. Particularly useful for making test fixtures where you need to create a non-trivial tree of files and don't want to have to mock out `fs`. **See [readfiletree](https://github.com/rvagg/node-readfiletree) for file tree deserialization.**

## Requirements

Node.js >= 20

## API

### await makeTemp(prefix, tree)

Make a directory & file tree in the system's temporary directory, under a uniquely named subdirectory prefixed with the `prefix` argument. The returned value will be a `dir` telling you the full path to the root directory created for you.

Using both *mkfiletree* and *readfiletree* we can do the following:

```js
import * as mkfiletree from 'mkfiletree'
import { readfiletree } from 'readfiletree'

const directoryContents = {
  'adir': {
    'one.txt': '1\n2\n3\n',
    'two.txt': 'a\nb\nc\n',
    'deeper': {
      'depths.txt': 'whoa...'
    }
  },
  'afile.txt': 'file contents'
}

const dir = await mkfiletree.makeTemp('testfiles', directoryContents)
const obj = await readfiletree(dir)
console.log(obj)
```

The directory structure created above looks like the following:

```
$ find /tmp/testfiles11240-23530-r7rs3 -type f -exec sh -c "echo '\n{}: ' && cat '{}'" \;
  /tmp/testfiles11240-23530-r7rs3/afile.txt:
    file contents
    /tmp/testfiles11240-23530-r7rs3/adir/deeper/depths.txt:
    whoa...
    /tmp/testfiles11240-23530-r7rs3/adir/two.txt:
    a
    b
    c

    /tmp/testfiles11240-23530-r7rs3/adir/one.txt:
    1
    2
    3

```

And the output of the program should be the same as the input to *mkfiletree*:

```js
{
  'adir': {
    'one.txt': '1\n2\n3\n',
    'two.txt': 'a\nb\nc\n',
    'deeper': {
      'depths.txt': 'whoa...'
    }
  },
  'afile.txt': 'file contents'
}
```

### await cleanUp()

Clean up any temporary directories created with `makeTemp()` since the last `cleanUp()` call or the beginning of the current process.

### await make(root, tree)

Same as `makeTemp()` but you specify the exact root path *to be created* which will contain your directory tree. The returned value will be a `dir` telling you the full path to the root directory created for you.

Directories created with `make()` won't be removed with a `cleanUp()` call.

## License

**mkfiletree** is Copyright (c) 2014 Rod Vagg [@rvagg](https://github.com/rvagg) and licenced under the MIT licence. All rights not explicitly granted in the MIT license are reserved. See the included LICENSE.md file for more details.

---
_Source: https://npm.io/package/mkfiletree · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
