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.7, 3.3, 3.4, 3.5, 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-flask-foundation : Flask Template with caching, forms, sqlalchemy and unit-testing.
- cookiecutter-bottle : A cookiecutter template for creating reusable Bottle projects quickly.
- 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-quokka-module: A template to create a blueprint module for Quokka Flask CMS.
- 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-tryton: A template for creating tryton modules.
- cookiecutter-pytest-plugin: Minimal Cookiecutter template for authoring pytest plugins that help you to write better programs.
- cookiecutter-tapioca: A Template for building tapioca-wrapper based web API wrappers (clients).
- cookiecutter-sublime-text-3-plugin: Sublime Text 3 plugin template with custom settings, commands, key bindings and main menu.
- cookiecutter-muffin: A Muffin template with Bootstrap 3, starter templates, and working user registration.
- cookiecutter-django-rest: For creating REST apis for mobile and web applications.
- 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-django-crud: A template to create a Django app with boilerplate CRUD around a model including a factory and tests.
- 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-django-rest-framework: A template for creating reusable Django REST Framework packages.
- cookiecutter-wagtail : A cookiecutter template for Wagtail CMS based sites.
- 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-csharp-objc-binding: A template for generating a C# binding project for binding an Objective-C static library.
- cookiecutter-cl-project: A template for Common Lisp project with bootstrap script and Slime integration.
- cookiecutter-es6-boilerplate: A cookiecutter for front end projects in ES6.
- 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.
- cookiecutter-tampermonkey: A template for a TamperMonkey browser script.
- pandoc-talk: A cookiecutter template for giving talks with pandoc and XeTeX.
- cookiecutter-latex-article: A LaTeX template geared towards academic use.
- cookiecutter-beamer: A template for a LaTeX Beamer presentation.
- 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
- Skaffold python and json config based django/MVC generator, with some add-ons and integrations.
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.
Everyone interacting in the Cookiecutter project's codebases, issue trackers, chat rooms, and mailing lists is expected to follow the PyPA Code of Conduct.