<!-- Release notes generated using configuration in .github/release.yml at main -->
What's Changed
🛠 Breaking Changes
* DVC used to identify a file by removing CRLF line endings (although it stored the original file contents in the cache).
However, in DVC 3.x, this behaviour has been dropped.
Now, DVC hashes the file contents directly without removing CRLF line endings.
All pre-existing DVC-tracked data from DVC 2.x can still be accessed and used in DVC 3.x. However, any new operations that result in a DVC committed change will generate a 3.x DVC output, which will be stored in a different location than 2.x DVC outputs.
The files will be stored in cache at `.dvc/cache/files/md5` and in the remote at `<remote_dir>/files/md5`.
You can read more about it in 4658 and 9538.
* While strictly not required, `dvc cache migrate` command is introduced to migrate 2.x format of cache to 3.x format to make migrations easier (9591).
* Support for tracking (cached) external outputs has been removed (9570).
* `checkpoints` has been removed (9271).
* `dvc run` command has been removed, use `stage add --run` instead (9508).
* `exp init`, `exp gc` commands have been removed (9269, 9273).
* `--show-json`/`--show-md`/`--show-csv` flags are removed (9475). Use `--json`/`--md`/`--csv` instead.
* `--recursive` option from `dvc add` is removed (9513). Use `dvc add dir` to recursively add files in a directory.
* `--file` option from `dvc add`, `dvc import` and `dvc import-url` is now removed (9547, 9562, 9548).
* `--meta`, `--desc`, `--label`, and `--type` option from `dvc add`, `dvc import` and `dvc import-url` is now removed (9481).
* `--jobs` option that is used in combination with `dvc add --to-remote` is now renamed to `--remote-jobs` to avoid confusion with `core.checksum_jobs` (9522, 9550).
* `--metrics` option is removed from both `exp run` and `repro` commands (9458).
* `--pcp` option from `exp show` has been removed (9270).
* Read-only support for dvc 1.0 lockfile format has been removed (9476).
* Support for defining multiple plots as a dictionary has been removed (9486). Use a list instead.
* dvc.yaml: stage-level `vars` is removed (9556).
* use of `.dvc` file as a pipeline stage has been removed, which has been deprecated in 1.0. This means that now it is forbidden to use `params`/`cmd`/`metrics`/`plots` in `.dvc` files (9546, 9551, 9552, 9554). Also, if you have used dvc before `1.0`, `Dvcfile` is no longer supported or recognized.
* `pkg` info has moved from `dvc.utils.pkg` to `dvc._build`. You can now import it using `from dvc import PKG` (9559).
🐛 Bug Fixes
* repro: check for hash mismatch between deleted dependencies and upstream outputs (9533).
* exp list: show experiment shas (9501).
* update: make sure we update hashes/checksums on --to-remote (9536).
* fetch: cache collected (9579).
**Full Changelog**: https://github.com/iterative/dvc/compare/2.58.2...3.0.0