A command-line utility that creates projects from cookiecutters (project templates), e.g. creating a Python package project from a Python package project template.
- Documentation: http://cookiecutter.rtfd.org
- GitHub: https://github.com/audreyr/cookiecutter
- Free software: BSD license
- PyPI: https://pypi.python.org/pypi/cookiecutter
Did someone say features?
Cross-platform: Windows, Mac, and Linux are officially supported.
Works with Python 2.6, 2.7, 3.3, 3.4, 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 # For the sake of brevity, repos on GitHub can just use the 'gh' prefix $ cookiecutter gh:audreyr/cookiecutter-pypackage
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
Direct access to the Cookiecutter API allows for injection of extra context.
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.
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!
- cookiecutter-pypackage: @audreyr's ultimate Python package project template.
- cookiecutter-flask : A Flask template with Bootstrap 3, starter templates, and working user registration.
- cookiecutter-bottle : A cookiecutter template for creating reusable Bottle projects quickly.
- cookiecutter-simple-django: A cookiecutter template for creating reusable Django projects quickly.
- cookiecutter-django: A bleeding edge Django project template with Bootstrap 3, customizable users app, starter templates, and working user registration.
- cookiecutter-djangopackage: A template designed to create reusable third-party PyPI friendly Django apps. Documentation is written in tutorial format.
- cookiecutter-django-cms: A template for Django CMS with simple Bootstrap 3 template. It has a quick start and deploy documentation.
- cookiecutter-djangocms-plugin: A template to get started with custom plugins for django-cms
- cookiecutter-openstack: A template for an OpenStack project.
- cookiecutter-docopt: A template for a Python command-line script that uses docopt for arguments parsing.
- cookiecutter-django-crud: A template to create a Django app with boilerplate CRUD around a model including a factory and tests.
- cookiecutter-quokka-module: A template to create a blueprint module for Quokka Flask CMS.
- cookiecutter-django-lborgav: Another cookiecutter template for Django project with Booststrap 3 and FontAwesome 4.
- cookiecutter-django-paas: Django template ready to use in SAAS platforms like Heroku, OpenShift, etc..
- cookiecutter-kivy: A template for NUI applications built upon the kivy python-framework.
- cookiedozer: A template for Python Kivy apps ready to be deployed to android devices with Buildozer.
- cookiecutter-pypackage-minimal: A mimimal Python package template.
- cookiecutter-ansible-role: A template to create ansible roles. Forget about file creation and focus on actions.
- cookiecutter-pylibrary: An intricate template designed to quickly get started with good testing and packaging (working configuration for Tox, Pytest, Travis-CI, Coveralls, AppVeyor, Sphinx docs, isort, bumpversion, packaging checks etc).
- cookiecutter-pylibrary-minimal: Same as above but without Pytest and static configuration for Tox/Travis/AppVeyor (no generator).
- cookiecutter-pyvanguard: A template for cutting edge Python development. Invoke, pytest, bumpversion, and Python 2/3 compatability.
- Python-iOS-template: A template to create a Python project that will run on iOS devices.
- Python-Android-template: A template to create a Python project that will run on Android devices.
- cookiecutter-django-rest-framework: A template for creating reusable Django REST Framework packages.
- bootstrap.c: A template for simple projects written in C with autotools.
- cookiecutter-avr: A template for avr development.
- BoilerplatePP: A simple cmake template with unit testing for projects written in C++.
- cookiecutter-cl-project: A template for Common Lisp project with bootstrap script and Slime integration.
- cookiecutter-jquery: A jQuery plugin project template based on jQuery Boilerplate.
- cookiecutter-jswidget: A project template for creating a generic front-end, non-jQuery JS widget packaged for multiple JS packaging systems.
- cookiecutter-component: A template for a Component JS package.
- pandoc-talk: A cookiecutter template for giving talks with pandoc and XeTeX.
- cookiecutter-latex-article: A LaTeX template geared towards academic use.
- slim-berkshelf-vagrant: A simple cookiecutter template with sane cookbook defaults for common vagrant/berkshelf cookbooks.
- cookiecutter-complexity: A cookiecutter for a Complexity static site with Bootstrap 3.
- cookiecutter-tumblr-theme: A cookiecutter for a Tumblr theme project with GruntJS as concatination tool.
- cookiecutter-scala-spark: A cookiecutter template for Apache Spark applications written in Scala.
- cookiecutter-atari2600: A cookiecutter template for Atari2600 projects.
- Paste has a create option that creates a skeleton project.
- Diecutter: an API service that will give you back a configuration file from a template and variables.
- Django's startproject and startapp commands can take in a --template option.
- python-packager: Creates Python packages from its own template, with configurable options.
- Yeoman has a Rails-inspired generator system that provides scaffolding for apps.
- Pyramid's pcreate command for creating Pyramid projects from scaffold templates.
- mr.bob is a filesystem template renderer, meant to deprecate tools such as paster and templer.
- grunt-init used to be built into Grunt and is now a standalone scaffolding tool to automate project creation.
- scaffolt consumes JSON generators with Handlebars support.
- init-skeleton clones or copies a repository, executes npm install and bower install and removes the .git directory.
- Cog python-based code generation toolkit developed by Ned Batchelder
The core committer team is @audreyr, @pydanny, @michaeljoseph, @pfmoore, and @hackebrot. We welcome you and invite you to participate.
Stuck? Try one of the following:
- See the Troubleshooting page.
- Ask for help on Stack Overflow.
- You are strongly encouraged to file an issue about the problem, even if it's just "I can't get it to work on this cookiecutter" with a link to your cookiecutter. Don't worry about naming/pinpointing the issue properly.
- Ask for help in #cookiecutter if you must (but please try one of the other options first, so that others can benefit from the discussion)
Development on Cookiecutter is community-driven:
- Huge thanks to all the contributors who have pitched in to help make Cookiecutter an even better tool.
- Everyone is invited to contribute. Read the contributing instructions, then get started.
Connect with other Cookiecutter contributors and users in IRC:
- #cookiecutter on irc.freenode.net (note: due to work and commitments, a core committer might not always be available)
Encouragement is unbelievably motivating. If you want more work done on Cookiecutter, show support:
- Thank a core committer for their efforts.
- Star Cookiecutter on GitHub.
- Join the Cookiecutter Gittip community.
Got criticism or complaints?
- File an issue so that Cookiecutter can be improved. Be friendly and constructive about what could be better. Make detailed suggestions.
- Keep us in the loop so that we can help. For example, if you are discussing problems with Cookiecutter on a mailing list, file an issue where you link to the discussion thread and/or cc at least 1 core committer on the email.
- Be encouraging. A comment like "This function ought to be rewritten like this" is much more likely to result in action than a comment like "Eww, look how bad this function is."
Waiting for a response to an issue/question?
- Be patient and persistent. All issues are on the core committer team's radar and will be considered thoughtfully, but we have a lot of issues to work through. If urgent, it's fine to ping a core committer in the issue with a reminder.
- Ask others to comment, discuss, review, etc.
- Search the Cookiecutter repo for issues related to yours.
- Need a fix/feature/release/help urgently, and can't wait? @audreyr is available for hire for consultation or custom development.