An open API service indexing awesome lists of open source software.

https://github.com/sangaibisi/changeweave

AI-native changelog generator β€” analyzes actual code diffs (not just commit messages) to produce intelligent release notes. Spring Boot + Next.js + MCP server. Supports GitHub, GitLab, Bitbucket.
https://github.com/sangaibisi/changeweave

ai bitbucket changelog developer-tools github gitlab mcp model-context-protocol nextjs openai release-notes self-hosted spring-boot typescript

Last synced: about 1 month ago
JSON representation

AI-native changelog generator β€” analyzes actual code diffs (not just commit messages) to produce intelligent release notes. Spring Boot + Next.js + MCP server. Supports GitHub, GitLab, Bitbucket.

Awesome Lists containing this project

README

          

# 🧡 ChangeWeave

### **AI-native changelog generator that reads your code β€” not just your commit messages.**

*Stop copy-pasting git logs. Ship release notes your users actually understand.*

[![License: MIT](https://img.shields.io/badge/License-MIT-A3E635?style=flat-square)](./LICENSE)
[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-A3E635?style=flat-square)](https://github.com/Sangaibisi/changeweave/pulls)
![Java](https://img.shields.io/badge/Java-17-F89820?style=flat-square&logo=openjdk&logoColor=white)
![Spring Boot](https://img.shields.io/badge/Spring_Boot-3-6DB33F?style=flat-square&logo=springboot&logoColor=white)
![Next.js](https://img.shields.io/badge/Next.js-14-000000?style=flat-square&logo=nextdotjs&logoColor=white)
![TypeScript](https://img.shields.io/badge/TypeScript-5-3178C6?style=flat-square&logo=typescript&logoColor=white)
![Docker](https://img.shields.io/badge/Docker-ready-2496ED?style=flat-square&logo=docker&logoColor=white)
![Postgres](https://img.shields.io/badge/PostgreSQL-16-4169E1?style=flat-square&logo=postgresql&logoColor=white)
![MCP](https://img.shields.io/badge/MCP-server-8B5CF6?style=flat-square)

---

## 🎯 The Problem

> *"feat: stuff"*, *"fix: bug"*, *"wip"*, *"asdf"* β€” every changelog author's nightmare.

Traditional changelog tools scrape commit messages and hope for the best. They miss breaking changes hiding inside refactors, get confused by squashed PRs, and produce release notes that read like `git log | grep -v chore`.

**ChangeWeave opens the diffs.** It reads what actually changed, groups related edits, filters noise, detects breaking changes, and writes release notes that a product manager β€” not just a committer β€” would be proud to ship.

## ✨ Features

- πŸ”¬ **Diff-aware analysis** β€” categorizes changes and scores impact from real code, not commit message guesswork
- 🎚️ **Tiered context engine** β€” smart token budgeting across 3 tiers (summary β†’ diffs β†’ full files) so you only pay for depth where it matters
- πŸ’₯ **Breaking change detection** β€” flags removed exports, changed signatures, altered routes, schema migrations
- 🧹 **Noise filtering & PR grouping** β€” merges chatty commits, collapses revert chains, groups related edits into logical units
- 🌍 **Multi-provider** β€” GitHub Β· GitLab Β· Bitbucket Cloud Β· Bitbucket Data Center (self-hosted)
- πŸ—ΊοΈ **15 languages** β€” generate changelogs in any of 15 languages with one click
- 🎨 **Tone & audience tuning** β€” technical, marketing, casual β€” pick per release
- πŸ“Š **Public changelog pages** β€” shareable URLs with view analytics and referrers
- πŸ€– **MCP server built-in** β€” drive it from Claude Desktop, Cursor, or Windsurf via the Model Context Protocol
- πŸ”’ **Privacy-first** β€” fully self-hostable, tokens encrypted at rest, SSRF-guarded outbound calls
- πŸ†“ **MIT licensed** β€” no usage limits, no telemetry, no vendor lock-in

## πŸ—οΈ Architecture

```
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ β”‚
β–Ό β”‚
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”
β”‚ 🌐 Browser │──── UI ──▢│ 🎨 Next.js │─── API ─▢│ β˜• Spring β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ Frontend β”‚ β”‚ Boot API β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”¬β”€β”€β”¬β”€β”€β”¬β”€β”€β”€β”˜
β”‚ β”‚ β”‚
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ └────────┐
β–Ό β–Ό β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ 🧠 MCP Serverβ”‚ β”‚ 🐘 Postgres β”‚ β”‚πŸ”΄ Redisβ”‚
β”‚ (Node/TS) β”‚ β”‚ + Flyway β”‚ β”‚ cache β”‚
β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”˜
β”‚
β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ πŸ™ GitHub Β· 🦊 GitLab Β· πŸͺ£ Bitbucket β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
```

### How a release note is born 🐣

1. **πŸ“₯ Trigger** β€” webhook fires on `git push`, or you hit *Generate* manually in the dashboard.
2. **πŸ“‘ Fetch** β€” backend pulls commits + diffs via the provider API (GitHub / GitLab / Bitbucket).
3. **πŸ§ͺ Analyze** β€” MCP server runs the pipeline:
- `noise-filter` drops boilerplate commits
- `revert-detector` collapses `A β†’ B β†’ revert(A+B)` chains
- `pr-grouper` merges related commits into logical changes
- `commit-clusterer` finds semantic clusters
- `impact-scorer` tags HIGH / MEDIUM / LOW impact
- `breaking-detector` sniffs out API breaks
- `module-mapper` groups files into features
4. **πŸ’¬ Generate** β€” `AITransformationService` turns the structured analysis into prose (OpenAI by default, rule-based fallback when no key is set).
5. **πŸš€ Publish** β€” you review, edit, and ship to a public changelog page with a shareable URL.

### Tech stack

| Layer | What's inside |
|-------|--------------|
| **Backend** β˜• | Java 17 Β· Spring Boot 3 Β· Spring Security Β· JPA Β· Flyway migrations |
| **Frontend** 🎨 | Next.js 14 (App Router) · React · TailwindCSS · Zustand · React Query |
| **MCP Server** 🧠 | Node.js 18+ · TypeScript · `@modelcontextprotocol/sdk` · Octokit |
| **Storage** πŸ—„οΈ | PostgreSQL 16 Β· Redis 7 |
| **AI** πŸ€– | OpenAI (`gpt-4o-mini` default) β€” any OpenAI-compatible endpoint works |
| **Ops** 🐳 | Docker · Docker Compose (dev + prod profiles) |

## πŸš€ Quick Start (Docker)

**Prerequisites:** [Docker Desktop](https://www.docker.com/products/docker-desktop/) and git.

```bash
git clone https://github.com/Sangaibisi/changeweave.git
cd changeweave
cp .env.example .env # πŸ’‘ optional β€” defaults boot the app as-is
docker compose up --build -d
```

Everything comes up locally β€” no cloud account required:

| 🧩 Service | πŸ”— URL |
|-----------|--------|
| Frontend | [http://localhost:3000](http://localhost:3000) |
| Backend API | [http://localhost:8080/api](http://localhost:8080/api) |
| MCP Server | [http://localhost:3100/mcp](http://localhost:3100/mcp) |
| PostgreSQL | `localhost:5432` |
| Redis | `localhost:6379` |

Register an account on the frontend and you're in. πŸŽ‰

> πŸ’‘ Without `OPENAI_API_KEY`, ChangeWeave falls back to rule-based changelog generation. Add a key whenever you want the AI polish.

See [SETUP.md](./SETUP.md) for rebuilds, logs, resets and more.

## βš™οΈ Configuration

All config is env-driven. The [`.env.example`](./.env.example) ships **dev-safe defaults** β€” the app boots unchanged. Set these when you want the real thing:

| Variable | What it unlocks |
|----------|----------------|
| πŸ€– `OPENAI_API_KEY` | AI-generated changelog prose |
| πŸ™ `GITHUB_CLIENT_ID` / `GITHUB_CLIENT_SECRET` | GitHub OAuth login + repo connect ([create app](https://github.com/settings/developers)) |
| πŸͺ `GITHUB_WEBHOOK_SECRET` | Webhook signature verification |
| 🦊 `GITLAB_CLIENT_ID` / `GITLAB_CLIENT_SECRET` | GitLab OAuth ([create app](https://gitlab.com/-/user_settings/applications)) |
| πŸͺ£ `BITBUCKET_CLIENT_ID` / `BITBUCKET_CLIENT_SECRET` | Bitbucket Cloud OAuth |
| 🏒 `BITBUCKET_DC_URL` | Base URL for self-hosted Bitbucket Data Center (PAT auth) |
| πŸ” `JWT_SECRET` | **Production-required** β€” min 256-bit random string |
| πŸ“§ `MAIL_*` | SMTP credentials (SendGrid by default) for transactional email |

## πŸ’» Local Development (hybrid)

Run infra in Docker, backend/frontend on your host for fast reloads:

```bash
# β˜• Only the infra
docker compose up -d postgres redis

# Backend (terminal 1)
cd backend
mvn spring-boot:run

# Frontend (terminal 2)
cd frontend
npm install
npm run dev
```

## πŸ€– MCP Integration

ChangeWeave ships its own Model Context Protocol server so Claude, Cursor, Windsurf and friends can analyze commits and draft changelogs **from inside your editor**.

```json
{
"mcpServers": {
"changeweave": {
"command": "npx",
"args": ["changeweave-mcp"],
"env": { "GITHUB_TOKEN": "ghp_xxxxxxxxxxxx" }
}
}
}
```

Tools exposed: `analyze_commits`, `generate_changelog`, `get_commit_diff`, `compare_refs`, `detect_breaking_changes`, `list_changelogs`, `publish_changelog`.

Full docs β†’ [`mcp/README.md`](./mcp/README.md).

## 🌐 Production Deployment

`docker-compose.prod.yml` is the production profile:

- βœ… Requires a real `JWT_SECRET` (fails fast if missing)
- βœ… Requires `PUBLIC_URL` + `CORS_ORIGINS` to point at your domain
- βœ… Expects an external reverse-proxy network named `changeweave-proxy` (Traefik / Caddy / nginx-proxy β€” your call)

```bash
export PUBLIC_URL=https://changelog.your-domain.com
export CORS_ORIGINS=https://changelog.your-domain.com
export JWT_SECRET=$(openssl rand -base64 48)
export OPENAI_API_KEY=sk-...

docker network create changeweave-proxy
docker compose -f docker-compose.prod.yml up -d
```

Point your reverse proxy at the `frontend` (port 3000) and `backend` (port 8080) services and you're live. 🎈

## πŸ›‘οΈ Security

- πŸ”‘ JWT access tokens (15 min) + refresh tokens (7 days) with rotation
- 🚧 SSRF guard on all outbound HTTP calls
- πŸ” Provider tokens encrypted before being persisted
- πŸ•ΈοΈ Production compose isolates the app network from the public proxy network
- 🧡 No telemetry β€” the project phones nobody home

Found a security issue? Please [open an issue](https://github.com/Sangaibisi/changeweave/issues) β€” don't disclose publicly until there's a fix.

## πŸ“ Project Layout

```
changeweave/
β”œβ”€β”€ πŸ“‚ backend/ Spring Boot API
β”‚ └── src/main/java/com/changelogai/
β”‚ β”œβ”€β”€ controller/ REST endpoints
β”‚ β”œβ”€β”€ service/ Business logic
β”‚ β”‚ β”œβ”€β”€ provider/ GitHub / GitLab / Bitbucket adapters
β”‚ β”‚ └── AITransformationService.java
β”‚ β”œβ”€β”€ security/ JWT + SSRF guard
β”‚ └── entity/ JPA models
β”œβ”€β”€ πŸ“‚ frontend/ Next.js 14 app
β”‚ └── src/app/
β”‚ β”œβ”€β”€ (auth)/ login / register
β”‚ β”œβ”€β”€ dashboard/ authenticated UI
β”‚ └── changelog/[slug]/ public changelog pages
β”œβ”€β”€ πŸ“‚ mcp/ MCP server (Node/TS)
β”‚ └── src/
β”‚ β”œβ”€β”€ analysis/ breaking Β· revert Β· clusterer Β· impact
β”‚ β”œβ”€β”€ context/ 3-tier token budgeting
β”‚ β”œβ”€β”€ tools/ 7 MCP tools
β”‚ └── providers/ git provider integrations
β”œβ”€β”€ 🐳 docker-compose.yml dev stack
β”œβ”€β”€ 🐳 docker-compose.prod.yml prod stack
└── πŸ“„ SETUP.md docker cheatsheet
```

## 🀝 Contributing

PRs and issues are warmly welcome. πŸ’š

- No CLA required β€” contributions are released under the MIT License
- Keep changes focused; one concern per PR
- Run the stack locally before submitting (see *Local Development*)
- Follow existing code style β€” no separate style guide yet

First time contributing to OSS? [Open an issue](https://github.com/Sangaibisi/changeweave/issues/new) and say hi β€” we'll point you at something friendly.

## πŸ“œ License

[MIT](./LICENSE) Β© Sangaibisi β€” free to use, modify, and ship. Go build cool stuff.

---

**⭐ If ChangeWeave saves you even one painful release day, please star the repo.**

Made with 🧡 and long nights.