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: https://cookiecutter.readthedocs.io
- GitHub: https://github.com/audreyr/cookiecutter
- PyPI: https://pypi.python.org/pypi/cookiecutter
- Free and open source software: BSD license
We are proud to be an open source sponsor of PyCon 2016.
Did someone say features?
Cross-platform: Windows, Mac, and Linux are officially supported.
Works with Python 2.7, 3.4, 3.5, 3.6, 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
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": "[email protected]", "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.
- Prompts are the keys in
Cross-platform support for
~/.cookiecutterrc
files:default_context: full_name: "Audrey Roy" email: "[email protected]" github_username: "audreyr" cookiecutters_dir: "~/.cookiecutters/"
Cookiecutters (cloned Cookiecutter project templates) are put into
~/.cookiecutters/
by default, or cookiecutters_dir if specified.If you have already cloned a cookiecutter into
~/.cookiecutters/
, you can reference it by directory name:# Clone cookiecutter-pypackage $ cookiecutter gh:audreyr/cookiecutter-pypackage # Now you can use the already cloned cookiecutter by name $ cookiecutter cookiecutter-pypackage
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
Inject extra context with command-line arguments:
$ cookiecutter --no-input gh:msabramo/cookiecutter-supervisor program_name=foobar startsecs=10
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.
Making great cookies takes a lot of cookiecutters and contributors. We're so pleased that there are many Cookiecutter project templates to choose from. We hope you find a cookiecutter that is just right for your needs.
These Cookiecutters are maintained by the cookiecutter team:
- cookiecutter-pypackage: @audreyr's ultimate Python package project template.
- cookiecutter-django: A bleeding edge Django project template with Bootstrap 4, customizable users app, starter templates, working user registration, celery setup, and much more.
- cookiecutter-pytest-plugin: Minimal Cookiecutter template for authoring pytest plugins that help you to write better programs.
Python | Python-Django | Python-Pyramid | Cookiecutter (meta) | Ansible | Git | C | C++ | C# | Common Lisp | Elm | Golang | Java | JS | Kotlin | LaTeX/XeTeX | PHP | Berkshelf-Vagrant | HTML | Scala | 6502 Assembly | Data Science | Tornado | Reproducible Science | Continuous Delivery
If you don't find a cookiecutter that suits your needs here, please consider writing or suggesting one. We wish for our users to find a solution for their use cases, and we provide a list of other projects that we do not maintain for your convenience (please see the Similar Projects section).
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 on Gitter 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 on Gitter:
- https://gitter.im/audreyr/cookiecutter (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.
- Support this project
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.
This project is run by volunteers. Please support them in their efforts to maintain and improve Cookiecutter:
- Daniel Roy Greenfeld (@pydanny): patreon.com/danielroygreenfeld
- Raphael Pierzina (@hackebrot): patreon.com/hackebrot
You can also support this project by taking our Python packaging course:
Also available in Spanish:
We would like to thank the following people for supporting us:
- Alex DeBrie
- Alexandre Y. Harano
- Bruno Alla
- Carol Willing
- Russell Keith-Magee
Everyone interacting in the Cookiecutter project's codebases, issue trackers, chat rooms, and mailing lists is expected to follow the PyPA Code of Conduct.
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-pipproject: Minimal package for pip-installable projects
- cookiecutter-pypackage-minimal: A minimal Python package template.
- cookiecutter-lux-python: A boilerplate Python project that aims to create Python package with a convenient Makefile-facility and additional helpers.
- cookiecutter-flask : A Flask template with Bootstrap 3, starter templates, and working user registration.
- cookiecutter-flask-2: A heavier weight fork of cookiecutter-flask, with more boilerplate including forgotten password and Heroku integration
- cookiecutter-flask-foundation : Flask Template with caching, forms, sqlalchemy and unit-testing.
- cookiecutter-flask-minimal : Minimal but production-ready Flask project template with no other dependencies except for Flask itself.
- cookiecutter-flask-skeleton : Flask starter project.
- 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-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-pyvanguard: A template for cutting edge Python development. Invoke, pytest, bumpversion, and Python 2/3 compatibility.
- 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 to create base and external Tryton modules.
- cookiecutter-tryton-fulfilio: A template for creating tryton modules.
- cookiecutter-pytest-plugin: Minimal Cookiecutter template for authoring pytest plugins that help you to write better programs.
- cookiecutter-tox-plugin: Minimal Cookiecutter template for authoring tox plugins to change or extend the behavior of your test automation.
- cookiecutter-tapioca: A Template for building tapioca-wrapper based web API wrappers (clients).
- cookiecutter-muffin: A Muffin template with Bootstrap 3, starter templates, and working user registration.
- cookiecutter-octoprint-plugin: A template for building plugins for OctoPrint.
- cookiecutter-funkload-friendly: Cookiecutter template for a funkload-friendly project.
- cookiecutter-python-app: A template to create a Python CLI application with subcommands, logging, YAML configuration, pytest tests, and Virtualenv deployment.
- morepath-cookiecutter: Cookiecutter template for Morepath, the web microframework with superpowers.
- Springerle/hovercraft-slides: A template for new Hovercraft! presentation projects (
impress.js
slides in reStructuredText). - cookiecutter-snakemake-analysis-pipeline: One way to easily set up Snakemake-based analysis pipelines.
- cookiecutter-py3tkinter: Template for Python 3 Tkinter application gui.
- cookiecutter-pyqt5: A prebuilt PyQt5 GUI template with a fully featured Pytest test suite and Travis CI integration all in an optimal Python package.
- cookiecutter-pyqt4: A prebuilt PyQt4 GUI template with a logging support, structure for tests and separation of ui and worker components.
- cookiecutter-xontrib: A template for building xontribs, a.k.a xonsh contributions
- cookiecutter-conda-python: A template for building Conda Python packages
- cookiecutter-pypackage-rust-cross-platform-publish: A template for a Python wheel containing a Rust binary module that supports releasing on Windows, OSX and Linux.
- cookiecutter-telegram-bot: A template project for Telegram bots with webhooks on CherryPy.
- python-project-template: A template for Python projects with sophisticated release automation.
- cookiecutter-anyblok-project: A template for Anyblok based projects.
- cookiecutter-python-cli: A cookiecutter template for creating a Python CLI application using click
- cookiecutter-django: A bleeding edge Django project template with Bootstrap 4, customizable users app, starter templates, working user registration, celery setup, and much more.
- cookiecutter-django-rest: For creating REST apis for mobile and web applications.
- cookiecutter-simple-django: A cookiecutter template for creating reusable Django projects quickly.
- django-docker-bootstrap: Django development/production environment with docker, integrated with Postgres, NodeJS(React), Nginx, uWSGI.
- 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-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 Bootstrap 3 and FontAwesome 4
- cookiecutter-django-paas: Django template ready to use in PAAS platforms like Heroku, OpenShift, etc..
- cookiecutter-django-rest-framework: A template for creating reusable Django REST Framework packages.
- cookiecutter-django-aws-eb: Get up and running with Django on AWS Elastic Beanstalk.
- cookiecutter-wagtail : A cookiecutter template for Wagtail CMS based sites.
- wagtail-cookiecutter-foundation: A complete template for Wagtail CMS projects featuring Zurb Foundation 6, ansible provisioning and deployment , front-end dependency management with bower, modular apps to get your site up and running including photo_gallery, RSS feed etc.
- django-starter: A Django template complete with vagrant and provisioning scripts - inspired by 12 factor apps and cookiecutter-django.
- cookiecutter-django-gulp: A Cookiecutter template for integrating frontend development tools in Django projects.
- wagtail-starter-kit: A cookiecutter complete with wagtail, django layout, vagrant, provisioning scripts, front end build system and more!
- cookiecutter-django-herokuapp: A Django 1.7+ template optimized for Python 3 on Heroku.
- cookiecutter-simple-django-cn: A simple Django templates for chinese.
- cc_django_ember_app: For creating applications with Django and EmberJS
- cc_project_app_drf: For creating REST apis based on the "project app" project architecture
- cc_project_app_full_with_hooks: For creating Django projects using the "project app" project architecture
- cc-automated-drf-template: A template + script that automatically creates your Django REST project with serializers, views, urls, and admin files based on your models file as input.
- cookiecutter-django-foundation: Fork of cookiecutter-django based on Zurb Foundation 6 front-end framework
- cookiecutter-django-ansible: Cookiecutter Django Ansible is a framework for jumpstarting an ansible project for provisioning a server that is ready for your cookiecutter-django application.
- wemake-django-template: Bleeding edge Django template focused on code quality and security.
- pyramid-cookiecutter-alchemy: A Cookiecutter (project template) for creating a Pyramid project using SQLite for persistent storage, SQLAlchemy for an ORM, URL dispatch for routing, and Jinja2 for templating.
- pyramid-cookiecutter-starter: A Cookiecutter (project template) for creating a Pyramid starter project using URL dispatch for routing and either Jinja2, Chameleon, or Mako for templating.
- pyramid-cookiecutter-zodb: A Cookiecutter (project template) for creating a Pyramid project using ZODB for persistent storage, traversal for routing, and Chameleon for templating.
- substanced-cookiecutter: A cookiecutter (project template) for creating a Substance D starter project. Substance D is built on top of Pyramid.
- cookiecutter-pyramid-talk-python-starter: An opinionated Cookiecutter template for creating Pyramid web applications starting way further down the development chain. This cookiecutter template will create a new Pyramid web application with email, sqlalchemy, rollbar, and way more integrated.
Meta-templates for generating Cookiecutter project templates.
- cookiecutter-template: Cookiecutter template for creating a... cookiecutter template...
- cookiecutter-molecule: Create Molecule roles following community best practices, with an already implemented test infrastructure leveraging Molecule, Docker and Testinfra.
- cookiecutter-ansible-role: A template to create ansible roles. Forget about file creation and focus on actions.
- cookiecutter-ansible-role-ci: Create Ansible roles following best practices, with an already implemented test infrastructure leveraging Test-kitchen, Docker and InSpec.
- cookiecutter-git: Git repo project template 📋
- 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-dpf-effect: An audio plugin project template for the DISTRHO Plugin Framework (DPF)
- cookiecutter-dpf-audiotk: An audio plugin project template for the DISTRHO Plugin Framework (DPF) and the Audio Toolkit (ATK) DSP library
- cookiecutter-kata-gtest: A template for C++ test-driven development katas using the Google Test framework.
- cookiecutter-kata-cpputest: A template for C++ test-driven-development katas using the CppUTest framework.
- 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-elm: Elm based cookiecutter with basic html example.
- cookiecutter-golang: A template to create new go based projects following best practices.
- cookiecutter-java: Cookiecutter for basic java application setup with gradle
- cookiecutter-spring-boot: Cookiecutter for standard java spring boot gradle application
- cookiecutter-android: Cookiecutter for Gradle-based Android projects
- cookiecutter-es6-boilerplate: A cookiecutter for front end projects in ES6.
- cookiecutter-webpack: A template for webpack 2 projects with hot reloading, babel es6 modules, and react.
- 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.
- cookiecutter-es6-package: A template for writing node packages using ES6 via babel.
- cookiecutter-angular2: A template for modular angular2 with typescript apps.
- CICADA: A template + script that automatically creates list/detail controllers and partials for an AngularJS frontend to connect to a DRF backend. Works well with cc-automated-drf-template.
- cookiecutter-kotlin-gradle: A bare-bones template for Gradle-based Kotlin projects.
- 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.
- cookiecutter-mediawiki-extension: A template for MediaWiki extensions.
- cookiecutter-sublime-text-3-plugin: Sublime Text 3 plugin template with custom settings, commands, key bindings and main menu.
- sublime-snippet-package-template: Template for Sublime Text packages containing snippets.
- 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-reveal.js: A cookiecutter template for reveal.js presentations.
- cookiecutter-tumblr-theme: A cookiecutter for a Tumblr theme project with GruntJS as concatenation tool.
- cookiecutter-scala: A cookiecutter template for a simple scala hello world application with a few libraries.
- cookiecutter-scala-spark: A cookiecutter template for Apache Spark applications written in Scala.
- cookiecutter-atari2600: A cookiecutter template for Atari2600 projects.
- widget-cookiecutter: A cookiecutter template for creating a custom Jupyter widget project.
- cookiecutter-data-science: A logical, reasonably standardized, but flexible project structure for doing and sharing data science work in Python. Full documentation available here.
- cookiecutter-r-data-analysis: Template for a R based workflow to docx (via Pandoc) and pdf (via LaTeX) reports.
- cookiecutter-docker-science: Cookiecutter template for data scientists working in Docker containers.
- cookiecutter-reproducible-science: A cookiecutter template to start a reproducible and transparent science project including data, models, analysis, and reports (i.e., your scientific paper) with close resemblances to the philosophy of Cookiecutter Data Science.
- cookiecutter-data-driven-journalism: A cookiecutter template to facilitate transparency in data journalism with consistant organisation of data journalism projects and some pre-populated files (including .gitignore, README, AUTHORS)
- painless-continuous-delivery: A cookiecutter template for software development setups with continuous delivery baked in. Python (Django, Flask), and experimental PHP support.
- cookiecutter-devenv: A template to add a development and ci environment to an existing project.
- cookiecutter-tf-module: Cookiecutter template for building consistent Terraform modules.
- cookiecutter-tornado: Cookiecutter template for Tornado based projects
- cookiecutter-awesome: Cookiecutter to create an awesome list.
- cookiecutter_dotfile: Template for a folder of dotfiles managed by stow.
- cookiecutter-raml: Template for RAML v1.0 API documents.
- 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.