{"library":"cookiecutter","title":"Cookiecutter","type":"library","description":"Cookiecutter is a command-line utility that creates projects from project templates. It streamlines the setup of new projects, such as Python packages, web applications, or data science projects, by prompting the user for configuration details and rendering files based on Jinja2 templates. Currently at version 2.7.1, it maintains an active release cadence with frequent updates and community contributions, supporting Python 3.10 and newer.","language":"python","status":"active","last_verified":"Wed May 20","install":{"commands":["pip install cookiecutter"],"cli":{"name":"cookiecutter","version":"Cookiecutter 2.7.1 from /usr/local/lib/python3.11/site-packages (Python 3.11.15 (main, Mar 16 2026, 23:07:56) [GCC 14.2.0])"}},"imports":["from cookiecutter.main import cookiecutter"],"auth":{"required":false,"env_vars":[]},"links":{"homepage":null,"github":"https://github.com/cookiecutter/cookiecutter","docs":"https://cookiecutter.readthedocs.io","changelog":null,"pypi":"https://pypi.org/project/cookiecutter/","npm":null,"openapi_spec":null,"status_page":null,"smithery":null},"quickstart":{"code":"from cookiecutter.main import cookiecutter\nimport os\nimport shutil\n\n# Define a temporary output directory\noutput_dir = './my_new_project_temp'\n\n# Define a simple local template for demonstration\ntemplate_path = './my_template'\n\n# Create a simple template for demonstration purposes\n# In a real scenario, you'd clone from a Git URL or use a local template.\nif not os.path.exists(template_path):\n    os.makedirs(os.path.join(template_path, '{{ cookiecutter.repo_name }}'))\n    with open(os.path.join(template_path, 'cookiecutter.json'), 'w') as f:\n        f.write('{\"repo_name\": \"my-project\"}')\n    with open(os.path.join(template_path, '{{ cookiecutter.repo_name }}', 'README.md'), 'w') as f:\n        f.write('Hello, {{ cookiecutter.repo_name }}!')\n\nprint(f\"Generating project from template: {template_path}\")\n# Run cookiecutter programmatically\n# This will prompt for 'repo_name' unless `no_input=True` is used\n# or default_context is provided.\n# For a runnable quickstart, we'll provide default_context and no_input.\n\ntry:\n    cookiecutter(\n        template_path,\n        no_input=True, # Set to False to be prompted\n        extra_context={'repo_name': 'my-generated-project'},\n        output_dir=output_dir,\n        overwrite_if_exists=True\n    )\n    print(f\"Project successfully generated in {os.path.join(output_dir, 'my-generated-project')}\")\n    # Verify a file exists\n    generated_file = os.path.join(output_dir, 'my-generated-project', 'README.md')\n    if os.path.exists(generated_file):\n        with open(generated_file, 'r') as f:\n            print(f\"Content of {generated_file}:\\n{f.read()}\")\n    else:\n        print(\"Error: Generated file not found.\")\nexcept Exception as e:\n    print(f\"An error occurred: {e}\")\nfinally:\n    # Clean up the temporary template and generated project\n    if os.path.exists(template_path):\n        shutil.rmtree(template_path)\n    if os.path.exists(output_dir):\n        shutil.rmtree(output_dir)\n    print(\"Cleanup complete.\")\n","lang":"python","description":"This example demonstrates how to use `cookiecutter` programmatically. It first creates a minimal local template, then generates a project from it, providing `extra_context` to avoid interactive prompts, and finally cleans up the generated files and template.","tag":null,"tag_description":null,"last_tested":"2026-04-24","results":[{"runtime":"python:3.10-alpine","exit_code":0},{"runtime":"python:3.10-slim","exit_code":0},{"runtime":"python:3.11-alpine","exit_code":0},{"runtime":"python:3.11-slim","exit_code":0},{"runtime":"python:3.12-alpine","exit_code":0},{"runtime":"python:3.12-slim","exit_code":0},{"runtime":"python:3.13-alpine","exit_code":0},{"runtime":"python:3.13-slim","exit_code":0},{"runtime":"python:3.9-alpine","exit_code":0},{"runtime":"python:3.9-slim","exit_code":0}]},"compatibility":{"tag":"verified","tag_description":"installs cleanly on critical runtimes, fast import, recently tested","last_tested":"2026-05-20","installed_version":"2.6.0","pypi_latest":"2.7.1","is_stale":true,"summary":{"python_range":"3.10–3.9","success_rate":100,"avg_install_s":4,"avg_import_s":0.96,"wheel_type":"wheel"},"results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"cookiecutter","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.8,"mem_mb":14.6,"disk_size":"42.6M"},{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"cookiecutter","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.9,"mem_mb":14.5,"disk_size":"42.5M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"cookiecutter","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":4,"import_time_s":0.55,"mem_mb":14.6,"disk_size":"44M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"cookiecutter","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.68,"mem_mb":14.5,"disk_size":"44M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"cookiecutter","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":1.16,"mem_mb":16.4,"disk_size":"46.8M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"cookiecutter","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":1.4,"mem_mb":16.3,"disk_size":"46.7M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"cookiecutter","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":4,"import_time_s":1.03,"mem_mb":16.4,"disk_size":"48M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"cookiecutter","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":1.07,"mem_mb":16.3,"disk_size":"48M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"cookiecutter","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":1.03,"mem_mb":16,"disk_size":"38.2M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"cookiecutter","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":1.13,"mem_mb":15.9,"disk_size":"38.1M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"cookiecutter","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":3.7,"import_time_s":1.05,"mem_mb":16,"disk_size":"39M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"cookiecutter","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":1.18,"mem_mb":15.9,"disk_size":"39M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"cookiecutter","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.96,"mem_mb":17,"disk_size":"38.0M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"cookiecutter","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":1.08,"mem_mb":16.9,"disk_size":"37.8M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"cookiecutter","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":3.7,"import_time_s":0.99,"mem_mb":17,"disk_size":"39M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"cookiecutter","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":1.17,"mem_mb":16.9,"disk_size":"39M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"cookiecutter","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.71,"mem_mb":16.2,"disk_size":"43.1M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"cookiecutter","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.89,"mem_mb":16.2,"disk_size":"43.1M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"cookiecutter","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":4.8,"import_time_s":0.73,"mem_mb":16.2,"disk_size":"44M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"cookiecutter","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.72,"mem_mb":16.2,"disk_size":"44M"}]}}