{"id":51119030,"url":"https://github.com/sulthonzh/convlog","last_synced_at":"2026-06-25T00:30:39.050Z","repository":{"id":365118556,"uuid":"1268041479","full_name":"sulthonzh/convlog","owner":"sulthonzh","description":"Generate CHANGELOGs from conventional git commits. Zero dependencies.","archived":false,"fork":false,"pushed_at":"2026-06-15T23:23:28.000Z","size":8,"stargazers_count":0,"open_issues_count":1,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-16T01:20:26.191Z","etag":null,"topics":["changelog","changelog-generator","conventional-commits","git"],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sulthonzh.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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-06-13T04:49:19.000Z","updated_at":"2026-06-15T23:22:22.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/sulthonzh/convlog","commit_stats":null,"previous_names":["sulthonzh/convlog"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/sulthonzh/convlog","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sulthonzh%2Fconvlog","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sulthonzh%2Fconvlog/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sulthonzh%2Fconvlog/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sulthonzh%2Fconvlog/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sulthonzh","download_url":"https://codeload.github.com/sulthonzh/convlog/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sulthonzh%2Fconvlog/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34755061,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-24T02:00:07.484Z","response_time":106,"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":["changelog","changelog-generator","conventional-commits","git"],"created_at":"2026-06-25T00:30:38.910Z","updated_at":"2026-06-25T00:30:39.039Z","avatar_url":"https://github.com/sulthonzh.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# convlog\n\nGenerate CHANGELOGs from [conventional commits](https://www.conventionalcommits.org/). Zero dependencies.\n\nYou write commits like `feat(auth): add OAuth2 login` and `fix: crash on empty input`. convlog turns those into a clean, versioned changelog. No config files, no plugins, no nonsense.\n\n## Why\n\nEvery changelog generator out there wants your life story in a config file. convlog reads your git log, parses conventional commits, and spits out a changelog. That's it.\n\nWorks for solo projects and teams. Handles breaking changes, scopes, semver bumping — all from your commit messages.\n\n## Install\n\n```bash\nnpm install -g convlog\n```\n\n## Usage\n\n### CLI\n\n```bash\n# Generate changelog from latest tag to HEAD\nconvlog\n\n# From a specific tag\nconvlog --from v1.2.0\n\n# Between two refs\nconvlog --from v1.0.0 --to v1.1.0\n\n# Group by scope\nconvlog --scope\n\n# Show stats\nconvlog --stats\n\n# Output as JSON\nconvlog --json\n\n# Filter by file path\nconvlog --path src/auth\n```\n\n### Programmatic\n\n```js\nconst { generate, parseCommit, stats } = require('convlog');\n\n// Parse a single commit message\nconst parsed = parseCommit('feat(api)!: new response format');\n// { type: 'feat', scope: 'api', breaking: true, description: 'new response format' }\n\n// Generate full changelog\nconst changelog = generate({ cwd: './my-project' });\n\n// Get commit stats\nconst commits = getCommits({ from: 'v1.0.0' });\nconst s = stats(commits);\n// { total: 42, byType: { feat: 15, fix: 20, ... }, breaking: 3, scopes: ['api', 'ui'] }\n```\n\n## What it detects\n\n- **Commit types**: feat, fix, perf, refactor, docs, test, build, ci, chore, style, revert\n- **Scopes**: `feat(auth):` → groups under **auth**\n- **Breaking changes**: `feat!:` or `BREAKING CHANGE:` in body → marked with **BREAKING**\n- **Semver bumping**: fix → patch, feat → minor, breaking → major\n\n## Output format\n\n```markdown\n# Changelog\n\n## 1.2.0 (2026-06-13)\n\n### Features\n\n- **api:** add rate limiting (a1b2c3d)\n- add search endpoint (e4f5g6h)\n\n### Bug Fixes\n\n- **auth:** fix token expiry (i7j8k9l)\n\n### BREAKING\n\nChanges marked with **BREAKING** are highlighted.\n```\n\n## Options\n\n| Flag | Description |\n|------|-------------|\n| `-f, --from \u003ctag\u003e` | Start from tag (default: latest) |\n| `-t, --to \u003cref\u003e` | End at ref (default: HEAD) |\n| `-p, --path \u003cpath\u003e` | Filter by file path |\n| `-s, --scope` | Group commits by scope |\n| `--stats` | Show commit statistics |\n| `--hidden` | Include non-standard commit types |\n| `--json` | Output as JSON |\n| `--no-header` | Omit changelog header |\n| `-h, --help` | Show help |\n\n## API\n\n### `parseCommit(message)` → `object | null`\n\nParse a conventional commit message. Returns `{ type, scope, description, breaking, body }` or `null`.\n\n### `getCommits(options)` → `array`\n\nGet parsed commits from git log. Options: `{ from, to, cwd, path }`.\n\n### `generateChangelog(commits, options)` → `string`\n\nGenerate markdown changelog section for given commits.\n\n### `generate(options)` → `string`\n\nGenerate a full changelog including recent version tags.\n\n### `stats(commits)` → `object`\n\nGet statistics about commits: counts by type, breaking changes, scopes.\n\n### `guessNextVersion(tags, commits)` → `string`\n\nGuess the next semver version based on tags and commit types.\n\n## Zero dependencies\n\nconvlog runs on Node.js built-ins. No external packages, no supply chain risk, no bloated `node_modules`.\n\n## License\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsulthonzh%2Fconvlog","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsulthonzh%2Fconvlog","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsulthonzh%2Fconvlog/lists"}