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 private repository 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 supressed 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.