{"id":13847206,"url":"https://github.com/eemeli/ibid","last_synced_at":"2025-06-11T13:12:43.586Z","repository":{"id":57117301,"uuid":"357332452","full_name":"eemeli/ibid","owner":"eemeli","description":"Tools to automate your releases and changelogs, esp. for monorepos","archived":false,"fork":false,"pushed_at":"2021-10-25T07:10:52.000Z","size":674,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-06-01T16:48:25.130Z","etag":null,"topics":["conventional-commits","monorepo","monorepo-utilities","release-automation"],"latest_commit_sha":null,"homepage":"https://www.npmjs.com/package/@ibid/core","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/eemeli.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}},"created_at":"2021-04-12T20:37:45.000Z","updated_at":"2022-06-14T23:10:56.000Z","dependencies_parsed_at":"2022-08-23T04:40:32.004Z","dependency_job_id":null,"html_url":"https://github.com/eemeli/ibid","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eemeli%2Fibid","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eemeli%2Fibid/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eemeli%2Fibid/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eemeli%2Fibid/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/eemeli","download_url":"https://codeload.github.com/eemeli/ibid/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eemeli%2Fibid/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":258859026,"owners_count":22769037,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["conventional-commits","monorepo","monorepo-utilities","release-automation"],"created_at":"2024-08-04T18:01:13.157Z","updated_at":"2025-06-11T13:12:43.562Z","avatar_url":"https://github.com/eemeli.png","language":"TypeScript","funding_links":[],"categories":["TypeScript"],"sub_categories":[],"readme":"# Ibid.\n\n_Once again, as before, but better._\n\nTools to automate your releases and changelogs.\nIbid is opinionated in its expectations of your repository layout,\nbut flexible in what it allows you to do with it.\n\nTogether with [npm workspaces](https://docs.npmjs.com/cli/v7/using-npm/workspaces),\nit offers a minimal but sufficient alternative to [Lerna](https://lerna.js.org/).\n\n```\nnpm install --save-dev @ibid/core\n```\n\n## Usage\n\nPrimarily Ibid provides a command-line interface with the following commands:\n\n- `ibid version` — Update the versions \u0026 changelogs of packages according to git history.\n- `ibid publish` — Publish packages, fixing dependencies before \u0026 after as appropriate.\n- `ibid depend` — Update dependency style between packages. Used internally by `ibid publish`.\n\nEach command requires an explicit list of directories or glob patterns to find the packages on which it'll be working.\nIf this is not provided on the command line,\nthe `\"workspaces\"` list of your `package.json` is checked,\nand for compatibility the `\"packages\"` of `lerna.json` (if present).\nYou may use `.` for the current directory:\n\n```sh\nnpx ibid version .\nnpx ibid publish foo bar\n```\n\nFor an up-to-date list of available command-line options, use:\n\n```sh\nnpx ibid --help\nnpx ibid version --help\nnpx ibid publish --help\n```\n\n### `ibid version`\n\nThis command works with the following assumptions:\n\n- Your project uses git for source code management.\n- Your commit messages follow the [Conventional Commits](https://www.conventionalcommits.org/) specification.\n- The `\"version\"` field of your `package.json` is set to the latest published version.\n  For a package's first version, use `--init` to include its whole history.\n- There is a git tag set for the latest version, by default\n  either `v{version}` if the package is at the root of the repo or\n  `{name}@{version}` if it's in a subdirectory.\n\nBesides the command-line options,\nadditional `ibid version` configuration may be included in a config file `ibid.config.{js,mjs,cjs}`,\nor one specified by the `--config` option.\nThis allows for in-depth customization of the changelog output in particular.\nSee [config.ts](https://github.com/eemeli/ibid/blob/main/src/config/config.ts) for all supported config values.\n\nWhen run, the command reads through your `git log`,\nfiltering commits for each project according to its latest release and the files touched by each commit.\nMerge commits and any others with messages which do not match the Conventional Commits spec are ignored.\nFrom these commits, the appropriate next version and its changelog are calculated.\nAn interactive prompt will allow for these version updates to be modified;\nuse `--yes` to skip this in automation.\n\nOn success, for each updated package\nits `CHANGELOG.md` is written or updated and\nits `package.json` as well as any lockfiles are updated.\nGit tags are set as required.\n\n### `ibid version --amend`\n\nIf all goes well, the output of `ibid version` is perfect just as it is.\nFor the cases when it isn't, there's `--amend`.\nThis is primarily intended for manually fixing the generated changelogs.\n\nAfter running `ibid version`,\nif any changes need to be included in the release,\napply those changes and `git add` them.\nThen run:\n\n```sh\nnpx ibid version --amend\n```\n\nThis will amend the preceding commit and force-update its git tags as needed.\nNote that the `--amend` option must not be used with any other options, including paths.\n\n### `ibid publish`\n\nThis command is only really useful if you're working in a monorepo,\nwith multiple packages included in the same repository.\nIn such a case, it often makes sense to use `\"file:../foo\"` paths for your `package.json` `\"dependencies\"` during development,\nas these ensure that internal dependencies work as intended.\n\nFor releases from such a repository, the `file:` links need to be fixed for publication.\nThis is what `ibid publish` does;\nit'll find all the local dependencies among your packages and fix them before running `npm publish`,\nand then fix them back to local/relative paths afterwards.\n\n### `ibid depend`\n\nGiven a set of packages,\nensures that their internal dependencies are all either `--local`, `--exact` or `--latest`.\n\nUseful if e.g. transitioning a monorepo to use relative dependencies,\nor to support a custom release pipeline.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feemeli%2Fibid","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Feemeli%2Fibid","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feemeli%2Fibid/lists"}