# What changed in cpy-cli

> 13 changes in cpy-cli 3 to 7 from its official release notes, upgrade guides and advisories: 9 breaking, 4 new APIs and options. Each one cited. Sources checked 2026-10-23. HTML: https://unstale.sh/npm/cpy-cli/

To see which of these apply to a repository, run `npx @unstale/cli init` in it.

## cpy-cli 7

### Breaking changes

- Patterns that match no files now cause the CLI to exit with an error instead of silently doing nothing. (7.0.0) — [release notes](https://github.com/sindresorhus/cpy-cli/releases/tag/v7.0.0)
- A single-file source with a destination that is not an existing directory is treated as a file-to-file copy; use a trailing separator or existing directory to force directory semantics. (7.0.0) — [release notes](https://github.com/sindresorhus/cpy-cli/releases/tag/v7.0.0)

### New APIs and options

- Controls how destination paths are calculated for patterns, using cwd or the pattern. (7.0.0) — [release notes](https://github.com/sindresorhus/cpy-cli/releases/tag/v7.0.0)
- Lists files that would be copied without actually copying them. (7.0.0) — [release notes](https://github.com/sindresorhus/cpy-cli/releases/tag/v7.0.0)
- Skips files that already exist at the destination without error. (7.0.0) — [release notes](https://github.com/sindresorhus/cpy-cli/releases/tag/v7.0.0)
- Copies only when the source is newer, or when sizes differ with the same modification time. (7.0.0) — [release notes](https://github.com/sindresorhus/cpy-cli/releases/tag/v7.0.0)

## cpy-cli 6

### Breaking changes

- Requires Node.js 20, so developers must use that runtime to run cpy-cli. (6.0.0) — [release notes](https://github.com/sindresorhus/cpy-cli/releases/tag/v6.0.0)

## cpy-cli 5

### Breaking changes

- Requires Node.js 16 to run cpy-cli. (5.0.0) — [release notes](https://github.com/sindresorhus/cpy-cli/releases/tag/v5.0.0)

## cpy-cli 4

### Breaking changes

- Node.js 12 is now required to run cpy-cli. (4.0.0) — [release notes](https://github.com/sindresorhus/cpy-cli/releases/tag/v4.0.0)
- The --parents flag was removed. (4.0.0) — [release notes](https://github.com/sindresorhus/cpy-cli/releases/tag/v4.0.0)
- Copying is now recursive by default; use --flat for flat output. (4.0.0) — [release notes](https://github.com/sindresorhus/cpy-cli/releases/tag/v4.0.0)

## cpy-cli 3

### Breaking changes

- Node.js 8 is now required to use cpy-cli. (3.0.0) — [release notes](https://github.com/sindresorhus/cpy-cli/releases/tag/v3.0.0)
- cpy-cli throws if the given source file does not exist. (3.0.0) — [release notes](https://github.com/sindresorhus/cpy-cli/releases/tag/v3.0.0)
