History

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

2.6.0 (2024-02-21)

Minor Changes

  • Support Python 3.12 (#1989) @ericof

  • Modifying Jinja2 start and end variable strings (#1997) @sacha-c

CI/CD and QA changes

  • Add isort as a pre-commit hook (#1988) @kurtmckee

  • Bump actions/setup-python from 4 to 5 (#2000) @dependabot

  • Bump actions/upload-artifact from 3 to 4 (#1999) @dependabot

  • Quick resolution of #2003 (#2004) @jensens

  • Support Python 3.12 (#1989) @ericof

  • [pre-commit.ci] pre-commit autoupdate (#1996) @pre-commit-ci

  • Quick resolution of #2003 (#2004) @jensens

Documentation updates

  • Support Python 3.12 (#1989) @ericof

Bugfixes

  • Fix regression #2009: Adding value to nested dicts broken (#2010) @jensens

  • Fixed errors caused by invalid config files. (#1995) @alanverresen

This release is made by wonderful contributors:

@alanverresen, @dependabot, @dependabot[bot], @ericof, @jensens, @kurtmckee, @pre-commit-ci, @pre-commit-ci[bot] and @sacha-c

2.5.0 (2023-11-21)

Minor Changes

  • Default values can be passed as a dict (#1924) @matveyvarg

  • Implement new style for nested templates config (#1981) @ericof

CI/CD and QA changes

  • Bump actions/checkout from 3 to 4 (#1953) @dependabot

  • [pre-commit.ci] pre-commit autoupdate (#1977) @pre-commit-ci

  • [pre-commit.ci] pre-commit autoupdate (#1957) @pre-commit-ci

Documentation updates

  • Add argument run to pipx command in README.md (#1964) @staeff

  • Fix tutorial2 generated HTML (#1971) @aantoin

  • Update README.md (#1967) @HarshRanaOC

  • Update README.md to fix broken link (#1952) @david-abn

  • Update README.md to include installation instructions (#1949) @david-abn

  • Update cookiecutter-plone-starter link in readme (#1965) @zahidkizmaz

Bugfixes

  • Fix FileExistsError when using a relative template path (#1968) @pkrueger-cariad

  • Fix recursive context overwrites (#1961) @padraic-padraic

This release is made by wonderful contributors:

@HarshRanaOC, @aantoin, @david-abn, @dependabot, @dependabot[bot], @ericof, @matveyvarg, @padraic-padraic, @pkrueger-cariad, @pre-commit-ci, @pre-commit-ci[bot], @staeff and @zahidkizmaz

2.4.0 (2023-09-29)

Minor Changes

  • Gracefully handle files with mixed lined endings (#1942) @EricHripko

  • Implement a pre_prompt hook that will run before prompts (#1950) @ericof

Documentation updates

  • Implement a pre_prompt hook that will run before prompts (#1950) @ericof

  • update main docstrings to include overwrite_if_exists and skip_if_file_exists (#1947) @david-abn

This release is made by wonderful contributors:

@EricHripko, @david-abn and @ericof

2.3.1 (2023-09-21)

Minor Changes

  • add checkout details to the context (fixes #1759) (#1923) @JonZeolla

CI/CD and QA changes

  • Update the black pre-commit hook URL and version (#1934) @kurtmckee

  • Use UTF-8 for file reading/writing (#1937) @rmartin16

Documentation updates

  • Add missing “parent dir” symbol in tutorial 2 (#1932) @tvoirand

  • Remove colons from exemplary prompt messages (#1912) @paduszyk

  • docs: add install instruction for Void Linux (#1917) @tranzystorek-io

Bugfixes

  • Fix nested templates in Git repository (#1922) @BTatlock

  • Fix prompt counter. (#1940) @ericof

  • Fix variables with null default not being required (#1919) (#1920) @limtis0

This release is made by wonderful contributors:

@BTatlock, @JonZeolla, @ericof, @kurtmckee, @limtis0, @paduszyk, @rmartin16, @tranzystorek-io and @tvoirand

2.3.0 (2023-08-03)

Minor Changes

  • Improve style of prompts using rich (#1901) @vemonet

CI/CD and QA changes

  • Bump paambaati/codeclimate-action from 4.0.0 to 5.0.0 (#1908) @dependabot

  • [pre-commit.ci] pre-commit autoupdate (#1907) @pre-commit-ci

Bugfixes

  • Fix replay (#1904) @vemonet

  • Support multichoice overwrite (#1903) @Meepit

This release is made by wonderful contributors:

@Meepit, @dependabot, @dependabot[bot], @ericof, @pre-commit-ci, @pre-commit-ci[bot] and @vemonet

2.2.3 (2023-07-11)

Changes

Minor Changes

  • Add support for adding human-readable labels for choices when defining multiple choices questions (#1898) @vemonet

  • Prompt with replay file (#1758) @w1ndblow

CI/CD and QA changes

  • Set cookiecutter/VERSION.txt as source of truth for version number (#1896) @ericof

  • [pre-commit.ci] pre-commit autoupdate (#1897) @pre-commit-ci

Bugfixes

  • Fix issue where the prompts dict was not passed for yes_no questions (#1895) @vemonet

  • Set cookiecutter/VERSION.txt as source of truth for version number (#1896) @ericof

This release is made by wonderful contributors:

@ericof, @pre-commit-ci, @pre-commit-ci[bot], @vemonet and @w1ndblow

2.2.2 (2023-07-10)

CI/CD and QA changes

  • Improve gitignore (#1889) @audreyfeldroy

  • Add warning for jinja2_time (#1890) @henryiii

This release is made by wonderful contributors:

@audreyfeldroy, @ericof and @henryiii

2.2.0 (2023-07-06)

Changes

  • Added timeout on request.get() for ensuring that if a recipient serve… (#1772) @openrefactory

  • Fixing Carriage Return Line Feed (CRLF) order in docs #1792 (#1793) @Lahiry

  • Reduce I/O (#1877) @kurtmckee

  • Remove a pre-commit hook special case (#1875) @kurtmckee

  • Remove universal bdist_wheel option; use “python -m build” (#1739) @mwtoews

  • Remove unused import from post-generate hook script example (#1795) @KAZYPinkSaurus

  • Standardize newlines for all platforms (#1870) @kurtmckee

  • feat: Add resolved template repository path as _repo_dir to the context (#1771) @tmeckel

Minor Changes

  • Added support for providing human-readable prompts to the different variables (#1881) @vemonet

  • Added: Boolean variable support in JSON (#1626) @liortct

  • Added: CLI option to keep project files on failure. (#1669) @MaciejPatro

  • Added: Support partially overwrite keys in nested dict (#1692) @cksac

  • Added: Templates inheritance (#1485) @simobasso

  • Code quality: Tests upgrade: Use pathlib for files read/write (#1718) @insspb

  • Inline jinja2-time extension code (#1779) @tranzystorek-io

  • Support Python 3.11 (#1850) @kurtmckee

  • Support nested config files (#1770) @dariocurr

  • preserves original options in _cookiecutter (#1874) @kjaymiller

CI/CD and QA changes

  • Add a Dependabot config to autoupdate GitHub workflow actions (#1851) @kurtmckee

  • Added: Readthedocs build config (#1707) @insspb

  • Bump actions/setup-python from 3 to 4 (#1854) @dependabot

  • Bump paambaati/codeclimate-action from 3.0.0 to 4.0.0 (#1853) @dependabot

  • CI/CD: Tox -> Nox: Added nox configuration (#1706) @insspb

  • CI/CD: Tox -> Nox: Github actions definition minimized + Sync nox and github actions (#1714) @insspb

  • CI/CD: Tox -> Nox: Makefile update: Removed watchmedo and sed dependency, tox replaced with nox (#1713) @insspb

  • CI/CD: Updated .pre-commit-config.yaml to use latest hooks versions (#1712) @insspb

  • Code quality: Core files: Added exception reason reraise when exception class changed (PEP 3134) (#1719) @insspb

  • Code quality: Tests upgrade: Use pathlib for files read/write (#1718) @insspb

  • Code quality: core files: Format replaced with f-strings (#1716) @insspb

  • Code quality: find.py refactored and type annotated (#1721) @insspb

  • Code quality: tests files: Simplify statements fixes (#1717) @insspb

  • Code quality: utils.make_sure_path_exists refactored and type annotated (#1722) @insspb

  • Fixed: recommonmark replaced with myst, as recommonmark is deprecated (#1709) @insspb

  • Pretty-format JSON files (#1864) @kurtmckee

  • Rename master to main so CI runs correctly on merge (#1852) @kurtmckee

  • Standardize EOF newlines (#1876) @kurtmckee

  • Update .gitignore and cite where it was copied from (#1879) @kurtmckee

  • Update base docs, remove tox (#1858) @ericof

  • Update pre-commit hook versions (#1849) @kurtmckee

  • Updated: Release drafter configuration (#1704) @insspb

  • Use tox (#1866) @kurtmckee

  • Verify an expected warning is raised (#1869) @kurtmckee

  • fixed failing lint ci action by updating repo of flake8 (#1838) @Tamronimus

Documentation updates

  • Add jinja env docs (#1872) @pamelafox

  • Documentation extension: Create a Cookiecutter From Scratch tutorial (#1592) @miro-jelaska

  • Easy PR! Fix typos and add minor doc updates (#1741) @Alex0Blackwell

  • Expand cli documentation relating to the no-input flag (#1543) (#1587) @jeremyswerdlow

  • Fix @audreyr to @audreyfeldroy github account rename (#1604) @ri0t

  • Fixed broken links to jinja docs (#1691) @insspb

  • Fixed minor typos in docs (#1753) @segunb

  • Fixed: Python code block in the replay documentation (#1715) @juhannc

  • Fixed: recommonmark replaced with myst, as recommonmark is deprecated (#1709) @insspb

  • Improve Docs Readability (#1690) @ryanrussell

  • Update base docs, remove tox (#1858) @ericof

  • Updated: Boolean Variables documentation and docstrings (#1705) @italomaia

  • docs: fix simple typo, shat -> that (#1749) @timgates42

  • fixing badge display problem (#1798) @Paulokim1

Bugfixes

  • Fixed the override not working with copy only dir #1650 (#1651) @zhongdai

  • Fixed: Removed mention of packages versions, to exclude dependabot warnings alerts (#1711) @insspb

  • cleanup files if panics during hooks - bugfix (#1760) @liortct

This release is made by wonderful contributors:

@Alex0Blackwell, @KAZYPinkSaurus, @Lahiry, @MaciejPatro, @Paulokim1, @Tamronimus, @cksac, @cookies-xor-cream, @dariocurr, @dependabot, @dependabot[bot], @ericof, @insspb, @italomaia, @jeremyswerdlow, @juhannc, @kjaymiller, @kurtmckee, @liortct, @miro-jelaska, @mwtoews, @openrefactory, @pamelafox, @ri0t, @ryanrussell, @segunb, @simobasso, @timgates42, @tmeckel, @tranzystorek-io, @vemonet and @zhongdai

2.1.1 (2022-06-01)

Documentation updates

  • Fix local extensions documentation (#1686) @alkatar21

Bugfixes

  • Sanitize Mercurial branch information before checkout. (#1689) @ericof

This release is made by wonderfull contributors:

@alkatar21, @ericof and @jensens

2.1.0 (2022-05-30)

Changes

  • Move contributors and backers to credits section (#1599) @doobrie

  • test_generate_file_verbose_template_syntax_error fixed (#1671) @MaciejPatro

  • Removed changes related to setuptools_scm (#1629) @ozer550

  • Feature/local extensions (#1240) @mwesterhof

CI/CD and QA changes

  • Check manifest: pre-commit, fixes, cleaning (#1683) @jensens

  • Follow PyPA guide to release package using GitHub Actions. (#1682) @ericof

Documentation updates

  • Fix typo in dict_variables.rst (#1680) @ericof

  • Documentation overhaul (#1677) @jensens

  • Fixed incorrect link on docs. (#1649) @luzfcb

Bugfixes

  • Restore accidentally deleted support for click 8.x (#1643) @jaklan

This release was made possible by our wonderful contributors:

@doobrie, @jensens, @ericof, @luzfcb

2.0.2 (2021-12-27)

Remark: This release never made it to official PyPI

  • Fix Python version number in cookiecutter –version and test on Python 3.10 (#1621) @ozer550

  • Removed changes related to setuptools_scm (#1629) @audreyfeldroy @ozer550

2.0.1 (2021-12-11)

Remark: This release never made it to official PyPI

Breaking Changes

  • Release preparation for 2.0.1rc1 (#1608) @audreyfeldroy

  • Replace poyo with pyyaml. (#1489) @dHannasch

  • Added: Path templates will be rendered when copy_without_render used (#839) @noirbizarre

  • Added: End of line detection and configuration. (#1407) @insspb

  • Remove support for python2.7 (#1386) @ssbarnea

Minor Changes

  • Adopt setuptools-scm packaging (#1577) @ssbarnea

  • Log the error message when git clone fails, not just the return code (#1505) @logworthy

  • allow jinja 3.0.0 (#1548) @wouterdb

  • Added uuid extension to be able to generate uuids (#1493) @jonaswre

  • Alert user if choice is invalid (#1496) @dHannasch

  • Replace poyo with pyyaml. (#1489) @dHannasch

  • update AUTHOR lead (#1532) @HosamAlmoghraby

  • Add Python 3.9 (#1478) @gliptak

  • Added: –list-installed cli option, listing already downloaded cookiecutter packages (#1096) @chrisbrake

  • Added: Jinja2 Environment extension on files generation stage (#1419) @insspb

  • Added: –replay-file cli option, for replay file distributing (#906) @Cadair

  • Added: _output_dir to cookiecutter context (#1034) @Casyfill

  • Added: CLI option to ignore hooks (#992) @rgreinho

  • Changed: Generated projects can use multiple type hooks at same time. (sh + py) (#974) @milonimrod

  • Added: Path templates will be rendered when copy_without_render used (#839) @noirbizarre

  • Added: End of line detection and configuration. (#1407) @insspb

  • Making code python 3 only: Remove python2 u’ sign, fix some strings (#1402) @insspb

  • py3: remove futures, six and encoding (#1401) @insspb

  • Render variables starting with an underscore. (#1339) @smoothml

  • Tests refactoring: test_utils write issues fixed #1405 (#1406) @insspb

CI/CD and QA changes

  • enable branch coverage (#1542) @simobasso

  • Make release-drafter diff only between master releases (#1568) @SharpEdgeMarshall

  • ensure filesystem isolation during tests execution (#1564) @simobasso

  • add safety ci step (#1560) @simobasso

  • pre-commit: add bandit hook (#1559) @simobasso

  • Replace tmpdir in favour of tmp_path (#1545) @SharpEdgeMarshall

  • Fix linting in CI (#1546) @SharpEdgeMarshall

  • Coverage 100% (#1526) @SharpEdgeMarshall

  • Run coverage with matrix (#1521) @SharpEdgeMarshall

  • Lint rst files (#1443) @ssbarnea

  • Python3: Changed io.open to build-in open (PEP3116) (#1408) @insspb

  • Making code python 3 only: Remove python2 u’ sign, fix some strings (#1402) @insspb

  • py3: remove futures, six and encoding (#1401) @insspb

  • Removed: Bumpversion, setup.py arguments. (#1404) @insspb

  • Tests refactoring: test_utils write issues fixed #1405 (#1406) @insspb

  • Added: Automatic PyPI deploy on tag creation (#1400) @insspb

  • Changed: Restored coverage reporter (#1399) @insspb

Documentation updates

  • Fix pull requests checklist reference (#1537) @glumia

  • Fix author name (#1544) @HosamAlmoghraby

  • Add missing contributors (#1535) @glumia

  • Update CONTRIBUTING.md (#1529) @glumia

  • Update LICENSE (#1519) @simobasso

  • docs: rewrite the conditional files / directories example description. (#1437) @lyz-code

  • Fix incorrect years in release history (#1473) @graue70

  • Add slugify in the default extensions list (#1470) @oncleben31

  • Renamed cookiecutter.package to API (#1442) @grrlic

  • Fixed wording detail (#1427) @steltenpower

  • Changed: CLI Commands documentation engine (#1418) @insspb

  • Added: Example for conditional files / directories in hooks (#1397) @xyb

  • Changed: README.md PyPI URLs changed to the modern PyPI last version (#1391) @brettcannon

  • Fixed: Comma in README.md (#1390) @Cy-dev-tex

  • Fixed: Replaced no longer maintained pipsi by pipx (#1395) @ndclt

Bugfixes

  • Add support for click 8.x (#1569) @cjolowicz

  • Force click<8.0.0 (#1562) @SharpEdgeMarshall

  • Remove direct dependency on markupsafe (#1549) @ssbarnea

  • fixes prompting private rendered dicts (#1504) @juhuebner

  • User’s JSON parse error causes ugly Python exception #809 (#1468) @noone234

  • config: set default on missing default_context key (#1516) @simobasso

  • Fixed: Values encoding on Windows (#1414) @agateau

  • Fixed: Fail with gitolite repositories (#1144) @javiersanp

  • MANIFEST: Fix file name extensions (#1387) @sebix

Deprecations

  • Removed: Bumpversion, setup.py arguments. (#1404) @insspb

  • Removed support for Python 3.6 and PyPy (#1608) @audreyfeldroy

This release was made possible by our wonderful contributors:

@Cadair, @Casyfill, @Cy-dev-tex, @HosamAlmoghraby, @SharpEdgeMarshall, @agateau, @audreyfeldroy, @brettcannon, @chrisbrake, @cjolowicz, @dHannasch, @gliptak, @glumia, @graue70, @grrlic, @insspb, @javiersanp, @jonaswre, @jsoref, @Jthevos, @juhuebner, @logworthy, @lyz-code, @milonimrod, @ndclt, @noirbizarre, @noone234, @oncleben31, @ozer550, @rgreinho, @sebix, @Sahil-101, @simobasso, @smoothml, @ssbarnea, @steltenpower, @wouterdb, @xyb, Christopher Wolfe and Hosam Almoghraby ( RIAG Digital )

1.7.2 (2020-04-21)

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

1.7.1 (2020-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.

Features:

  • 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.

Features:

  • 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.

Features:

  • 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.

Features:

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/audreyfeldroy/cookiecutter-pypackage.git
  • Can now use Cookiecutter from Python as a package:

    from cookiecutter.main import cookiecutter

    # Create project from the cookiecutter-pypackage/ template
    cookiecutter('cookiecutter-pypackage/')

    # Create project from the cookiecutter-pypackage.git repo template
    cookiecutter('https://github.com/audreyfeldroy/cookiecutter-pypackage.git')
  • 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.