decisions/002-branching-and-releasing.md
Beginning in Remix 3 the remix package is an umbrella package for everything in Remix. This includes a number of "sub-packages" that are all published under the @remix-run/* scope. The remix package re-exports everything from all sub-packages as a transparent pass-thru. This means users only have to install remix to get everything we publish, and they can import everything from some remix/* export.
We anticipate the majority of Remix development will happen directly on the main branch. main should always be publishable. We will publish minor/patch changes from main often for both remix and any sub-package that needs it.
When it comes to breaking changes (that require a major version bump), we have 2 goals:
remix releases so we don't stress people out by releasing majors too oftenMajor remix releases will happen on a predetermined schedule so that users may plan upgrades into their development lifecycle.
Breaking changes will accumulate on a future branch. The future branch is a preview of what the next major version of Remix will look like. If someone wants to play with the latest stuff, they can build directly from future. We don't make any guarantees about the [stability]1 of future, which is why users must build from source.
We will publish new majors of sub-packages as soon as they are ready from the future branch. When it's time to cut the next major remix release, we will merge future into main. Of course, this means that main should be merged into future periodically to make this easier.
By "stable" we mean "won't break between releases". Both main and future should always pass all tests and be usable, but on main we have versions and stability guarantees between them. On future, we don't. ↩