Skip to main content

LogForge — gitlog

LogForge — AI-Powered Changelog & Release Notes Generator

CI Coverage GitHub Releases Python 3.11+ License: MIT

One command. From git history to a human-readable, structured CHANGELOG.
Supports multiple languages, multiple output formats, and any LLM.


Quick Start

# Install directly from GitHub (recommended until published to PyPI)
pip install git+https://github.com/JToSound/LogForge.git
cd your-repo
export OPENAI_API_KEY=sk-...
gitlog generate

That's it. Your CHANGELOG.md is ready. 🎉


5s Demo

Below is a very short demo that shows gitlog generate producing a changelog in under 5 seconds on small repos.

Quick demo


Features

  • 🤖 Two-layer classification — rule engine (zero API cost) + LLM batch fallback
  • 🌍 Multilingual output — English, Traditional Chinese, Simplified Chinese, Japanese
  • 📄 Multiple formats — Markdown (Keep-a-Changelog), JSON, HTML, Twitter drafts
  • 🔗 GitHub integration — auto-generates PR/issue/commit links
  • ⚡ Batch LLM calls — never call the LLM in a loop; respects token budgets
  • 🔄 Fallback chain — LLM failure → rule engine, never interrupts the flow
  • 🧩 CI/CD ready — GitHub Actions workflow included out of the box
  • 🏠 Local inference — Ollama support for fully private generation

Installation

# Recommended: with uv
uv tool install gitlog

# Or pip
pip install gitlog

Requirements: Python 3.11+, Git


Usage

# Generate full CHANGELOG
gitlog generate

# From a specific version
gitlog generate --since v1.2.0

# HTML report
gitlog generate --format html

# Traditional Chinese output
gitlog generate --lang zh-TW

# Use a local Ollama model (no API key needed)
gitlog generate --model ollama/llama3

# Preview in terminal without writing a file
gitlog generate --dry-run

# Compare two versions
gitlog diff v1.0.0 v1.1.0

# Generate Twitter/X announcement
gitlog tweet

# ASCII commit statistics
gitlog stats

# Interactive setup
gitlog init

Configuration

Create a .gitlog.toml in your repo root (or run gitlog init):

[gitlog]
llm_provider = "openai"
model = "gpt-4o-mini"
language = "en"
format = "markdown"
output_file = "CHANGELOG.md"
project_description = "A developer tool for..."
exclude_patterns = ["^chore\\(deps\\)", "^Merge branch"]
group_by_scope = true
max_commits_per_group = 20

[gitlog.github]
repo = "owner/repo"

Full Configuration Reference

Parameter Default Description
llm_provider openai LLM provider: openai, anthropic, ollama
model gpt-4o-mini Model identifier
language en Output language: en, zh-TW, zh-CN, ja
format markdown Output format: markdown, json, html, twitter
output_file CHANGELOG.md Output file path
project_description "" Project context injected into LLM prompts
exclude_patterns see default Regex list of commit messages to skip
group_by_scope true Group commits by conventional commit scope
max_commits_per_group 20 Max commits shown per category per version
github.repo "" owner/repo for generating clickable links

GitHub Actions Integration

Add to your release workflow:

- name: Generate Changelog
  uses: JToSound/LogForge/.github/workflows/release.yml@main
  env:
    OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}

Or use the included release.yml which automatically:

  1. Builds and publishes to PyPI on tag push
  2. Generates the changelog using gitlog itself
  3. Creates a GitHub Release with the generated notes

Supported LLM Providers

Provider Model Example Env Var
OpenAI gpt-4o-mini OPENAI_API_KEY
Anthropic claude-3-5-haiku-20241022 ANTHROPIC_API_KEY
Ollama (local) ollama/llama3 (none required)
Gemini gemini/gemini-1.5-flash GEMINI_API_KEY

License

MIT © gitlog contributors

Metadata

Release files for logforge-gitlog 0.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for logforge-gitlog 0.1.1
File Size Uploaded
logforge_gitlog-0.1.1.tar.gz 31.7 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for logforge-gitlog 0.1.1
File Interpreter ABI Platform
logforge_gitlog-0.1.1-py3-none-any.whl Python 3 none any Details

Total release size: 36.9 kB

Release files / logforge_gitlog-0.1.1.tar.gz

Download URL logforge_gitlog-0.1.1.tar.gz
Size 31.7 kB
Tags Source
SHA-256 checksum
How to use checksums
7007b0240d2634db129b32dfff589152e02b24bc49b7b6ef637f39366b96cca9
BLAKE2b-256 checksum
How to use checksums
fbb6eb23e32fc5bd9f66995ded7c40a97af25054c73207e7a1340c313d990612
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.10

Release files / logforge_gitlog-0.1.1-py3-none-any.whl

Download URL logforge_gitlog-0.1.1-py3-none-any.whl
Size 5.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
628feefd46b551c92201b68835e206e9a6645ff651c8aebf38337f97c7e841cd
BLAKE2b-256 checksum
How to use checksums
88c3bd2b099be52ccdbcf2f1fd46c3ee1d59ef03ee312d6151f893521908c865
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.10

Release history Release notifications | RSS feed

This release

0.1.1 This release

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page