4.0.2 / 2017-09-12

- Added `EOL` option to `writeJson*` & `outputJson*` (via upgrade to jsonfile v4)
- Added promise support to `fs.copyFile()` in Node 8.5+
- Added `.js` extension to `main` field in `package.json` for better tooling compatibility. #485

# 4.0.1 / 2017-07-31

## Fixed

- Previously, `ensureFile()` & `ensureFileSync()` would do nothing if the path was a directory. Now, they error out for consistency with `ensureDir()`. #465, #466, #470

# 4.0.0 / 2017-07-14

## Changed

- BREAKING: The promisified versions of `fs.read()` & `fs.write()` now return objects. See the docs for details. #436, #449
- `fs.move()` now errors out when destination is a subdirectory of source. #458
- Applied upstream fixes from `rimraf` to `fs.remove()` & `fs.removeSync()`. #459

## Fixed

- Got `fs.outputJSONSync()` working again; it was broken due to refactoring. #428

Also clarified the docs in a few places.

# 3.0.1 / 2017-05-04

- Fix bug in `move()` & `moveSync()` when source and destination are the same, and source does not exist. #415

# 3.0.0 / 2017-04-27

## Added

- BREAKING: Added Promise support. All asynchronous native fs methods and fs-extra methods now return a promise if the callback is not passed. #403
- `pathExists()`, a replacement for the deprecated `fs.exists`. `pathExists` has a normal error-first callback signature. Also added `pathExistsSync`, an alias to `fs.existsSync`, for completeness. #406

## Removed

- BREAKING: Removed support for setting the default spaces for `writeJson()`, `writeJsonSync()`, `outputJson()`, & `outputJsonSync()`. This was undocumented. #402

## Changed

- Upgraded jsonfile dependency to v3.0.0:
  - BREAKING: Changed behavior of `throws` option for `readJsonSync()`; now does not throw filesystem errors when `throws` is `false`.
- BREAKING: `writeJson()`, `writeJsonSync()`, `outputJson()`, & `outputJsonSync()` now output minified JSON by default for consistency with `JSON.stringify()`; set the `spaces` option to `2` to override this new behavior. #402
- Use `Buffer.allocUnsafe()` instead of `new Buffer()` in environments that support it. #394

## Fixed

- `removeSync()` silently failed on Windows in some cases. Now throws an `EBUSY` error. #408

# 2.1.2 / 2017-03-16

## Fixed

- Weird windows bug that resulted in `ensureDir()`'s callback being called twice in some cases. This bug may have also affected `remove()`. See #392, #393

# 2.1.1 / 2017-03-15

## Fixed

- Reverted `5597bd`, this broke compatibility with Node.js versions v4+ but less than `v4.5.0`.
- Remove `Buffer.alloc()` usage in `moveSync()`.

# 2.1.0 / 2017-03-15

Thanks to Mani Maghsoudlou (@manidlou) & Jan Peer Stöcklmair (@JPeer264) for their extraordinary help with this release!

## Added

- `moveSync()` See #309, #381. (@manidlou)
- `copy()` and `copySync()`'s `filter` option now gets the destination path passed as the second parameter. #366 (@manidlou)

## Changed

- Use `Buffer.alloc()` instead of deprecated `new Buffer()` in `copySync()`. #380 (@manidlou)
- Refactored entire codebase to use ES6 features supported by Node.js v4+ #355. (@JPeer264)
- Refactored docs. (@manidlou)

## Fixed

- `move()` shouldn't error out when source and dest are the same. #377, #378 (@jdalton)

# 2.0.0 / 2017-01-16

## Removed

- BREAKING: Removed support for Node `v0.12`. The Node foundation stopped officially supporting it on Jan 1st, 2017.
- BREAKING: Remove `walk()` and `walkSync()`. `walkSync()` was only part of `fs-extra` for a little over two months. Use klaw instead of `walk()`, in fact, `walk()` was just an alias to klaw. For `walkSync()` use klaw-sync. See: #338, #339

## Changed

- BREAKING: Renamed `clobber` to `overwrite`. This affects `copy()`, `copySync()`, and `move()`. #330, #333
- Moved docs, to `docs/`. #340

## Fixed

- Apply filters to directories in `copySync()` like in `copy()`. #324
- A specific condition when disk is under heavy use, `copy()` can fail. #326

# 1.0.0 / 2016-11-01

After five years of development, we finally have reach the 1.0.0 milestone! Big thanks goes to Ryan Zim for leading the charge on this release!

## Added

- `walkSync()`

## Changed

- BREAKING: dropped Node v0.10 support.
- disabled `rimaf` globbing, wasn't used. #280
- deprecate `copy()/copySync()` option `filter` if it's a `RegExp`. `filter` should now be a function.
- inline `rimraf`. This is temporary and was done because `rimraf` depended upon the beefy `glob` which `fs-extra` does not use. #300

## Fixed

- bug fix proper closing of file handle on `utimesMillis()` #271
- proper escaping of files with dollar signs #291
- `copySync()` failed if user didn't own file. #199, #301

# 0.30.0 / 2016-04-28

- Brought back Node v0.10 support. I didn't realize there was still demand. Official support will end 2016-10-01.

# 0.29.0 / 2016-04-27

- BREAKING: removed support for Node v0.10. If you still want to use Node v0.10, everything should work except for `ensureLink()/ensureSymlink()`. Node v0.12 is still supported but will be dropped in the near future as well.

# 0.28.0 / 2016-04-17

- BREAKING: removed `createOutputStream()`. Use https://www.npmjs.com/package/create-output-stream. See: #192
- `mkdirs()/mkdirsSync()` check for invalid win32 path chars. See: #209, #237
- `mkdirs()/mkdirsSync()` if drive not mounted, error. See: #93

# 0.27.0 / 2016-04-15

- add `dereference` option to `copySync()`. #235

# 0.26.7 / 2016-03-16

- fixed `copy()` if source and dest are the same. #230

# 0.26.6 / 2016-03-15

- fixed if `emptyDir()` does not have a callback: #229

# 0.26.5 / 2016-01-27

- `copy()` with two arguments (w/o callback) was broken. See: #215

# 0.26.4 / 2016-01-05

- `copySync()` made `preserveTimestamps` default consistent with `copy()` which is `false`. See: #208

# 0.26.3 / 2015-12-17

- fixed `copy()` hangup in copying blockDevice / characterDevice / `/dev/null`. See: #193

# 0.26.2 / 2015-11-02

- fixed `outputJson{Sync}()` spacing adherence to `fs.spaces`

# 0.26.1 / 2015-11-02

- fixed `copySync()` when `clogger=true` and the destination is read only. See: #190

# 0.26.0 / 2015-10-25

- extracted the `walk()` function into its own module `klaw`.

# 0.25.0 / 2015-10-24

- now has a file walker `walk()`

# 0.24.0 / 2015-08-28

- removed alias `delete()` and `deleteSync()`. See: #171

# 0.23.1 / 2015-08-07

- Better handling of errors for `move()` when moving across devices. #170
- `ensureSymlink()` and `ensureLink()` should not throw errors if link exists. #169

# 0.23.0 / 2015-08-06

- added `ensureLink{Sync}()` and `ensureSymlink{Sync}()`. See: #165

# 0.22.1 / 2015-07-09

- Prevent calling `hasMillisResSync()` on module load. See: #149. Fixes regression that was introduced in `0.21.0`.

# 0.22.0 / 2015-07-09

- preserve permissions / ownership in `copy()`. See: #54

# 0.21.0 / 2015-07-04

- add option to preserve timestamps in `copy()` and `copySync()`. See: #141
- updated `graceful-fs@3.x` to `4.x`. This brings in features from `amazing-graceful-fs` (much cleaner code / less hacks)

# 0.20.1 / 2015-06-23

- fixed regression caused by latest jsonfile update: See: https://github.com/jprichardson/node-jsonfile/issues/26

# 0.20.0 / 2015-06-19

- removed `jsonfile` aliases with `File` in the name, they weren't documented and probably weren't in use e.g. this package had both `fs.readJsonFile` and `fs.readJson` that were aliases to each other, now use `fs.readJson`.
- preliminary walker created. Intentionally not documented. If you use it, it will almost certainly change and break your code.
- started moving tests inline
- upgraded to `jsonfile@2.1.0`, can now pass JSON revivers/replacers to `readJson()`, `writeJson()`, `outputJson()`

# 0.19.0 / 2015-06-08

- `fs.copy()` had support for Node v0.8, dropped support

# 0.18.4 / 2015-05-22

- fixed license field according to this: #136 and https://github.com/npm/npm/releases/tag/v2.10.0

# 0.18.3 / 2015-05-08

- bugfix: handle `EEXIST` when clobbering on some Linux systems. #134

# 0.18.2 / 2015-04-17

- bugfix: allow `F_OK` (#120)

# 0.18.1 / 2015-04-15

- improved windows support for `move()` a bit. https://github.com/jprichardson/node-fs-extra/commit/92838980f25dc2ee4ec46b43ee14d3c4a1d30c1b
- fixed a lot of tests for Windows (appveyor)

# 0.18.0 / 2015-03-31

- added `emptyDir()` and `emptyDirSync()`

# 0.17.0 / 2015-03-28

- `copySync` added `clobber` option (before always would clobber, now if `clobber` is `false` it throws an error if the destination exists). Only works with files at the moment.
- `createOutputStream()` added. See: #118

# 0.16.5 / 2015-03-08

- fixed `fs.move` when `clobber` is `true` and destination is a directory, it should clobber. #114

# 0.16.4 / 2015-03-01

- `fs.mkdirs` fix infinite loop on Windows. See: See https://github.com/substack/node-mkdirp/pull/74 and https://github.com/substack/node-mkdirp/issues/66

# 0.16.3 / 2015-01-28

- reverted https://github.com/jprichardson/node-fs-extra/commit/1ee77c8a805eba5b99382a2591ff99667847c9c9

# 0.16.2 / 2015-01-28

- fixed `fs.copy` for Node v0.8 (support is temporary and will be removed in the near future)

# 0.16.1 / 2015-01-28

- if `setImmediate` is not available, fall back to `process.nextTick`

# 0.16.0 / 2015-01-28

- bugfix `fs.move()` into itself. Closes #104
- bugfix `fs.move()` moving directory across device. Closes #108
- added coveralls support
- bugfix: nasty multiple callback `fs.copy()` bug. Closes #98
- misc fs.copy code cleanups

# 0.15.0 / 2015-01-21

- dropped `ncp`, imported code in
- because of previous, now supports `io.js`
- `graceful-fs` is now a dependency

# 0.14.0 / 2015-01-05

- changed `copy`/`copySync` from `fs.copy(src, dest, [filters], callback)` to `fs.copy(src, dest, [options], callback)` #100
- removed mockfs tests for mkdirp (this may be temporary, but was getting in the way of other tests)

# 0.13.0 / 2014-12-10

- removed `touch` and `touchSync` methods (they didn't handle permissions like UNIX touch)
- updated `"ncp": "^0.6.0"` to `"ncp": "^1.0.1"`
- imported `mkdirp` => `minimist` and `mkdirp` are no longer dependences, should now appease people who wanted `mkdirp` to be `--use_strict` safe. See #59

# 0.12.0 / 2014-09-22

- copy symlinks in `copySync()` #85

# 0.11.1 / 2014-09-02

- bugfix `copySync()` preserve file permissions #80

# 0.11.0 / 2014-08-11

- upgraded `"ncp": "^0.5.1"` to `"ncp": "^0.6.0"`
- upgrade `jsonfile": "^1.2.0"</tt> to <tt>jsonfile": "^2.0.0"` => on write, json files now have `\n` at end. Also adds `options.throws` to `readJsonSync()` see https://github.com/jprichardson/node-jsonfile#readfilesyncfilename-options for more details.

# 0.10.0 / 2014-06-29

- bugfix: upgaded `"jsonfile": "~1.1.0"` to `"jsonfile": "^1.2.0"`, bumped minor because of `jsonfile` dep change from `~` to `^`. #67

# 0.9.1 / 2014-05-22

- removed Node.js `0.8.x` support, `0.9.0` was published moments ago and should have been done there

# 0.9.0 / 2014-05-22

- upgraded `ncp` from `~0.4.2` to `^0.5.1`, #58
- upgraded `rimraf` from `~2.2.6` to `^2.2.8`
- upgraded `mkdirp` from `0.3.x` to `^0.5.0`
- added methods `ensureFile()`, `ensureFileSync()`
- added methods `ensureDir()`, `ensureDirSync()` #31
- added `move()` method. From: https://github.com/andrewrk/node-mv

# 0.8.1 / 2013-10-24

- copy failed to return an error to the callback if a file doesn't exist (ulikoehler #38, #39)

# 0.8.0 / 2013-10-14

- `filter` implemented on `copy()` and `copySync()`. (Srirangan / #36)

# 0.7.1 / 2013-10-12

- `copySync()` implemented (Srirangan / #33)
- updated to the latest `jsonfile` version `1.1.0` which gives `options` params for the JSON methods. Closes #32

# 0.7.0 / 2013-10-07

- update readme conventions
- `copy()` now works if destination directory does not exist. Closes #29

# 0.6.4 / 2013-09-05

- changed `homepage` field in package.json to remove NPM warning

# 0.6.3 / 2013-06-28

- changed JSON spacing default from `4` to `2` to follow Node conventions
- updated `jsonfile` dep
- updated `rimraf` dep

# 0.6.2 / 2013-06-28

- added .npmignore, #25

# 0.6.1 / 2013-05-14

- modified for `strict` mode, closes #24
- added `outputJson()/outputJsonSync()`, closes #23

# 0.6.0 / 2013-03-18

- removed node 0.6 support
- added node 0.10 support
- upgraded to latest `ncp` and `rimraf`.
- optional `graceful-fs` support. Closes #17

# 0.5.0 / 2013-02-03

- Removed `readTextFile`.
- Renamed `readJSONFile` to `readJSON` and `readJson`, same with write.
- Restructured documentation a bit. Added roadmap.

# 0.4.0 / 2013-01-28

- Set default spaces in `jsonfile` from 4 to 2.
- Updated `testutil` deps for tests.
- Renamed `touch()` to `createFile()`
- Added `outputFile()` and `outputFileSync()`
- Changed creation of testing diretories so the /tmp dir is not littered.
- Added `readTextFile()` and `readTextFileSync()`.

# 0.3.2 / 2012-11-01

- Added `touch()` and `touchSync()` methods.

# 0.3.1 / 2012-10-11

- Fixed some stray globals.

# 0.3.0 / 2012-10-09

- Removed all CoffeeScript from tests.
- Renamed `mkdir` to `mkdirs`/`mkdirp`.

# 0.2.1 / 2012-09-11

- Updated `rimraf` dep.

# 0.2.0 / 2012-09-10

- Rewrote module into JavaScript. (Must still rewrite tests into JavaScript)
- Added all methods of jsonfile
- Added Travis-CI.

# 0.1.3 / 2012-08-13

- Added method `readJSONFile`.

# 0.1.2 / 2012-06-15

- Bug fix: `deleteSync()` didn't exist.
- Verified Node v0.8 compatibility.

# 0.1.1 / 2012-06-15

- Fixed bug in `remove()`/`delete()` that wouldn't execute the function if a callback wasn't passed.

# 0.1.0 / 2012-05-31

- Renamed `copyFile()` to `copy()`. `copy()` can now copy directories (recursively) too.
- Renamed `rmrf()` to `remove()`.
- `remove()` aliased with `delete()`.
- Added `mkdirp` capabilities. Named: `mkdir()`. Hides Node.js native `mkdir()`.
- Instead of exporting the native `fs` module with new functions, I now copy over the native methods to a new object and export that instead.

# 0.0.4 / 2012-03-14

- Removed CoffeeScript dependency

# 0.0.3 / 2012-01-11

- Added methods rmrf and rmrfSync
- Moved tests from Jasmine to Mocha