{"id":46027065,"url":"https://github.com/plyght/uncommit","last_synced_at":"2026-03-01T03:09:06.855Z","repository":{"id":334825205,"uuid":"1142915066","full_name":"plyght/uncommit","owner":"plyght","description":"uncommit generates ai-powered release notes from your code diffs.","archived":false,"fork":false,"pushed_at":"2026-02-16T23:05:42.000Z","size":410,"stargazers_count":3,"open_issues_count":0,"forks_count":1,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-02-17T05:35:27.583Z","etag":null,"topics":["ai","anthropic","diff","openai","release-notes","releases"],"latest_commit_sha":null,"homepage":"https://uncommit.sh","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/plyght.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-01-27T01:47:35.000Z","updated_at":"2026-02-16T23:05:45.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/plyght/uncommit","commit_stats":null,"previous_names":["plyght/uncommit"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/plyght/uncommit","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/plyght%2Funcommit","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/plyght%2Funcommit/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/plyght%2Funcommit/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/plyght%2Funcommit/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/plyght","download_url":"https://codeload.github.com/plyght/uncommit/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/plyght%2Funcommit/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29959284,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-01T01:47:18.291Z","status":"online","status_checked_at":"2026-03-01T02:00:07.437Z","response_time":124,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai","anthropic","diff","openai","release-notes","releases"],"created_at":"2026-03-01T03:09:04.798Z","updated_at":"2026-03-01T03:09:06.844Z","avatar_url":"https://github.com/plyght.png","language":"TypeScript","readme":"# Uncommit\n\nAutomated AI-generated release notes from your code. Uncommit installs a GitHub Actions workflow that detects version bumps and creates intelligent release notes by analyzing your diffs.\n\n## Overview\n\nUncommit eliminates the tedium of writing release notes. When you bump your version and push to the default branch, the GitHub App webhook starts a Vercel Workflow to detect version changes, analyze diffs, and generate concise, user-facing changelog entries.\n\n## Features\n\n- **Automatic Version Detection**: Supports multiple languages and package managers (Node.js, Rust, Python, Swift, and generic version files)\n- **Multi-Language Repository Support**: Detects version files across different ecosystems in monorepos\n- **Intelligent Diff Analysis**: Analyzes code changes across 14+ file types to generate meaningful notes\n- **Multi-Provider Support**: Works with OpenAI or Anthropic APIs\n- **GitHub App Monitoring**: Webhook-driven detection of version bumps\n- **Durable Workflows**: Uses Vercel Workflow for long-running AI generation\n\n## Installation\n\n```bash\ngit clone https://github.com/plyght/uncommit.git\ncd uncommit\nbun install\n\n# Set up Convex backend\nbunx convex dev\n```\n\nCreate a `.env.local` file with your Convex deployment URL and GitHub OAuth credentials.\n\n## Environment Variables\n\nRequired:\n- `CONVEX_URL`: Convex deployment URL for server-side queries\n- `NEXT_PUBLIC_CONVEX_URL`: Convex deployment URL for client-side queries\n- `GITHUB_APP_ID`: GitHub App ID\n- `GITHUB_APP_PRIVATE_KEY`: GitHub App private key (escaped newlines as `\\\\n`)\n- `GITHUB_WEBHOOK_SECRET`: GitHub App webhook secret\n- `NEXT_PUBLIC_GITHUB_APP_INSTALL_URL`: Link to install the GitHub App\n- `OPENAI_API_KEY`: OpenAI API key used by workflows\n- `NEXT_PUBLIC_APP_URL`: Base URL for dashboard links (e.g., `\u003chttps://app.uncommit.com\u003e`)\n- `NEXT_PUBLIC_APP_DOMAIN`: Primary app domain (used to detect custom domain requests)\n\n## Usage\n\n1. Navigate to the web interface and authenticate with GitHub\n2. Select a repository and save setup preferences\n3. Install the GitHub App\n\nThe webhook activates on pushes to the default branch when version files change. Version bump detection triggers the release flow automatically.\n\n## How It Works\n\n```\nVersion Bump → Push to Default Branch → Workflow Triggered\n                                    ↓\n                            Detect Version Change\n                                    ↓\n                            Generate Diff (since last tag)\n                                    ↓\n                            Send to AI Provider\n                                    ↓\n                            Create Tag + Release\n```\n\nThe generated workflow:\n- Compares current version against previous commit\n- Fetches code diff since last tag (or initial commit)\n- Sends diff to AI with structured prompts for release note generation\n- Creates a git tag and GitHub release with the generated notes\n\n## Architecture\n\n- `app/page.tsx`: Single-page app with GitHub OAuth, repository selection, and workflow installation\n- `components/Select.tsx`: Repository dropdown using Base UI\n- `convex/auth.ts`: GitHub OAuth configuration with repo/workflow scopes\n- `convex/github.ts`: GitHub API interactions (repos, secrets, workflow files)\n- `convex/install.ts`: Workflow templates and installation logic\n- `convex/encryption.ts`: NaCl-based secret encryption for GitHub Actions secrets\n\n## Configuration\n\nThe installed workflow monitors these version files (priority order):\n- `package.json` (Node.js)\n- `Cargo.toml` (Rust)\n- `pyproject.toml` (Python)\n- `Version.swift` / `version.swift` (Swift/iOS)\n- `version.txt` / `VERSION` (Generic)\n- `uncommit.json` (Uncommit-specific)\n\nFor multi-language repositories, the first detected version file wins. Swift version files should contain declarations like `let version = \"1.0.0\"` or `public static let version = \"1.0.0\"`.\n\nAI prompts are configured to produce:\n- No emojis\n- No title (GitHub displays it)\n- Markdown headers: Features, Fixes, Improvements, Breaking Changes\n- User-facing changes only\n\n## Development\n\n```bash\n# Start Next.js dev server\nbun run dev\n\n# Start Convex backend\nbun run convex:dev\n```\n\nRequires Bun runtime. Key dependencies: Next.js 14, Convex, @convex-dev/auth, @base-ui/react, tweetnacl.\n\n## Pricing \u0026 Configuration\n\nUncommit offers two modes:\n\n### 1. Self-Hosted (Free - BYOK)\n- Bring your own OpenAI or Anthropic API key\n- Use the workflows in `.github/workflows/aia.yml` (Anthropic) or `aio.yml` (OpenAI)\n- No rate limits beyond your own API quota\n- Full control and transparency\n\n### 2. Managed Hosting (Paid)\n- We provide the API keys\n- Rate-limited by tier (Ko-fi subscription tiers)\n- Includes custom domain support\n- Uses `.github/workflows/managed.yml`\n\n**Pricing Tiers** (Ko-fi):\n- **Basic** ($15/mo): 5 releases/month\n- **Pro** ($30/mo): 15 releases/month\n- **Business** ($60/mo): 50 releases/month\n\nAll managed plans include custom domain support. Contact for enterprise/higher limits.\n\n## Admin Operations\n\nAs an open source project, Uncommit includes admin functions for granting user access. These are **internal mutations** that can only be called via the Convex dashboard or CLI.\n\n### Granting User Access\n\n```bash\n# Via Convex CLI\nbunx convex run users:grantUserAccess --email \"user@example.com\" --tier \"pro\" --daysUntilExpiry 365\n```\n\nAvailable tiers: `free`, `supporter`, `pro`, `premium`\n\n**Security Note**: Since this is open source, ensure your Convex deployment credentials are kept private. Only repository owners with Convex admin access can call internal mutations. Never expose these functions as public APIs.\n\n### Self-Hosted Workflow Setup\n\nFor self-hosted (BYOK) setup:\n1. Copy `.github/workflows/aia.yml` or `aio.yml` to your repo\n2. Add `ANTHROPIC_API_KEY` or `OPENAI_API_KEY` to repository secrets\n3. Bump version and push to main branch\n\n### Managed API Setup\n\nFor managed hosting:\n1. Subscribe via Ko-fi with desired tier\n2. Link your Ko-fi email in dashboard\n3. Copy `.github/workflows/managed.yml` to your repo\n4. Add `UNCOMMIT_WEBHOOK_SECRET` from your dashboard to repository secrets\n5. Optionally add `UNCOMMIT_API_URL` if self-hosting the platform\n\n## License\n\n[Elastic License 2.0](./LICENSE) — Source available. Free to use, modify, and learn from. Cannot be offered as a competing hosted service.\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fplyght%2Funcommit","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fplyght%2Funcommit","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fplyght%2Funcommit/lists"}