Copier

Latest version: v9.6.0

Safety actively analyzes 714919 Python packages for vulnerabilities to keep your Python projects secure.

Scan your dependencies

Page 4 of 7

7.0.1

Fix

- remove deprecated code scheduled for removal in Copier v7 (843)

7.0.0

Feat

- expand tilde in template source path (835)

Fix

- delete temporary clones after execution automatically (802)
- **typing**: remove invalid migration task stage "task"

Refactor

- **typing**: use abstract container types where possible (832)
- use `dict` constructor as default factory
- **typing**: remove unused types
- remove unreachable code (826)
- model a task to execute using a dataclass
- reduce module imports

6.2.0

Feat

- add validator field to Question (719)
- support passing github or gitlab urls without the .git suffix (677)

Fix

- compatibility with pydantic 1.10
- git bundle support breaks with relative paths
- prevent name collision for question var name "value"

Refactor

- add "flake8-simplify" plugin and simplify code

6.1.0

Feat

- support getting template commit hash with `{{ _copier_conf.vcs_ref_hash }}`
- simplify the format of the question prompt (689)

Fix

- ignore non-PEP-440-compliant tags (676)

6.0.0

[All changes here](https://github.com/copier-org/copier/issues?q=milestone%3Av6.0.0).
Summary:

Added

- Allow using additional Jinja 2 extensions.
- Major version mismatch warning. If your Copier version is too new, you'll be warned.
- Specific exceptions, which will help on error detection for API usages.
- Multiline questions.
- Conditional questions.
- Placeholders.
- Interactive TUI for questionaries. Prompts are way cooler now. 😎
- Python 3.9 support.
- Python 3.10 support.
- Support empty templates suffix, telling Copier to render every file.
- Added `--defaults` flag to use default answers to questions, which might be null if
not specified.
- Added `--overwrite` flag to overwrite files that already exist, without asking.
- In migration scripts, we have the new environment variables `$VERSION_PEP440_FROM`,
`$VERSION_PEP440_CURRENT` and `$VERSION_PEP440_TO`, which will always get a valid
PEP440 version identifier, without the `v` prefix, allowing your migration scripts
to have a valid standard where to base their logic.
- Raise a CopierAnswersInterrupt instead of a bare KeyboardInterrupt to provide
callers with additional context - such as the partially completed AnswersMap.
- Support for `user_defaults`, which take precedence over template defaults.
- Copy dirty changes from a Git-tracked template to the project by default, to make
testing easier.
- Advertise clearly which version is being copied or updated in the CLI.
- Add jinja variable `_copier_python` to provide Python `sys.executable`.

Changed

- Fully refactored core.
- Running `copier copy` on a preexisting project now recopies the project instead of
updating it. That means that it respects old answers, but ignores history diff.
- We use Jinja 2 defaults now. `{{ }}` instead of `[[ ]]` and similar.
- We keep trailing newlines by default for Jinja 2 templates.
- Copier will never ask for overwriting the answers file.
- Multi-typed choices follow the same type-casting logic as any other question, so
it's easier to reason about them. However, if you were using this feature, you might
be surprised about its side effects if you don't specify the type explicitly. Just
add `type: yaml` to make it behave _mostly_ as before. Or just don't use that, it's
complicated anyway (warn added to docs).
- Changed `--force` to be the same as `--defaults --overwrite`.
- Copied files will reflect permissions on the same files in the template.
- Copier now uses `git clone --filter=blob:none` when cloning, to be faster.
- Removing files from templates will remove them too from the subprojects when they
get updated.

Deprecated

- Deprecated `now` and `make_secret` functions. If your template used those, Copier
will emit warnings leading you on how to upgrade it.
- Templates marked with `_min_copier_version` below 6 will still default to use
bracket-based Jinja defaults, but that will disappear soon. If you want your
template to work on Copier 5 and 6, make sure to declare `_envops` explicitly in
your `copier.yaml`.
- `copier.copy()` is confusing, now that actually copying and updating are 2
completely different actions (before, you were actually always updating if
possible). Its direct equivalent is now `copier.run_auto()`, and `copier.copy()`
will disappear in the future.

Removed

- Minimal supported Python version is now 3.7 (dropped Python 3.6 support).
- Removed the `json` method on `_copier_conf`. Where you would previously use
`_copier_conf.json()` in your templates, please now use `_copier_conf|to_json`
instead.
- `--subdirectory` flag, which was confusing... and probably useless.
- Lots of dead code.

Fixed

- A directory that gets an empty name works as expected: not copied (nor its
contents).
- When comparing versions to update, PEP 440 is always used now. This way, we avoid
fake ordering when Git commit descriptions happen to be ordered in a non-predictable
way.
- Answers file will only remember answers to questions specified in the questionary.

5.1.0

[All changes here](https://github.com/copier-org/copier/milestone/14?closed=1). Summary:

- Forbid downgrades.
- Print all logs to STDERR.

Page 4 of 7

© 2025 Safety CLI Cybersecurity Inc. All Rights Reserved.