Changelog¶
0.10.2 - 2026-01-29¶
Bug fixes¶
- [poetry] Respect
--build-backend hatchwhen migrating projects that have neitherpackagesnorincludenorexclude(#667) - [poetry] Correctly set
module-rootwhen migrating projects withoutpackagesnorincludenorexcludeto uv build backend (#668)
0.10.1 - 2026-01-26¶
Bug fixes¶
- [poetry] Keep explicit sources when using only one primary/default source with explicit sources (#662)
0.10.0 - 2026-01-16¶
Breaking changes¶
Automatic selection of build backend¶
When migrating Poetry package distribution metadata, migrate-to-uv now automatically chooses the build backend to use based on the metadata complexity, prioritising uv if it is simple enough, or using Hatch otherwise.
It is still possible to explicitly choose a specific build backend with --build-backend hatch or --build-backend uv, but if the latter is chosen and the package distribution metadata cannot be expressed with uv build backend, the migration will fail, suggesting to use --build-backend hatch instead.
Features¶
- Abort migration early if uv executable is required but not found (#558)
- Improve dependencies locking wording (#609)
- Add
--keep-current-build-backendflag (#614) - [poetry] Choose build backend based on distribution complexity (#597)
- [poetry] Automatically add Python classifiers for packages based on
pythonspecifier (#606) - [poetry] Add lower and upper bounds to
uv_build(#617) - [poetry] Enable namespace for packages without
__init__.pyon uv build backend (#631) - [poetry] Use more concise warnings output (#632)
Bug fixes¶
- Abort migration on constraints lock failure and revert changes (#629)
- [poetry] Fix typo on
--build-backenderror message (#571) - [poetry] Use
python_full_versionfor 3-components Python markers (#559) - [poetry] Handle platform markers delimited by pipe (#576, #498)
- [poetry] Avoid empty arrays in uv build backend (#582)
- [poetry] Consistently use
python_full_versionfor Python markers to match uv behavior (#583) - [poetry] Fail on wheel-only packages using array for uv build backend (#595)
- [poetry] Abort migration for files using
frominpackages(#567) - [poetry] Abort migration on
packagesusingfrom/toand glob (#615) - [poetry] Avoid converting empty
extrasfor dependencies (#624) - [poetry] Avoid setting empty
module-namefor uv build backend (#627) - [poetry] Handle
src-layout with empty packages for uv build backend (#628) - [poetry] Sort sources and only set
defaultfor singleprimary/defaultsource (#633)
0.9.1 - 2025-12-24¶
Bug fixes¶
- [poetry] Fail migration on missing
__init__.pyfor uv build backend (#553)
0.9.0 - 2025-12-22¶
New features¶
Experimental support for uv build backend¶
When migrating Poetry package distribution metadata, migrate-to-uv uses Hatch build backend. Experimental support for migrating to uv build backend has been added behind --build backend-uv argument.
Note that uv build backend offers less flexibility than Poetry and Hatch, so the migration might be aborted if some options used by Poetry cannot be expressed with uv build backend. If you try --build-backend uv and encounter any issue, feel free to report it.
Features¶
- [poetry] Add experimental
--build-backend uvargument to migrate package distribution metadata to uv build backend (#533)
Bug fixes¶
- [poetry] Do not migrate
packages/includewith emptyformatarray (#538) - [poetry] Fail migration on unhandled python marker specification (#544)
0.8.1 - 2025-12-13¶
Bug fixes¶
- [poetry] Fail on unhandled version specifications (#514)
- [poetry] Also check if
poetry.lockexists when checking if a project uses Poetry (#528)
0.8.0 - 2025-11-17¶
Breaking changes¶
Abort on unrecoverable errors and warn about recoverable ones¶
Although migrate-to-uv tries its best to migrate a project to uv without changing the behavior, some things that are accepted by package managers do not have any equivalent in uv. Previously, migrate-to-uv would warn about the issue, but still perform the migration. It now aborts the migration in case it is not able to perform the migration that would result in behavior changes when migrating to uv.
If errors occur and lead to aborting the migration, you are expected to manually update your setup and retry the migration.
Warnings that occurred during the migration (which did not break the behavior) are now also grouped and displayed at the very end of the migration.
Features¶
- feat!: abort on unrecoverable errors and warn about recoverable ones (#480)
- [poetry] Do not set optional groups as default ones (#299)
- Indicate support for Python 3.14 (#468)
Bug fixes¶
- [poetry] Use inclusion when converting
^x.yversions (#466) - [poetry] Properly convert
includeto Hatch's build backend (#477) - [poetry] Do not crash on empty
readmearray (#481) - [poetry] Abort migration on dependencies using
||operator, as there is no PEP 440 equivalent (#487) - [poetry] Handle versions that use Poetry style and
,, like^1.0,!=1.1.0(#489) - [pip/pip-tools] Suggest how to add dependencies that could not be converted (#350)
- Preserve comments for sections unrelated to migration (#471)
0.7.3 - 2025-06-07¶
Bug fixes¶
- Use correct
include-groupname to include groups when using--dependency-groups-strategy include-in-dev(#283) - [poetry] Handle
=single equality (#288) - [pipenv] Handle raw versions (#292)
0.7.2 - 2025-03-25¶
Bug fixes¶
- [pipenv] Handle
*for version (#212)
0.7.1 - 2025-02-22¶
Bug fixes¶
- Handle map for PEP 621
licensefield (#156)
0.7.0 - 2025-02-15¶
Features¶
- Add
--skip-uv-checksto skip checking if uv is already used in a project (#118)
Bug fixes¶
- [pip/pip-tools] Warn on unhandled dependency formats (#103)
- [pip/pip-tools] Ignore inline comments when parsing dependencies (#105)
- [poetry] Migrate scripts that use
scripts = { callable = "foo:run" }format instead of crashing (#138)
0.6.0 - 2025-01-20¶
Existing data in [project] section of pyproject.toml is now preserved by default when migrating. If you prefer that the section is fully replaced, this can be done by setting --replace-project-section flag, like so:
migrate-to-uv --replace-project-section
Poetry projects that use PEP 621 syntax to define project metadata, for which support was added in Poetry 2.0, are now supported.
Features¶
- Preserve existing data in
[project]section ofpyproject.tomlwhen migrating (#84) - [poetry] Support migrating projects using PEP 621 (#85)
0.5.0 - 2025-01-18¶
Features¶
- [poetry] Delete
poetry.tomlafter migration (#62) - [pipenv] Delete
Pipfile.lockafter migration (#66) - Exit if uv is detected as a package manager (#61)
Bug fixes¶
- Ensure that lock file exists before parsing (#67)
Documentation¶
- Explain how to set credentials for private indexes (#60)
0.4.0 - 2025-01-17¶
When generating uv.lock with uv lock command, migrate-to-uv now keeps the same versions dependencies were locked to with the previous package manager (if a lock file was found), both for direct and transitive dependencies. This is supported for Poetry, Pipenv, and pip-tools.
This new behavior can be opted out by setting --ignore-locked-versions flag, like so:
migrate-to-uv --ignore-locked-versions
Features¶
- Keep locked dependencies versions when generating
uv.lock(#56)
0.3.0 - 2025-01-12¶
Dependencies are now locked with uv lock at the end of the migration, if uv is detected as an executable. This new behavior can be opted out by setting --skip-lock flag, like so:
migrate-to-uv --skip-lock
Features¶
- Lock dependencies at the end of migration (#46)
0.2.1 - 2025-01-05¶
Bug fixes¶
- [poetry] Avoid crashing when an extra lists a non-existing dependency (#30)
0.2.0 - 2025-01-05¶
Features¶
- Support migrating projects using
pipandpip-tools(#24) - [poetry] Migrate data from
packages,includeandexcludeto Hatch build backend (#16)
0.1.2 - 2025-01-02¶
Bug fixes¶
0.1.1 - 2024-12-26¶
Miscellaneous¶
- Fix documentation publishing and package metadata (#3)
0.1.0 - 2024-12-26¶
Initial release, with support for Poetry and Pipenv.