Poetry 2.0, released January 2025, added support for the standard [project] table defined by PEP 621. Name, version, description, authors, readme, requires-python, dependencies, and entry points can now live in [project], and [tool.poetry] is reserved for Poetry-specific settings such as packages, source repositories, and groups.
The two styles do not merge field by field. If [project] declares a key, that value wins and the [tool.poetry] equivalent for that key is ignored; existing files that use only [tool.poetry] continue to work unchanged. Mixing them for the same field is where confusion starts, particularly for dependencies.
One pattern is worth knowing: leaving version out of [project] and listing it in [project].dynamic lets a plugin supply it, which is how dynamic versioning plugins work under the new layout. Migrating is optional but has a real payoff, since a PEP 621 file can be read by uv, pip, hatch and the build frontends without Poetry-specific parsing.