{"id":38219591,"url":"https://github.com/lazy-release/changesets","last_synced_at":"2026-03-04T09:01:40.496Z","repository":{"id":332899957,"uuid":"979742669","full_name":"lazy-release/changesets","owner":"lazy-release","description":"A tool that automates versioning, publishing and creating changelogs for monorepos.","archived":false,"fork":false,"pushed_at":"2026-02-03T05:11:25.000Z","size":169,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-02-03T16:33:10.014Z","etag":null,"topics":["changeset","changesets","conventional-commits","semver"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/lazy-release.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","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":"AGENTS.md","dco":null,"cla":null}},"created_at":"2025-05-08T02:09:57.000Z","updated_at":"2026-02-03T05:11:27.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/lazy-release/changesets","commit_stats":null,"previous_names":["lazy-release/changesets"],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/lazy-release/changesets","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lazy-release%2Fchangesets","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lazy-release%2Fchangesets/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lazy-release%2Fchangesets/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lazy-release%2Fchangesets/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lazy-release","download_url":"https://codeload.github.com/lazy-release/changesets/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lazy-release%2Fchangesets/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30076935,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-04T08:01:56.766Z","status":"ssl_error","status_checked_at":"2026-03-04T08:00:42.919Z","response_time":59,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["changeset","changesets","conventional-commits","semver"],"created_at":"2026-01-17T00:51:43.048Z","updated_at":"2026-03-04T09:01:40.490Z","avatar_url":"https://github.com/lazy-release.png","language":"TypeScript","readme":"# Lazy Changesets CLI\n\n[![contributions welcome](https://img.shields.io/badge/contributions-welcome-brightgreen.svg?style=flat)](https://github.com/cadamsdev/lazy-changesets/issues) [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE) ![GitHub Tag](https://img.shields.io/github/v/tag/cadamsdev/lazy-changesets)\n\nA lightweight, convention-driven changeset management tool that automates semantic versioning based on conventional commit types. Designed for monorepo workflows with support for publishing to npm and creating GitHub releases.\n\n## ❤️ Sponsors\n\nSupport development by becoming a sponsor! Your avatar or company logo will appear below.\n\n[Become a Sponsor](https://github.com/sponsors/cadamsdev)\n\n\u003c!-- Sponsors will appear here --\u003e\n\n## 📥 Installation\n\nInstall globally using your preferred package manager:\n\n```bash\nnpm install -g @lazy-release/changesets\n```\n\n## 🚀 Quick Start\n\n### 1. Initialize\n\nSet up changesets in your project:\n\n```bash\nchangeset init\n```\n\nThis creates a `.changeset` directory with:\n- `config.json` - Configuration for changesets\n- `README.md` - Documentation for your team\n\n### 2. Create Changesets\n\nWhen making changes, create a changeset to document them:\n\n```bash\nchangeset\n```\n\nYou'll be prompted to:\n1. Select affected packages (in monorepos)\n2. Choose a change type (feat, fix, chore, etc.)\n3. Indicate if it's a breaking change\n4. Provide a description of the changes\n\n#### Options\n\n- `--empty` - Create an empty changeset file\n- `--all` - Pre-select all packages in the prompt\n\n### 3. Check Status\n\nView pending changesets:\n\n```bash\nchangeset status\n```\n\nThis displays all changesets with their types, affected packages, and messages.\n\n### 4. Bump Versions\n\nUpdate package versions based on changesets:\n\n```bash\nchangeset version\n```\n\nThis will:\n- Calculate version bumps based on changeset types\n- Update `package.json` files\n- Generate or update `CHANGELOG.md` files\n- Delete consumed changeset files\n\n#### Options\n\n- `--dry-run` - Preview changes without modifying files\n- `--install` - Run package manager install after version bump\n\n### 5. Publish\n\nPublish packages and create releases:\n\n```bash\nchangeset publish\n```\n\nThis will:\n- Publish updated packages to npm\n- Create GitHub releases with changelog notes\n- Tag releases in git\n\n#### Options\n\n- `--dry-run` - Preview what would be published\n- `--github-token \u003ctoken\u003e` - GitHub token for releases (defaults to `GITHUB_TOKEN` env var)\n- `--draft` - Create GitHub releases as drafts\n\n### 6. Snapshot Releases (Testing)\n\nCreate temporary snapshot releases for testing unpublished changes:\n\n```bash\nchangeset snapshot\n```\n\nThis will:\n- Generate a unique version: `0.0.0-\u003ctimestamp\u003e` (e.g., `0.0.0-1705242645`)\n- Update all affected packages and their dependents\n- Update internal dependencies to use exact snapshot versions\n- Publish to npm with `snapshot` tag (not `latest`)\n- Restore package.json files to original state\n- Skip git tags and GitHub releases\n\n**Snapshot releases are temporary and don't modify your version history.**\n\n#### Options\n\n- `--dry-run` - Preview what would be published without actually publishing\n\n#### Installing Snapshots\n\nInstall snapshot releases in other projects:\n\n```bash\nnpm install my-package@snapshot\n```\n\n#### Use Cases\n\n- **Test changes before releasing**: Validate your changes in a real environment\n- **Share work in progress**: Let others test your changes without a formal release\n- **CI/CD testing**: Test integration with dependent projects in CI pipelines\n\n#### Example Workflow\n\n```bash\n# 1. Make changes and create changesets\ngit checkout -b feature/new-api\n# ... make code changes ...\nchangeset\n# Select packages, type: feat, message: \"Add new API method\"\n\n# 2. Publish snapshot for testing\nchangeset snapshot\n# Output: Published my-package@0.0.0-1705242645 with 'snapshot' tag\n\n# 3. Test in another project\ncd ../my-app\nnpm install my-package@snapshot\n\n# 4. Once testing is complete, create proper release\ncd ../my-package\nchangeset version\nchangeset publish\n```\n\n## 📋 Configuration\n\nEdit `.changeset/config.json` to customize behavior:\n\n```json\n{\n  \"access\": \"restricted\",\n  \"baseBranch\": \"main\",\n  \"updateInternalDependencies\": \"patch\",\n  \"ignore\": [],\n  \"lazyChangesets\": {\n    \"types\": [\n      {\n        \"type\": \"feat\",\n        \"displayName\": \"New Features\",\n        \"emoji\": \"🚀\",\n        \"releaseType\": \"minor\",\n        \"promptBreakingChange\": true\n      }\n    ]\n  }\n}\n```\n\n### Config Options\n\n- `access` - npm package access level (`restricted` or `public`)\n- `baseBranch` - Base branch for the repository (default: `main`)\n- `updateInternalDependencies` - How to bump internal dependencies (`patch`, `minor`, `major`, or `none`)\n- `ignore` - Array of package names to exclude from changesets\n- `lazyChangesets.types` - Array of custom changeset types (order determines changelog sorting)\n\n### Customizing Changeset Types\n\nYou can customize the types available in changesets and their behavior. If not specified, the tool uses the default conventional commit types.\n\nEach type in the array can be configured with:\n- `type` - The type identifier used in changeset files (e.g., `feat`, `fix`, `custom`)\n- `displayName` - Human-readable name shown in prompts and changelogs\n- `emoji` - Emoji displayed in changelogs\n- `releaseType` - Version bump type: `major`, `minor`, or `patch` (optional, defaults to `patch`)\n- `promptBreakingChange` - Whether to prompt for breaking changes (optional)\n\n**The order of types in the array determines their order in the changelog.** Types appear in the same order you define them.\n\n#### Example: Custom Type Configuration\n\n```json\n{\n  \"lazyChangesets\": {\n    \"types\": [\n      {\n        \"type\": \"feature\",\n        \"displayName\": \"New Features\",\n        \"emoji\": \"✨\",\n        \"releaseType\": \"minor\",\n        \"promptBreakingChange\": true\n      },\n      {\n        \"type\": \"bugfix\",\n        \"displayName\": \"Bug Fixes\",\n        \"emoji\": \"🐛\",\n        \"releaseType\": \"patch\"\n      },\n      {\n        \"type\": \"hotfix\",\n        \"displayName\": \"Hot Fixes\",\n        \"emoji\": \"🚑\",\n        \"releaseType\": \"patch\"\n      }\n    ]\n  }\n}\n```\n\nWith this configuration:\n- `feature` type will trigger a minor version bump and appear first in changelogs\n- `bugfix` type will trigger a patch version bump and appear second\n- `hotfix` type will trigger a patch version bump and appear third\n- Breaking changes (using `!` suffix) always trigger major version bumps regardless of type\n\n## 🔄 Version Bump Logic\n\nVersion bumps are automatically determined by changeset type configuration. By default:\n\n| Type | Default Bump | With `!` suffix | Examples |\n|------|-------------|-----------------|----------|\n| `feat` | minor | major | `feat`, `feat!` |\n| `fix` | patch | major | `fix`, `fix!` |\n| `perf` | patch | major | `perf`, `perf!` |\n| `refactor` | patch | major | `refactor`, `refactor!` |\n| `build` | patch | major | `build`, `build!` |\n| `revert` | patch | major | `revert`, `revert!` |\n| Other types | patch | N/A | `chore`, `docs`, `style`, `test`, `ci` |\n\n### Customizing Version Bumps\n\nYou can customize the version bump behavior by specifying `releaseType` in your type configuration:\n\n```json\n{\n  \"lazyChangesets\": {\n    \"types\": [\n      {\n        \"type\": \"enhancement\",\n        \"displayName\": \"Enhancements\",\n        \"emoji\": \"⚡\",\n        \"releaseType\": \"minor\"\n      }\n    ]\n  }\n}\n```\n\nIf `releaseType` is not specified for a type, it defaults to `patch`.\n\n### Special Cases\n\n- Adding `!` suffix triggers a breaking change (major bump)\n- Pre-1.0 packages (v0.x.x) can be explicitly bumped to v1.0.0 via prompt\n- Use `@major` suffix in changeset frontmatter for explicit major bumps\n\n## 📦 Monorepo Support\n\nLazy Changesets works seamlessly with monorepos:\n\n- Automatically discovers packages via `package.json` files\n- Multi-select interface for choosing affected packages\n- Handles internal dependency updates\n- Generates per-package changelogs\n\n## 🆚 Difference from Changesets\n\nThis tool was inspired by [changesets/changesets](https://github.com/changesets/changesets) but with key differences:\n\n| Feature | Lazy Changesets | Changesets |\n|---------|----------------|------------|\n| Version bump selection | Automatic via conventional commit types | Manual selection required |\n| Changeset types | Configurable conventional commit types | Generic change descriptions |\n| Breaking changes | `!` suffix or prompt | Manual major version selection |\n| Setup complexity | Minimal configuration | More configuration options |\n| Learning curve | Familiar to conventional commit users | Unique workflow |\n\nThis approach makes the workflow more streamlined for teams already familiar with conventional commits while maintaining flexibility through configuration.\n\n## 📝 Examples\n\n### Creating a Feature Changeset\n\n```bash\n$ changeset\n? Which packages would you like to include? @my-org/package-a\n? Select changelog type feat (New Features)\n? Is this a breaking change? No\n? Enter a message for the changeset Added user authentication\n```\n\n### Dry Run Version Bump\n\n```bash\n$ changeset version --dry-run\n```\n\nPreview version changes without modifying files.\n\n### Publishing with Draft Releases\n\n```bash\n$ changeset publish --draft --github-token $GITHUB_TOKEN\n```\n\nPublish to npm and create draft GitHub releases for review before making them public.\n\n## 🤝 Contributing\n\nContributions are welcome! Please check the [issues](https://github.com/cadamsdev/lazy-changesets/issues) page for ways to help.\n\n## 📄 License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n","funding_links":["https://github.com/sponsors/cadamsdev"],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flazy-release%2Fchangesets","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flazy-release%2Fchangesets","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flazy-release%2Fchangesets/lists"}