History is important, but our current roadmap can be found here

1.8.0 (Current master, in development)

  • Do not modify this file, since 1.7.1 Changes are generated on Pull request title and will be added before release.

1.7.2 (2019-04-21)

  • Fixed: Jinja2&Six version limits causing build errors with ansible project @insspb (#1385)

1.7.1 (2019-04-21)

This release was focused on internal code and CI/CD changes. During this release all code was verified to match pep8, pep257 and other code-styling guides.
Project CI/CD was significantly changed, Windows platform checks based on Appveyor engine was replaced by GitHub actions tests. Appveyor was removed. Also our CI/CD was extended with Mac builds, to verify project builds on Apple devices.

Important Changes:

  • Added: Added debug messages for get_user_config @ssbarnea (#1357)
  • Multiple templates per one repository feature added. @RomHartmann (#1224, #1063)
  • Update replay.py json.dump indent for easy viewing @nicain (#1293)
  • ‘future’ library replaced with ‘six’ as a more lightweight python porting library @asottile (#941)
  • Added extension: Slugify template filter @ppanero (#1336)
  • Added command line option: --skip-if-file-exists, allow to skip the existing files when doing overwrite_if_exists. @chhsiao1981 (#1076)
  • Some packages versions limited to be compatible with python2.7 and python 3.5 @insspb (#1349)

Internal CI/CD and tests changes:

  • Coverage comment in future merge requests disabled @ssbarnea (#1279)
  • Fixed Python 3.8 travis tests and setup.py message @insspb (#1295, #1297)
  • Travis builds extended with Windows setup for all supported python versions @insspb (#1300, #1301)
  • Update .travis.yml to be compatible with latest travis cfg specs @luzfcb (#1346)
  • Added new test to improve tests coverage @amey589 (#1023)
  • Added missed coverage lines highlight to pytest-coverage report @insspb (#1352)
  • pytest-catchlog package removed from test_requirements, as now it is included in pytest @insspb (#1347)
  • Fixed cov-report tox invocation environment @insspb (#1350)
  • Added: Release drafter support and configuration to exclude changelog update work and focus on development @ssbarnea @insspb (#1356, #1362)
  • Added: CI/CD steps for Github actions to speedup CI/CD @insspb (#1360)
  • Removed: Appveyor CI/CD completely removed @insspb @ssbarnea @insspb (#1363, #1367)

Code style and docs changes:

  • Added black formatting verification on lint stage + project files reformatting @ssbarnea @insspb (#1368)
  • Added pep257 docstring for tests/* files @insspb (#1369, #1370, #1371, #1372, #1373, #1374, #1375, #1376, #1377, #1378, #1380, #1381)
  • Added pep257 docstring for tests/conftests.py @kishan (#1272, #1263)
  • Added pep257 docstring for tests/replay/conftest.py @kishan (#1270, #1268)
  • Added pep257 docstring for docs/init.py @kishan (#1273, #1265)
  • Added missing docstring headers to all files @croesnick (#1269, #1283)
  • Gitter links replaced by Slack in README @browniebroke (#1282)
  • flake8-docstrings tests added to CI/CD @ssbarnea (#1284)
  • Activated pydocstyle rule: D401 - First line should be in imperative mood @ssbarnea (#1285)
  • Activated pydocstyle rule: D200 - One-line docstring should fit on one line with quotes @ssbarnea (#1288)
  • Activated pydocstyle rule: D202 - No blank lines allowed after function docstring @ssbarnea (#1288)
  • Activated pydocstyle rule: D205 - 1 blank line required between summary line and description @ssbarnea (#1286, #1287)
  • Activated pydocstyle rule: ABS101 @ssbarnea (#1288)
  • Replaced click documentation links to point to version 7 @igorbasko01 (#1303)
  • Updated submodule link to latest version with documentation links fix @DanBoothDev (#1388)
  • Fixed links in main README file. @insspb (#1342)
  • Fix indentation of .cookiecutterrc in README.md @mhsekhavat (#1322)
  • Changed format of loggers invocation @insspb (#1307)

1.7.0 (2019-12-22) Old friend

Important Changes:

  • Drop support for EOL Python 3.4, thanks to @jamescurtin and @insspb (#1024)
  • Drop support for EOL Python 3.3, thanks to @hugovk (#1024)
  • Increase the minimum click version to 7.0, thanks to @rly and @luzfcb (#1168)

Other Changes:

1.6.0 (2017-10-15) Tim Tam

New Features:

  • Include template path or template URL in cookiecutter context under _template, thanks to @aroig (#774)
  • Add a URL abbreviation for GitLab template projects, thanks to @hackebrot (#963)
  • Add option to use templates from Zip files or Zip URLs, thanks to @freakboy3742 (#961)

Bug Fixes:

  • Fix an issue with missing default template abbreviations for when a user defined custom abbreviations, thanks to @noirbizarre for the issue report and @hackebrot for the fix (#966, #967)
  • Preserve existing output directory on project generation failure, thanks to @ionelmc for the report and @michaeljoseph for the fix (#629, #964)
  • Fix Python 3.x error handling for git operation failures, thanks to @jmcarp (#905)

Other Changes:

1.5.1 (2017-02-04) Alfajor

New Features:

  • Major update to installation documentation, thanks to @stevepiercy (#880)

Bug Fixes:

  • Resolve an issue around default values for dict variables, thanks to @e-kolpakov for raising the issue and @hackebrot for the PR (#882, #884)

Other Changes:

1.5.0 (2016-12-18) Alfajor

The primary goal of this release was to add command-line support for passing extra context, address minor bugs and make a number of improvements.

New Features:

  • Inject extra context with command-line arguments, thanks to @msabramo and @michaeljoseph (#666).
  • Updated conda installation instructions to work with the new conda-forge distribution of Cookiecutter, thanks to @pydanny and especially @bollwyvl (#232, #705).
  • Refactor code responsible for interaction with version control systems and raise better error messages, thanks to @michaeljoseph (#778).
  • Add support for executing cookiecutter using python -m cookiecutter or from a checkout/zip file, thanks to @brettcannon (#788).
  • New CLI option --debug-file PATH to store a log file on disk. By default no log file is written. Entries for DEBUG level and higher. Thanks to @hackebrot(#792).
  • Existing templates in a user’s cookiecutters_dir (default is ~/.cookiecutters/) can now be referenced by directory name, thanks to @michaeljoseph (#825).
  • Add support for dict values in cookiecutter.json, thanks to @freakboy3742 and @hackebrot (#815, #858).
  • Add a jsonify filter to default jinja2 extensions that json.dumps a Python object into a string, thanks to @aroig (#791).

Bug Fixes:

  • Fix typo in the error logging text for when a hook did not exit successfully, thanks to @luzfcb (#656)
  • Fix an issue around replay file names when cookiecutter is used with a relative path to a template, thanks to @eliasdorneles for raising the issue and @hackebrot for the PR (#752, #753)
  • Ignore hook files with tilde-suffixes, thanks to @hackebrot (#768)
  • Fix a minor issue with the code that generates a name for a template, thanks to @hackebrot(#798)
  • Handle empty hook file or other OS errors, thanks to @christianmlong for raising this bug and @jcarbaugh and @hackebrot for the fix (#632, #729, #862)
  • Resolve an issue with custom extensions not being loaded for pre_gen_project and post_gen_project hooks, thanks to @cheungnj (#860)

Other Changes:

1.4.0 (2016-03-20) Shortbread

The goal of this release is changing to a strict Jinja2 environment, paving the way to more awesome in the future, as well as adding support for Jinja2 extensions.

New Features:

  • Added support for Jinja2 extension support, thanks to @hackebrot (#617).
  • Now raises an error if Cookiecutter tries to render a template that contains an undefined variable. Makes generation more robust and secure (#586). Work done by @hackebrot (#111, #586, #592)
  • Uses strict Jinja2 env in prompt, thanks to @hackebrot (#598, #613)
  • Switched from pyyaml/ruamel.yaml libraries that were problematic across platforms to the pure Python poyo library, thanks to @hackebrot (#557, #569, #621)
  • User config values for cookiecutters_dir and replay_dir now support environment variable and user home expansion, thanks to @nfarrar for the suggestion and @hackebrot for the PR (#640,#642)
  • Add jinja2-time as default extension for dates and times in templates via {% now 'utc' %},thanks to @hackebrot (#653)

Bug Fixes:

  • Provided way to define options that have no defaults, thanks to @johtso (#587, #588)
  • Make sure that replay.dump() and replay.load() use the correct user config, thanks to @hackebrot (#590, #594)
  • Added correct CA bundle for Git on Appveyor, thanks to @maiksensi (#599, #602)
  • Open HISTORY.rst with utf-8 encoding when reading the changelog, thanks to @0-wiz-0 for submitting the issue and @hackebrot for the fix (#638, #639)
  • Fix repository indicators for privaterepository urls, thanks to @habnabit for the fix (#595) and @hackebrot for the tests (#655)

Other Changes:

1.3.0 (2015-11-10) Pumpkin Spice

The goal of this release is to extend the user config feature and to make hook execution more robust.

New Features:

  • Abort project generation if pre_gen_project or post_gen_project hook scripts fail, thanks to @eliasdorneles (#464, #549)
  • Extend user config capabilities with additional cli options --config-file and --default-config and environment variable COOKIECUTTER_CONFIG, thanks to @jhermann, @pfmoore, and @hackebrot (#258, #424, #565)

Bug Fixes:

  • Fixed conditional dependencies for wheels in setup.py, thanks to @hackebrot (#557, #568)
  • Reverted skipif markers to use correct reasons (bug fixed in pytest), thanks to @hackebrot (#574)

Other Changes:

1.2.1 (2015-10-18) Zimtsterne

Zimtsterne are cinnamon star cookies.

New Feature:

  • Returns rendered project dir, thanks to @hackebrot (#553)

Bug Fixes:

  • Factor in choice variables (as introduced in 1.1.0) when using a user config or extra context, thanks to @ionelmc and @hackebrot (#536, #542).

Other Changes:

  • Enable py35 support on Travis by using Python 3.5 as base Python (@maiksensi / #540)
  • If a filename is empty, do not generate. Log instead (@iljabauer / #444)
  • Fix tests as per last changes in cookiecutter-pypackage, thanks to @eliasdorneles(#555).
  • Removed deprecated cookiecutter-pylibrary-minimal from the list, thanks to @ionelmc (#556)
  • Moved to using rualmel.yaml instead of PyYAML, except for Windows users on Python 2.7, thanks to @pydanny (#557)

Why 1.2.1 instead of 1.2.0? There was a problem in the distribution that we pushed to PyPI. Since you can’t replace previous files uploaded to PyPI, we deleted the files on PyPI and released 1.2.1.

1.1.0 (2015-09-26) Snickerdoodle

The goals of this release were copy without render and a few additional command-line options such as --overwrite-if-exists, ---replay, and output-dir.


  • Added copy without render feature, making it much easier for developers of Ansible, Salt Stack, and other recipe-based tools to work with Cookiecutter. Thanks to @osantana and @LucianU for their innovation, as well as @hackebrot for fixing the Windows problems (#132, #184, #425).
  • Added specify output directory, thanks to @tony and @hackebrot (#531, #452).
  • Abort template rendering if the project output directory already exists, thanks to @lgp171188 (#470, #471).
  • Add a flag to overwrite existing output directory, thanks to @lgp171188 for the implementation (#495) and @schacki, @ionelmc, @pydanny and @hackebrot for submitting issues and code reviews (#475, #493).
  • Remove test command in favor of tox, thanks to @hackebrot (#480).
  • Allow cookiecutter invocation, even without installing it, via python -m cookiecutter.cli, thanks to @vincentbernat and @hackebrot (#449, #487).
  • Improve the type detection handler for online and offline repositories, thanks to @charlax (#490).
  • Add replay feature, thanks to @hackebrot (#501).
  • Be more precise when raising an error for an invalid user config file, thanks to @vaab and @hackebrot (#378, #528).
  • Added official Python 3.5 support, thanks to @pydanny and @hackebrot (#522).
  • Added support for choice variables and switch to click style prompts, thanks to @hackebrot (#441, #455).

Other Changes:

1.0.0 (2015-03-13) Chocolate Chip

The goals of this release was to formally remove support for Python 2.6 and continue the move to using py.test.


  • Convert the unittest suite to py.test for the sake of comprehensibility, thanks to @hackebrot (#322, #332, #334, #336, #337, #338, #340, #341, #343, #345, #347, #351, #412, #413, #414).
  • Generate pytest coverage, thanks to @michaeljoseph (#326).
  • Documenting of Pull Request merging and HISTORY.rst maintenance, thanks to @michaeljoseph (#330).
  • Large expansions to the tutorials thanks to @hackebrot (#384)
  • Switch to using Click for command-line options, thanks to @michaeljoseph (#391, #393).
  • Added support for working with private repos, thanks to @marctc (#265).
  • Wheel configuration thanks to @michaeljoseph (#118).

Other Changes:

0.9.0 (2015-01-13)

The goals of this release were to add the ability to Jinja2ify the cookiecutter.json default values, and formally launch support for Python 3.4.


  • Python 3.4 is now a first class citizen, thanks to everyone.
  • cookiecutter.json values are now rendered Jinja2 templates, thanks to @bollwyvl (#291).
  • Move to py.test, thanks to @pfmoore (#319) and @ramiroluz (#310).
  • Add PendingDeprecation warning for users of Python 2.6, as support for it is gone in Python 2.7, thanks to @michaeljoseph (#201).

Bug Fixes:

  • Corrected typo in Makefile, thanks to @inglesp (#297).
  • Raise an exception when users don’t have git or hg installed, thanks to @pydanny (#303).

Other changes:

0.8.0 (2014-10-30)

The goal of this release was to allow for injection of extra context via the Cookiecutter API, and to fix minor bugs.


Bug Fixes:

  • Newlines at the end of files are no longer stripped, thanks to @treyhunner (#183).
  • Cloning prompt suppressed by respecting the no\_input flag, thanks to @trustrachel (#285)
  • With Python 3, input is no longer converted to bytes, thanks to @uranusjr (#98).

Other Changes:

0.7.2 (2014-08-05)

The goal of this release was to fix cross-platform compatibility, primarily Windows bugs that had crept in during the addition of new features. As of this release, Windows is a first-class citizen again, now complete with continuous integration.

Bug Fixes:

  • Fixed the contributing file so it displays nicely in Github, thanks to @pydanny.
  • Updates 2.6 requirements to include simplejson, thanks to @saxix.
  • Avoid unwanted extra spaces in string literal, thanks to @merwok.
  • Fix @unittest.skipIf error on Python 2.6.
  • Let sphinx parse :param: properly by inserting newlines #213, thanks to @mineo.
  • Fixed Windows test prompt failure by replacing stdin per @cjrh in #195.
  • Made rmtree remove readonly files, thanks to @pfmoore.
  • Now using tox to run tests on Appveyor, thanks to @pfmoore (#241).
  • Fixed tests that assumed the system encoding was utf-8, thanks to @pfmoore (#242, #244).
  • Added a tox ini file that uses py.test, thanks to @pfmoore (#245).

Other Changes:

0.7.1 (2014-04-26)

Bug fixes:

  • Use the current Python interpreter to run Python hooks, thanks to @coderanger.
  • Include tests and documentation in source distribution, thanks to @vincentbernat.
  • Fix various warnings and missing things in the docs (#129, #130), thanks to @nedbat.
  • Add command line option to get version (#89), thanks to @davedash and @cyberj.

Other changes:

0.7.0 (2013-11-09)

This is a release with significant improvements and changes. Please read through this list before you upgrade.

New features:

  • Support for --checkout argument, thanks to @foobacca.
  • Support for pre-generate and post-generate hooks, thanks to @raphigaziano. Hooks are Python or shell scripts that run before and/or after your project is generated.
  • Support for absolute paths to cookiecutters, thanks to @krallin.
  • Support for Mercurial version control system, thanks to @pokoli.
  • When a cookiecutter contains invalid Jinja2 syntax, you get a better message that shows the location of the TemplateSyntaxError. Thanks to @benjixx.
  • Can now prompt the user to enter values during generation from a local cookiecutter, thanks to @ThomasChiroux. This is now always the default behavior. Prompts can also be suppressed with --no-input.
  • Your cloned cookiecutters are stored by default in your ~/.cookiecutters/ directory (or Windows equivalent). The location is configurable. (This is a major change from the pre-0.7.0 behavior, where cloned cookiecutters were deleted at the end of project generation.) Thanks @raphigaziano.
  • User config in a ~/.cookiecutterrc file, thanks to @raphigaziano. Configurable settings are cookiecutters_dir and default_context.
  • File permissions are now preserved during project generation, thanks to @benjixx.

Bug fixes:

  • Unicode issues with prompts and answers are fixed, thanks to @s-m-i-t-a.
  • The test suite now runs on Windows, which was a major effort. Thanks to @pydanny, who collaborated on this with me.

Other changes:

  • Quite a bit of refactoring and API changes.
  • Lots of documentation improvements. Thanks @sloria, @alex, @pydanny, @freakboy3742, @es128, @rolo.
  • Better naming and organization of test suite.
  • A CookiecutterCleanSystemTestCase to use for unit tests affected by the user’s config and cookiecutters directory.
  • Improvements to the project’s Makefile.
  • Improvements to tests. Thanks @gperetin, @s-m-i-t-a.
  • Removal of subprocess32 dependency. Now using non-context manager version of subprocess.Popen for Python 2 compatibility.
  • Removal of cookiecutter’s cleanup module.
  • A bit of setup.py cleanup, thanks to @oubiga.
  • Now depends on binaryornot 0.2.0.

0.6.4 (2013-08-21)

  • Windows support officially added.
  • Fix TemplateNotFound Exception on Windows (#37).

0.6.3 (2013-08-20)

  • Fix copying of binary files in nested paths (#41), thanks to @sloria.

0.6.2 (2013-08-19)

  • Depend on Jinja2>=2.4 instead of Jinja2==2.7.
  • Fix errors on attempt to render binary files. Copy them over from the project template without rendering.
  • Fix Python 2.6/2.7 UnicodeDecodeError when values containing Unicode chars are in cookiecutter.json.
  • Set encoding in Python 3 unicode_open() to always be utf-8.

0.6.1 (2013-08-12)

  • Improved project template finding. Now looks for the occurrence of {{,cookiecutter, and }} in a directory name.
  • Fix help message for input_dir arg at command prompt.
  • Minor edge cases found and corrected, as a result of improved test coverage.

0.6.0 (2013-08-08)

  • Config is now in a single cookiecutter.json instead of in json/.
  • When you create a project from a git repo template, Cookiecutter prompts you to enter custom values for the fields defined in cookiecutter.json.

0.5 (2013-07-28)

  • Friendlier, more simplified command line usage:
    # Create project from the cookiecutter-pypackage/ template
    $ cookiecutter cookiecutter-pypackage/
    # Create project from the cookiecutter-pypackage.git repo template
    $ cookiecutter https://github.com/audreyr/cookiecutter-pypackage.git
  • Can now use Cookiecutter from Python as a package:
    from cookiecutter.main import cookiecutter

    # Create project from the cookiecutter-pypackage/ template

    # Create project from the cookiecutter-pypackage.git repo template
  • Internal refactor to remove any code that changes the working directory.

0.4 (2013-07-22)

  • Only takes in one argument now: the input directory. The output directory is generated by rendering the name of the input directory.
  • Output directory cannot be the same as input directory.

0.3 (2013-07-17)

  • Takes in command line args for the input and output directories.

0.2.1 (2013-07-17)

  • Minor cleanup.

0.2 (2013-07-17)

Bumped to “Development Status :: 3 - Alpha”.

  • Works with any type of text file.
  • Directory names and filenames can be templated.

0.1.0 (2013-07-11)

  • First release on PyPI.