Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
94 commits
Select commit Hold shift + click to select a range
5bdd59d
Add a docs site for `changesets` (#1512)
akinoccc May 5, 2026
20b2d7f
Update docs
bluwy May 5, 2026
5bab571
Remove docsearch dependencies
bluwy May 5, 2026
b6644e0
Adjust colors
bluwy May 6, 2026
608502a
Move pages
bluwy May 6, 2026
4f8ae0b
Improve code blocks
bluwy May 6, 2026
ddb88d9
Add group icons
bluwy May 6, 2026
a7ba9c7
Add head tags
bluwy May 6, 2026
3ddd853
Merge branch 'next' into next-docs
bluwy May 6, 2026
b84d608
Fix lint error
bluwy May 6, 2026
13f43a8
Apply suggestions from code review
bluwy May 6, 2026
5e4f278
Merge branch 'next' into next-docs
bluwy May 7, 2026
c3941ac
Simplify main readme
bluwy May 7, 2026
1eeb225
Add Netlify stuff
bluwy May 7, 2026
e5f6155
Merge branch 'next' into next-docs
bluwy May 12, 2026
377d072
Update picomatch links
bluwy May 12, 2026
c420741
packageManager with h4sh
Andarist May 13, 2026
eaf15a5
update local node version
Andarist May 13, 2026
2690fa1
Merge branch 'next' into next-docs
bluwy May 18, 2026
1b9b483
Fix lint
bluwy May 18, 2026
1a410a1
Rewrite intro pages
bluwy May 19, 2026
17f7e5f
Fix site build
bluwy May 19, 2026
574bcb6
Tweak styles
bluwy May 20, 2026
1f311e1
Improve faq
bluwy May 20, 2026
5d7fa3b
Update automating-changesets
bluwy May 20, 2026
4a60bd8
Update acknowledgements
bluwy May 20, 2026
633bc9c
Update config page
bluwy May 20, 2026
f5b25e5
Merge branch 'next' into next-docs
bluwy May 20, 2026
addc941
Improve getting-started
bluwy May 21, 2026
f4b2e04
Sync code groups
bluwy May 21, 2026
2ff1c10
Update cli
bluwy May 21, 2026
a468727
Update CLI page
bluwy May 21, 2026
a46c323
Automate CLI page
bluwy May 22, 2026
88669d7
Rename origins to why
bluwy May 22, 2026
251684a
Rename technical decisions
bluwy May 22, 2026
c9ff5fc
Move experimental options to config page
bluwy May 22, 2026
ce6ac44
Add changeset file icon
bluwy May 22, 2026
c834f04
Update fixed and linked packages docs
bluwy May 22, 2026
6c4aa25
Flatten guide folder
bluwy May 22, 2026
7f1a95e
Re-order sections
bluwy May 22, 2026
c20e255
Update why
bluwy May 22, 2026
769711c
Update changelog format
bluwy May 22, 2026
b72285a
Add customize commit page
bluwy May 22, 2026
99a1c9a
Rewrite prereleases
bluwy May 22, 2026
d012404
Use generator for changelog and commit
bluwy May 22, 2026
710c58a
Separate versioning and publishing guide
bluwy May 22, 2026
4b8ba1a
Publish first time
bluwy May 22, 2026
e5c8352
Update snapshot releases
bluwy May 22, 2026
6f02863
Fix git tag
bluwy May 22, 2026
23c963c
Remove versioning-apps because it's clunky
bluwy May 22, 2026
c506e4e
Add backport guide
bluwy May 22, 2026
a23d539
Fix netlify build
bluwy May 22, 2026
0ffe9dd
Update og description
bluwy May 25, 2026
2576488
Update readme
bluwy May 26, 2026
f8454c4
Merge branch 'next' into next-docs
bluwy May 28, 2026
7bb9b9f
Update `snapshot.useCalculatedVersion` docs
bluwy May 28, 2026
5be66e9
Fix install
bluwy May 28, 2026
f8f703b
clarify and explain publishing new packages and their dist-tags
beeequeue May 28, 2026
8f95419
reorder package managers
beeequeue May 28, 2026
be875eb
add note regarding pnpm
beeequeue May 28, 2026
09b6ab9
try to clarify separate-branch prerelease flow
beeequeue May 28, 2026
b1fe368
clarify that `exit` should be run on the separate branch
beeequeue May 28, 2026
8f3c29a
Merge branch 'next' into next-docs
bluwy May 31, 2026
3c866e3
Merge branch 'next' into next-docs
bluwy Jun 9, 2026
a262524
Merge branch 'main' into next-docs
bluwy Jun 12, 2026
8a5700f
Fix lint
bluwy Jun 12, 2026
eca92a4
Add pm info and commit-short docs
bluwy Jun 12, 2026
28600eb
Merge branch 'main' into next-docs
bluwy Jun 23, 2026
b322da4
Merge branch 'main' into next-docs
bluwy Jun 30, 2026
dab5644
Update CLI page
bluwy Jun 30, 2026
fef8c9c
Document `publishConfig.directory`
bluwy Jun 30, 2026
1269884
Add simple section for deleting package
bluwy Jun 30, 2026
8f84326
Document nightly usecase and pkg.pr.new
bluwy Jun 30, 2026
238700d
Document accidental new package publish
bluwy Jun 30, 2026
9d22e48
Merge branch 'main' into next-docs
bluwy Jun 30, 2026
53ff1ca
Update git-tag docs
bluwy Jun 30, 2026
829b256
docs: make init command interactive (#2088)
trueberryless Jun 30, 2026
b34036d
Add packages pages
bluwy Jul 1, 2026
cb3df7f
docs: create page for GitHub generator package (#2127)
trueberryless Jul 1, 2026
398bee8
Add warnings for old docs pages
bluwy Jul 2, 2026
ffb9099
Update changelog github docs
bluwy Jul 2, 2026
7077b51
Add more popular-ish packages docs
bluwy Jul 2, 2026
24c19b3
Tweak wording
bluwy Jul 2, 2026
7526f48
Add basic migration page
bluwy Jul 2, 2026
bfffc50
docs: update and enhance comparison to other tools (#2126)
trueberryless Jul 3, 2026
13b0079
update pnpm
beeequeue Jul 9, 2026
d1d93ca
update vitepress
beeequeue Jul 9, 2026
e0eef87
add changes from #2150
beeequeue Jul 9, 2026
70e83ef
Add blog pages and og images (#2154)
bluwy Jul 10, 2026
d6fb955
Merge branch 'main' into next-docs
beeequeue Jul 19, 2026
6b6d3a2
remove unnecessary property
beeequeue Jul 20, 2026
72289ec
Add private packages docs
bluwy Jul 24, 2026
e09d6d5
Merge branch 'main' into next-docs
bluwy Jul 27, 2026
b730ff4
Update as beyond npm
bluwy Jul 27, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,4 @@ dist/
node_modules/
.env
*error.log
/site/.vitepress/cache/
2 changes: 1 addition & 1 deletion .node-version
Original file line number Diff line number Diff line change
@@ -1 +1 @@
v22.9.0
v24
99 changes: 4 additions & 95 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,102 +21,11 @@
<br/>

[![Open on npmx.dev](https://npmx.dev/api/registry/badge/version/@changesets/cli?name=true)](https://npmx.dev/package/@changesets/cli)
[![Open on npmx.dev](https://npmx.dev/api/registry/badge/version/@changesets/cli?color=229fe4&value=View+changelog&label=+)](./packages/cli/CHANGELOG.md)
[![View changelog](https://npmx.dev/api/registry/badge/version/@changesets/cli?color=229fe4&value=View+changelog&label=+)](./packages/cli/CHANGELOG.md)
[![pkg.pr.new](https://pkg.pr.new/badge/changesets/changesets)](https://pkg.pr.new/~/changesets/changesets)

The `changesets` workflow is designed to help when people are making changes, all the way through to publishing. It lets contributors declare how their changes should be released, then we automate updating package versions, and changelogs, and publishing new versions of packages based on the provided information.
Changesets is designed to help manage and describe changes, all the way through to publishing. It lets contributors declare how their changes should be released, and it'll handle updating package versions, changelogs, and publishing based on the provided changesets.

Changesets has a focus on solving these problems for multi-package repositories, and keeps packages that rely on each other within the multi-package repository up-to-date, as well as making it easy to make changes to groups of packages.
Changesets has a focus on solving these problems for monorepos, keeping packages that rely on each other up to date, as well as making it easy to make changes to groups of packages. Conceptually, the workflow is also beneficial for single package repos.

## How do we do that?

A `changeset` is an intent to release a set of packages at particular [semver bump types](https://semver.org/) with a summary of the changes made.

The **@changesets/cli** package allows you to write `changeset` files as you make changes, then combine any number of changesets into a release, that flattens the bump-types into a single release per package, handles internal dependencies in a multi-package-repository, and updates changelogs, as well as release all updated packages from a mono-repository with one command.

## How do I get started?

If you just want to jump in to using changesets, the [Intro to using changesets](./docs/intro-to-using-changesets.md) and [@changesets/cli](./packages/cli/README.md) docs are where you should head.

If you want a detailed explanation of the concepts behind changesets, or to understand how you would build on top
of changesets, check out our [detailed-explanation](./docs/detailed-explanation.md).

We also have a [dictionary](./docs/dictionary.md).

## Integrating with CI

While changesets can be an entirely manual process, we recommend integrating it with how your CI works.

To check that PRs contain a changeset, we recommend using [the changeset bot](https://github.com/apps/changeset-bot), or if you want to fail builds on a changesets failure, run `yarn changeset status` in CI.

To make releasing easier, you can use [this changesets github action](https://github.com/changesets/action) to automate creating versioning pull requests, and optionally publishing packages.

## Documentation

- [Intro to using changesets](./docs/intro-to-using-changesets.md)
- [Detailed explanation](./docs/detailed-explanation.md)
- [Common questions](./docs/common-questions.md)
- [Adding a changeset](./docs/adding-a-changeset.md)
- [Automating changesets](./docs/automating-changesets.md)
- [Checking for changesets](./docs/checking-for-changesets.md)
- [Command line options](./docs/command-line-options.md)
- [Config file options](./docs/config-file-options.md)
- [Decisions](./docs/decisions.md)
- [Dictionary](./docs/dictionary.md)
- [Fixed packages](./docs/fixed-packages.md)
- [Linked packages](./docs/linked-packages.md)
- [Modifying changelog format](./docs/modifying-changelog-format.md)
- [Prereleases](./docs/prereleases.md)
- [Problems publishing in monorepos](./docs/problems-publishing-in-monorepos.md)
- [Snapshot releases](./docs/snapshot-releases.md)
- [Versioning applications and other non-npm packages](./docs/versioning-apps.md)
- [Experimental Options](./docs/experimental-options.md)

## Cool Projects already using Changesets for versioning and changelogs

- [atlaskit](https://atlaskit.atlassian.com)
- [emotion](https://emotion.sh/docs/introduction)
- [keystone](https://keystonejs.com)
- [react-select](https://react-select.com/home)
- [XState](https://xstate.js.org)
- [pnpm](https://pnpm.io)
- [tinyhttp](https://github.com/talentlessguy/tinyhttp)
- [Firebase Javascript SDK](https://github.com/firebase/firebase-js-sdk)
- [Formik](https://github.com/jaredpalmer/formik)
- [MobX](https://github.com/mobxjs/mobx)
- [Nhost](https://github.com/nhost/nhost)
- [verdaccio](https://verdaccio.org)
- [Chakra UI](https://chakra-ui.com)
- [Astro](https://astro.build)
- [Biome](https://biomejs.dev)
- [SvelteKit](https://kit.svelte.dev)
- [Hydrogen](https://hydrogen.shopify.dev)
- [react-pdf](https://github.com/diegomura/react-pdf)
- [GraphQL Code Generator](https://github.com/dotansimha/graphql-code-generator)
- [GraphQL Yoga](https://github.com/dotansimha/graphql-yoga)
- [GraphQL-Mesh](https://github.com/Urigo/graphql-mesh)
- [GraphiQL](https://github.com/graphql/graphiql)
- [wagmi](https://github.com/wagmi-dev/wagmi)
- [refine](https://github.com/pankod/refine)
- [Modern Web](https://modern-web.dev)
- [Atomizer](https://github.com/acss-io/atomizer)
- [Medusa](https://github.com/medusajs/medusa)
- [OpenZeppelin Contracts](https://github.com/OpenZeppelin/openzeppelin-contracts)
- [Block Protocol](https://github.com/blockprotocol/blockprotocol)
- [Remix](https://remix.run/)
- [Clerk](https://github.com/clerk/javascript)
- [Hey API](https://github.com/hey-api/openapi-ts)
- [neverthrow](https://github.com/supermacro/neverthrow)
- [Apollo Client](https://github.com/apollographql/apollo-client)
- [Adobe Spectrum CSS](https://github.com/adobe/spectrum-css)
- [Adobe Spectrum Web Components](https://github.com/adobe/spectrum-web-components)
- [React Email](https://react.email)

<!-- NOTE: we currently only accept new entries with at least 1000 GitHub stars -->

# Thanks/Inspiration

- [bolt](https://github.com/boltpkg/bolt) - Brought us a strong concept of how packages in a mono-repo should be able to interconnect, and provided the initial infrastructure to get inter-package information.
- [Atlassian](https://www.atlassian.com/) - The original idea/sponsor of the changesets code, and where many of the ideas and processes were fermented. It was originally implemented by the team behind [atlaskit](https://atlaskit.atlassian.com).
- [lerna-semantic-release](https://github.com/atlassian/lerna-semantic-release) - put down many of the initial patterns around updating packages within a multi-package-repository, and started us thinking about how to manage dependent packages.
- [Thinkmill](https://www.thinkmill.com.au) - For sponsoring the focused open sourcing of this project, and the version two rearchitecture.
Visit https://changesets.dev to learn more.
3 changes: 3 additions & 0 deletions docs/adding-a-changeset.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
> [!WARNING]
> This documentation is outdated. View the up-to-date version at https://changesets.dev/faq#how-do-i-add-a-changeset

# Adding a changeset

Hi! You might be here because a person or a bot has asked you to 'add a changeset' to a project. Let's walk through adding a changeset. But first, what is a changeset?
Expand Down
3 changes: 3 additions & 0 deletions docs/automating-changesets.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
> [!WARNING]
> This documentation is outdated. View the up-to-date version at https://changesets.dev/guide/automating

# Automating Changesets

While changesets are designed to work with a fully manual process, it also provides tools to help automate these releases. These can be broken into two major decisions:
Expand Down
3 changes: 3 additions & 0 deletions docs/checking-for-changesets.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
> [!WARNING]
> This documentation is outdated. View the up-to-date version at https://changesets.dev/guide/automating#how-do-i-ensure-pull-requests-have-changesets

# Checking for changesets

Using `@changesets/cli`, there is a `status` command. See the docs for it in the
Expand Down
3 changes: 3 additions & 0 deletions docs/command-line-options.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
> [!WARNING]
> This documentation is outdated. View the up-to-date version at https://changesets.dev/guide/cli

# Command line options

The command line for changesets is the main way of interacting with it. There are 4 main commands. If you are looking for how we recommend you setup and manage changesets with the commands, check out our [intro to using changesets](./intro-to-using-changesets.md)
Expand Down
3 changes: 3 additions & 0 deletions docs/common-questions.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
> [!WARNING]
> This documentation is outdated. View the up-to-date version at https://changesets.dev/faq

# Common Questions

A quick list of common questions you might want answered to understand what changesets is doing, without going into minutiae or workflow.
Expand Down
3 changes: 3 additions & 0 deletions docs/config-file-options.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
> [!WARNING]
> This documentation is outdated. View the up-to-date version at https://changesets.dev/guide/config

# Configuring Changesets

Changesets has a minimal amount of configuration options. Mostly these are for when you need to change the default workflows. These are stored in `.changeset/config.json`. Our default config is:
Expand Down
3 changes: 3 additions & 0 deletions docs/decisions.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
> [!WARNING]
> This documentation is outdated. View the up-to-date version at https://changesets.dev/guide/technical-decisions

# Decisions

This file is a discussion of some of the rules and design decisions that have gone into making changesets. The goal of all of these has been to make the experience of using changesets easy, while still providing the maximum value possible.
Expand Down
3 changes: 3 additions & 0 deletions docs/detailed-explanation.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
> [!WARNING]
> This documentation is outdated. View the up-to-date version at https://changesets.dev/guide/why

# A Detailed Explanation of Changesets

Below, you will find a detailed explanation of what changesets are, and how they are being thought about.
Expand Down
3 changes: 3 additions & 0 deletions docs/dictionary.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
> [!WARNING]
> This documentation is outdated. There is no up-to-date version of this documentation as the relevant concepts are explained inlined where needed.

# Changesets Dictionary

This is a list of some words and phrases that are used in changesets which are helpful to know so that contributors to changesets have a shared understanding of various concepts in the project.
Expand Down
3 changes: 3 additions & 0 deletions docs/experimental-options.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
> [!WARNING]
> This documentation is outdated. View the up-to-date version at https://changesets.dev/guide/config#experimentalunsafeoptions-will-change-in-patch

# Experimental Options

All experimental options are configured in `config.json` under `___experimentalUnsafeOptions_WILL_CHANGE_IN_PATCH` flag.
Expand Down
3 changes: 3 additions & 0 deletions docs/fixed-packages.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
> [!WARNING]
> This documentation is outdated. View the up-to-date version at https://changesets.dev/guide/fixed-packages

# Fixed Packages

Fixed packages allow you to specify a group or groups of packages that should be versioned and published together.
Expand Down
3 changes: 3 additions & 0 deletions docs/intro-to-using-changesets.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
> [!WARNING]
> This documentation is outdated. View the up-to-date version at https://changesets.dev/guide/getting-started

# Using Changesets

Changesets are designed to make your workflows easier, by allowing the person making contributions to make key decisions when they are making their contribution. Changesets hold two key bits of information: a version type (following [semver](https://semver.org/)), and change information to be added to a changelog.
Expand Down
3 changes: 3 additions & 0 deletions docs/linked-packages.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
> [!WARNING]
> This documentation is outdated. View the up-to-date version at https://changesets.dev/guide/linked-packages

# Linked Packages

Linked packages allow you to specify a group or groups of packages that should be versioned together. There are some complex cases, so some examples are shown below to demonstrate various cases.
Expand Down
3 changes: 3 additions & 0 deletions docs/modifying-changelog-format.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
> [!WARNING]
> This documentation is outdated. View the up-to-date version at https://changesets.dev/guide/customize-changelog-format

# Modifying The Changelog Formats

Changesets comes with a default format for the changelogs for packages which is relatively basic in what information it displays, however this is customisable. Here we will talk about how to modify the changelog, so that it contains extra meta-information.
Expand Down
3 changes: 3 additions & 0 deletions docs/prereleases.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
> [!WARNING]
> This documentation is outdated. View the up-to-date version at https://changesets.dev/guide/prereleases

# Prereleases

> Warning! Prereleases are very complicated! Using them requires a thorough understanding of all parts of npm publishes. Mistakes can lead to repository and publish states that are very hard to fix.
Expand Down
3 changes: 3 additions & 0 deletions docs/problems-publishing-in-monorepos.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
> [!WARNING]
> This documentation is outdated. There is no up-to-date version of this documentation as problems are explained inlined where needed.

# Problems Publishing in Monorepos

Monorepos have a heap of complexity around how publishing to npm works. Changesets helps most repository users avoid ever having to think about these problems, however repository maintainers, especially those who want to customise how their releases work (for example those not using our [github action](https://github.com/changesets/action/)), may want to understand what it is solving for you.
Expand Down
3 changes: 3 additions & 0 deletions docs/snapshot-releases.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
> [!WARNING]
> This documentation is outdated. View the up-to-date version at https://changesets.dev/guide/snapshot-releases

# Snapshot Releases

Snapshot releases are a way to release your changes for testing without updating the versions. Both a modified `version` and a modified `publish` command are used to do accomplish a snapshot release. After both processes run, you will have a published version of packages in changesets with a version of `0.0.0-{tag}-DATETIMESTAMP`.
Expand Down
3 changes: 3 additions & 0 deletions docs/versioning-apps.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
> [!WARNING]
> This documentation is outdated. View the up-to-date version at https://changesets.dev/guide/beyond-npm

# Managing applications or non-npm packages

Changesets can also be used to manage application versions or non-npm packages (ie dotnet NuGet packages, ruby gems, docker images etc).
Expand Down
15 changes: 13 additions & 2 deletions eslint.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,13 @@ import tseslint from "typescript-eslint";
export default defineConfig(
{
ignores: [
"**/node_modules/**",
"**/*.{json,md}",
"**/dist/**",
"**/coverage/**",
"**/node_modules/**",
"site/.vitepress",
"packages/cli/bin.js",
"site/.vitepress/cache/**",
"**/*.snap",
],
},
Expand Down Expand Up @@ -97,10 +100,18 @@ export default defineConfig(
"import-lite/no-mutable-exports": "error",
},
},
{
files: ["site/.vitepress/theme/**"],
rules: {
"n/no-unsupported-features/node-builtins": "off",
},
},
{
files: [
"**/index.ts", // to be removed in next release (v4) when we are dropping default export
"**/*.config.*", // config files often return default exports
"**/*config.*", // config files often return default exports
"site/**/*.data.ts",
"site/**/*.paths.ts",
],
rules: {
"import-lite/no-default-export": "off",
Expand Down
6 changes: 6 additions & 0 deletions netlify.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
[build]
publish = "site/.vitepress/dist"
command = "pnpm build && pnpm site:build"

[build.environment]
NODE_VERSION = "24"
7 changes: 3 additions & 4 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,6 @@
"type": "git",
"url": "git+https://github.com/changesets/changesets.git"
},
"workspaces": [
"packages/*",
"scripts/*"
],
"type": "module",
"scripts": {
"postinstall": "manypkg check",
Expand All @@ -32,6 +28,9 @@
"test:fast": "vitest --tags-filter=!slow",
"types:check": "tsc",
"check-all": "pnpm build && pnpm test run && pnpm types:check && pnpm lint && pnpm format",
"site:dev": "pnpm --filter=./site dev",
"site:build": "pnpm --filter=./site build",
"site:preview": "pnpm --filter=./site preview",
"version-packages": "changeset version && pnpm format:fix",
"lint-staged:setup": "pnpm run --sequential \"/lint-staged:setup:\\d/\"",
"lint-staged:setup:1": "git config set hook.\"lint-staged\".event pre-commit",
Expand Down
Loading