# make-dir

> Make a directory and its parents if needed - Think `mkdir -p`

Latest version **5.1.0** (published 2025-09-10) · MIT license · 0 weekly downloads

> **Better alternative:** See documentation for alternatives (https://github.com/AikidoSec/module-replacements/blob/main/docs/mkdirp)

## Install

```sh
npm install make-dir
pnpm add make-dir
yarn add make-dir
bun add make-dir
```

## Health

**Score 55/100 (C)** — status: stable.

Positive: has types; esm support; no vulnerabilities; high maintenance score; high quality score.

Warnings: low downloads.

Negative: stale.

## Facts

| | |
|---|---|
| Version | 5.1.0 |
| Published | 2025-09-10 |
| First published | 2017-05-09 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | bundled |
| Module format | ESM |
| Node | >=18 |
| Dependencies | 0 |
| Unpacked size | 9.3 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 480 |
| Author | Sindre Sorhus |
| Maintainers | sindresorhus |
| Keywords | mkdir, mkdirp, make, directories, folders, directory, folder, path, parent, parents, intermediate, recursively, recursive, create, fs, filesystem, file-system |

## Links

- npm: https://www.npmjs.com/package/make-dir
- Repository: https://github.com/sindresorhus/make-dir
- Homepage: https://github.com/sindresorhus/make-dir#readme
- Issues: https://github.com/sindresorhus/make-dir/issues
- Funding: https://github.com/sponsors/sindresorhus
- npm.io page: https://npm.io/package/make-dir

## Alternatives

- [unionfs](https://npm.io/package/unionfs.md) — 2.2M weekly downloads
- [path-starts-with](https://npm.io/package/path-starts-with.md) — 35.9K weekly downloads
- [redzip](https://npm.io/package/redzip.md) — 1.2K weekly downloads
- [vscode-anymatch](https://npm.io/package/vscode-anymatch.md) — 848 weekly downloads
- [@ledgerhq/coin-filecoin](https://npm.io/package/@ledgerhq/coin-filecoin.md) — 793 weekly downloads

## Recent versions

- 5.1.0 (latest) — 2025-09-10
- 5.0.0 — 2024-05-02
- 4.0.0 — 2023-06-23
- 3.1.0 — 2020-04-22
- 3.0.2 — 2020-02-12
- 3.0.1 — 2020-02-12
- 3.0.0 — 2019-04-01
- 2.1.0 — 2019-03-03
- 2.0.0 — 2019-02-04
- 1.3.0 — 2018-05-10
- 1.2.0 — 2018-02-19
- 1.1.0 — 2017-10-22
- 1.0.0 — 2017-05-09

## README

# make-dir

> Make a directory and its parents if needed - Think `mkdir -p`

> [!TIP]
> You probably want the built-in [`fsPromises.mkdir('…', {recursive: true})`](https://nodejs.org/api/fs.html#fspromisesmkdirpath-options) instead.

### Advantages over `fsPromises.mkdir('…', {recursive: true})`

- Supports a custom `fs` implementation.

### Advantages over [`mkdirp`](https://github.com/isaacs/node-mkdirp)

- Promise API *(Async/await ready!)*
- Fixes many `mkdirp` issues
- CI-tested on macOS, Linux, and Windows
- Actively maintained
- Doesn't bundle a CLI
- Uses the native `fs.mkdir/mkdirSync` [`recursive` option](https://nodejs.org/dist/latest/docs/api/fs.html#fs_fs_mkdir_path_options_callback) in Node.js unless [overridden](#fs)

## Install

```sh
npm install make-dir
```

## Usage

```console
$ pwd
/Users/sindresorhus/fun
$ tree
.
```

```js
import {makeDirectory} from 'make-dir';

const path = await makeDirectory('unicorn/rainbow/cake');

console.log(path);
//=> '/Users/sindresorhus/fun/unicorn/rainbow/cake'
```

```console
$ tree
.
└── unicorn
    └── rainbow
        └── cake
```

Multiple directories:

```js
import {makeDirectory} from 'make-dir';

const paths = await Promise.all([
	makeDirectory('unicorn/rainbow'),
	makeDirectory('foo/bar')
]);

console.log(paths);
/*
[
	'/Users/sindresorhus/fun/unicorn/rainbow',
	'/Users/sindresorhus/fun/foo/bar'
]
*/
```

## API

### makeDirectory(path, options?)

Returns a `Promise` for the path to the created directory.

### makeDirectorySync(path, options?)

Returns the path to the created directory.

#### path

Type: `string | URL`

The directory to create.

#### options

Type: `object`

##### mode

Type: `integer`\
Default: `0o777`

The directory [permissions](https://x-team.com/blog/file-system-permissions-umask-node-js/).

##### fs

Type: `object`\
Default: `import fs from 'node:fs'`

Use a custom `fs` implementation. For example [`graceful-fs`](https://github.com/isaacs/node-graceful-fs).

Using a custom `fs` implementation will block the use of the native `recursive` option if `fs.mkdir` or `fs.mkdirSync` is not the native function.

## Related

- [make-dir-cli](https://github.com/sindresorhus/make-dir-cli) - CLI for this module
- [del](https://github.com/sindresorhus/del) - Delete files and directories
- [globby](https://github.com/sindresorhus/globby) - User-friendly glob matching
- [cpy](https://github.com/sindresorhus/cpy) - Copy files
- [cpy-cli](https://github.com/sindresorhus/cpy-cli) - Copy files on the command-line
- [move-file](https://github.com/sindresorhus/move-file) - Move a file

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