📋 Changelog Generator

Professional Changelogs in Seconds

Create beautiful, structured CHANGELOG.md files following the Keep a Changelog format. Drag-and-drop reordering, live preview, and multiple export options.

Start Generating →

📝 Editor

📄 Basic

Simple changelog with version sections

🔢 Semantic Versioning

Follow SemVer conventions

⚡ Conventional Commits

Align with commit message standards

🐙 GitHub Releases

Optimized for GitHub release notes

📋

No versions yet. Click "Add Version" to get started, or choose a template above.

📦 Output

Markdown
Preview

  

✨ Features

🖱

Drag & Drop Reorder

Intuitively reorder entries within each category by dragging them into the perfect sequence.

📐

Keep a Changelog Format

Follows the industry-standard Keep a Changelog format with Added, Changed, Deprecated, Removed, Fixed, and Security sections.

🎨

Live Markdown Preview

See a rendered preview of your changelog as you build it — no guesswork about the final output.

📁

Multiple Export Options

Copy to clipboard, download as .md, or export as a styled standalone HTML file — ready to share or publish.

❓ FAQ

What is a changelog and why do I need one?
A changelog is a curated, chronologically ordered list of notable changes for a project. It helps users and contributors understand what's new, what's fixed, and what's been removed between releases. A well-maintained changelog improves transparency and makes version upgrades easier for everyone.
What format does this tool use?
This generator follows the Keep a Changelog format, which organizes changes into six categories: Added, Changed, Deprecated, Removed, Fixed, and Security. This is the most widely adopted changelog format in open-source and professional software development.
Is my data stored anywhere?
No. Everything runs locally in your browser. Your changelog data never leaves your device — there are no servers, databases, or analytics. You can use this tool with complete confidence that your release information stays private.
`; download('changelog.html', html, 'text/html'); showToast('HTML file downloaded!'); } function download(name, content, type) { const blob = new Blob([content], { type }); const a = document.createElement('a'); a.href = URL.createObjectURL(blob); a.download = name; a.click(); URL.revokeObjectURL(a.href); } function showToast(msg) { const t = document.getElementById('toast'); t.textContent = msg; t.classList.add('show'); setTimeout(() => t.classList.remove('show'), 2500); } function toggleFaq(el) { el.classList.toggle('open'); el.nextElementSibling.classList.toggle('open'); } function subscribe() { const email = document.getElementById('email-input').value.trim(); if (!email || !email.includes('@')) return showToast('Please enter a valid email.'); showToast('Thanks for subscribing! 🎉'); document.getElementById('email-input').value = ''; } // Init with basic template selectTemplate('basic', document.querySelector('[data-template="basic"]'));