towncrier
Building newsfiles for your project.
What it is and what it does
Towncrier is a changelog generator that collects small, issue-specific "news fragments" from developers and synthesizes them into a polished changelog for end users. Rather than having all developers edit a single changelog file (which causes merge conflicts) or mining the Git history (which mixes implementation details with user-facing changes), towncrier asks each contributor to create a small fragment file describing their change from a user perspective. The tool then combines these fragments into a structured, readable release note.
It works as a command-line tool and integrates with any project type and platform. The core dependencies are minimal: click for CLI handling, jinja2 for templating the output, and importlib utilities for metadata. It supports Python 3.9 through 3.13 and is used by major projects.
Use it for:
- Generate a changelog for a release by collecting pre-written fragments from each merged pull request or closed issue.
- Avoid merge conflicts on a shared changelog file by having each contributor write a separate fragment instead.
- Produce user-focused release notes that omit implementation details and focus on what end users need to know.
- Automate changelog creation as part of a release workflow or CI/CD pipeline.
- Maintain a consistent changelog format and structure across multiple releases.
Worth the install?
AI-flagged interpretation of the facts on this page — verify before relying
Towncrier generates changelogs from individual news fragment files rather than a single shared log, reducing merge conflicts and focusing on end-user-relevant changes.
Yes. Towncrier solves a real problem—changelog merge conflicts and scattered release-note authorship—with a lightweight, well-maintained tool. Low install friction, no known vulnerabilities, active development, and proven adoption make it a safe choice for any team managing releases.
Install
towncrier on PyPI
pip
pip install towncrieruv
uv add towncrierpoetry
poetry add towncrierInstalling towncrier
Before you install
Low install friction with a pure-Python wheel and five common dependencies (click, jinja2, importlib-metadata, importlib-resources, tomli). Actively maintained with recent commits and no known vulnerabilities.
License in practice
MIT license permits commercial and private use with minimal restrictions; you may use, modify, and distribute towncrier freely provided you retain the license notice.
Quickstart
pip install towncrier
towncrier build --version 25.8.0
Requires Python 3.9 or later; auto-detection of project version may require additional configuration depending on your project setup.
Verify before relying
- Whether the tool's auto-detection of project version works reliably across all project types and build systems.
- Performance characteristics when handling large numbers of news fragments or complex fragment templates.
Package facts
| License | MIT (permissive) |
| Python support | supports the current Python release (>=3.9) |
| Install friction | low — pure-Python wheel |
| Runtime dependencies | 5 — click, importlib-metadata, importlib-resources, jinja2, tomli |
| Maintenance | actively maintained — 349 days since the last release |
| Last repo commit | |
| First released | |
| Downloads | 4,555,801/month — #2,282 on PyPI (30-day window, as of 2026-08-14) |
| Known vulnerabilities | none known (OSV.dev, checked 2026-08-14) |
Evidence: towncrier-25.8.0-py3-none-any.whl
Tags
More Build Tools packages
Provides reusable utilities for Python…
permissive · top 100 on PyPI
tqdmWraps any iterable to display a real-time…
copyleft · top 100 on PyPI
pippip is the standard installer for Python…
permissive · top 100 on PyPI
hatchlingHatchling is a standards-compliant Python build…
permissive · top 100 on PyPI
grpcio-toolsGenerates Python gRPC service stubs and message…
permissive · top 1,000 on PyPI
pre-commitpre-commit is a framework for installing and…
permissive · top 1,000 on PyPI
blurbblurb is a command-line tool that manages…
permissive · top 15,000 on PyPI
sphinxcontrib-towncrierA Sphinx extension that automatically injects a…
permissive · top 15,000 on PyPI
antsibull-changelogantsibull-changelog is a CLI tool that…
copyleft · top 15,000 on PyPI
versioneerVersioneer automates version management in…
permissive · top 5,000 on PyPI
hatch-fancy-pypi-readmeA Hatch plugin that generates dynamic PyPI…
permissive · top 5,000 on PyPI
git-cliffgit-cliff generates changelog files from Git…
unclear · top 15,000 on PyPI
versioneer-518Automates version management in…
permissive · top 15,000 on PyPI
codecovUploads Python code coverage reports to…
permissive · top 5,000 on PyPI
sphinxcontrib-log-cabinetA Sphinx extension that organizes changelog…
permissive · top 15,000 on PyPI
pytest-html-mergerMerges multiple pytest HTML reports generated…
unclear · top 15,000 on PyPI