Features
Did someone say features?
Cross-platform: Windows, Mac, and Linux are officially supported.
Works with Python 2.6, 2.7, 3.3, and PyPy. (But you don’t have to know/write Python
code to use Cookiecutter.)
Project templates can be in any programming language or markup format:
Python, JavaScript, Ruby, CoffeeScript, RST, Markdown, CSS, HTML, you name
it. You can use multiple languages in the same project template.
Simple command line usage:
# Create project from the cookiecutter-pypackage.git repo template
# You'll be prompted to enter values.
# Then it'll create your Python package in the current working directory,
# based on those values.
$ cookiecutter https://github.com/audreyr/cookiecutter-pypackage.git
Can also use it at the command line with a local template:
# Create project in the current working directory, from the local
# cookiecutter-pypackage/ template
$ cookiecutter cookiecutter-pypackage/
Or use it from Python:
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/audreyr/cookiecutter-pypackage.git')
Directory names and filenames can be templated. For example:
{{cookiecutter.repo_name}}/{{cookiecutter.repo_name}}/{{cookiecutter.repo_name}}.py
Supports unlimited levels of directory nesting.
100% of templating is done with Jinja2. This includes file and directory names.
Simply define your template variables in a cookiecutter.json file. For example:
{
"full_name": "Audrey Roy",
"email": "audreyr@gmail.com",
"project_name": "Complexity",
"repo_name": "complexity",
"project_short_description": "Refreshingly simple static site generator.",
"release_date": "2013-07-10",
"year": "2013",
"version": "0.1.1"
}
Unless you suppress it with –no-input, you are prompted for input:
Prompts are the keys in cookiecutter.json.
Default responses are the values in cookiecutter.json.
Prompts are shown in order.
Cross-platform support for ~/.cookiecutterrc files:
default_context:
full_name: "Audrey Roy"
email: "audreyr@gmail.com"
github_username: "audreyr"
cookiecutters_dir: "~/.cookiecutters/"
Cookiecutters (cloned Cookiecutter project templates) are put into
~/.cookiecutters/ by default, or cookiecutters_dir if specified.
You can use local cookiecutters, or remote cookiecutters directly from Git
repos or from Mercurial repos on Bitbucket.
Default context: specify key/value pairs that you want used as defaults
whenever you generate a project
Pre- and post-generate hooks: Python or shell scripts to run before or after
generating a project.
Paths to local projects can be specified as absolute or relative.
Projects are always generated to your current directory.
Available Cookiecutters
Here is a list of cookiecutters (aka Cookiecutter project templates) for you to use or fork.
Make your own, then submit a pull request adding yours to this list!
History
In Development (Master Branch)
Nothing yet.
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.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
cookiecutter('cookiecutter-pypackage/')
# Create project from the cookiecutter-pypackage.git repo template
cookiecutter('https://github.com/audreyr/cookiecutter-pypackage.git')
Internal refactor to remove any code that changes the working directory.
0.2 (2013-07-17)
Bumped to “Development Status :: 3 - Alpha”.
Roadmap
If something is not listed here, check the issues under each milestone.
This is subject to change depending on the needs and contributions of the
community. Feedback on pull requests/issues affects the priority of items on
the roadmap.
Also, please be patient and keep in mind that this is a volunteer effort, and
that the review process takes time.
0.7.1
This is a patch release to fix minor bugs and any potential problems with 0.7.0.
0.8.0
This release will include a number of features and bug fixes proposed and
implemented by the community in pull requests.
0.9.0
This release is for new features proposed through issues. Note: some issues
tagged 0.9.0 might be moved to 0.8.0 if anyone implements them and submits a
pull request.