Skip to content

Release Notes - v0.9.0

Overview

This release adds changelog backfilling tools to streamline creating structured changelogs for existing projects. New CLI commands make it easy to extract version history from git tags and generate a skeleton CHANGELOG.json.

Highlights

  • New list-tags command for viewing release history
  • New init --from-tags command for generating CHANGELOG.json from git tags
  • New --all-versions flag for parsing commits across all versions at once

Added

list-tags Command

List all semver tags in your repository with dates and commit counts:

schangelog list-tags

Output (TOON format by default):

tags[
  {name:v0.1.0 date:2026-01-03 commit_count:15 is_initial:true}
  {name:v0.2.0 date:2026-01-03 commit_count:8}
  {name:v0.3.0 date:2026-01-04 commit_count:12}
]
total_tags:3

Use --format=json for JSON output.

init --from-tags Command

Generate a skeleton CHANGELOG.json from your git tag history:

# Create skeleton from git tags
schangelog init --from-tags

# Specify project name and output file
schangelog init --from-tags --project=myproject -o CHANGELOG.json

# Set versioning and commit convention
schangelog init --from-tags --versioning=semver --convention=conventional

This creates a CHANGELOG.json with:

  • All semver tags as releases with correct dates
  • Placeholder entries based on commit analysis
  • Proper conventional commit categorization (feat → Added, fix → Fixed, etc.)

--all-versions Flag for parse-commits

Parse commits for all version ranges at once, useful for backfilling:

schangelog parse-commits --all-versions
schangelog parse-commits --all-versions --no-files  # Compact output

Output includes commits grouped by version with summaries.

--until Without --since

Parse all commits from the beginning of the repository to a specific tag:

schangelog parse-commits --until=v0.1.0

Library Additions

New functions in the gitlog package:

Function Description
GetTags() Returns all semver tags sorted by version with dates and commit counts
GetAllVersionRanges() Returns version ranges for parsing commits between each release
GetFirstCommit() Returns the hash of the first commit in the repository

Workflow: Backfilling a Changelog

For projects without a structured changelog:

# 1. View release history
schangelog list-tags

# 2. Generate skeleton CHANGELOG.json
schangelog init --from-tags -o CHANGELOG.json

# 3. Parse all commits for reference
schangelog parse-commits --all-versions --no-files > commits.toon

# 4. Refine CHANGELOG.json entries manually or with LLM assistance

# 5. Validate and generate
schangelog validate CHANGELOG.json
schangelog generate CHANGELOG.json -o CHANGELOG.md

Documentation

  • MkDocs source moved from docsrc/ to docs/ (standard MkDocs layout)
  • HTML documentation now published to gh-pages branch via mkdocs gh-deploy

What's Next

v0.10.0 will focus on Localization:

  • Localized section headers (Added → Ajouté, Fixed → Corrigé)
  • 25+ language support matching Keep a Changelog translations
  • Embedded locale files via //go:embed