I’m going to use this thread to update the community on the upcoming
v0.15.0 PureScript release. Specifically, announcing various milestones we hit. I’m writing it for those who are new to the community and for those who were with us in the
First, I’m not going to give an estimate as to when this is ready. During the
v0.14.0 update, I made statements like, “We’re really close!”, and “it’ll be ready soon!”. Well, 3 months later, it still wasn’t ready. Not exactly “close” or “soon” now is it? While I don’t anticipate this release taking as long as the previous one, I’m still going to apply that lesson and not provide an estimate.
Second, I want to provide a “current status” as to where we’re at. Below I’m providing two snapshots. The first one is the original one I created when we got started on the release. The second is where we are today.
I’m providing both to prevent a misinterpretation of the current snapshot: the current snapshot is not exhaustive. As we’ve made progress, various issues arose, I realized additional tasks needed to be done, and I reformulated a few steps to show more detail. In other words, there may be more tasks we need to do than what is currently shown. Moreover, some boxes serve as things to keep in mind, not necessarily tasks to do or tasks that we’ve agreed to do.
Third, you might be wondering, "What are the
corelibraries refer to the 60 libraries under the
purescriptGitHub organization. It has the policy that PRs can only be merged if CI builds and 1) two core team members approve the PR if it’s submitted by a non-core-team contributor or 2) another core team member approves it if the contributor is on the core team.
contriblibraries refer to the 48 libraries under the
purescript-contribGitHub organization. It follows a similar PR policy, except approvers must be on the
webcorrespond to the
Once most of the breaking changes are done to the compiler, we can start updating the ecosystem. Updating the ecosystem is a very linear process. Since
core libraries use
bower, we have to update each library’s
bower.json to refer to the
master branch before any of its dependents will build in CI. Once we get to
contrib libraries, we have to depend on a package set, and that complicates things. Moreover, some libraries in
node depends on libraries in
contrib and vice versa.
However, the biggest bottleneck is getting an approval for the PR, not submitting the PR itself. So, this task is really a two-person job for
core libraries, and can expand to a 2-4 person job for
Due to the efforts of myself, @thomashoneyman and @sigma-andex,
web libraries (excluding
purescript-affjax) have been migrated to ES modules. These migrations exist only on those repos’ default branches, not as an official release yet as we may still make breaking changes.
In this section, I’m specifically talking to library authors. As for how to help, you could start updating your libraries, but you might want to wait before doing that.
node libraries are currently “unstable”. If you updated your library and added it to the
prepare-0.15 branch, your library may break if we merge other breaking changes (e.g. in the compiler itself or in one of those libraries). Thus, you might have to do additional work later.
Second, your library may depend on another package that hasn’t yet been updated. Until that package compiles, you can’t update yours. The latest released package set has 419 packages whereas the
prepare-0.15 branch only has 229. See libDeps.txt to determine whether your package can be updated now or not. Lines starting with ‘0’ have 0 dependencies blocking their update, but this calculation might be incorrect at times.
Third, I use the package set to see how breaking changes propagate throughout the ecosystem. If you added your package and it stops compiling after a breaking change is made, I’ll temporarily drop your package from the set. This creates extra work for me.
The ES modules working group will be discussing where we’re at and what we need to do next in weekly Discord call tomorrow.
The issues and PRs below are labeled with
type: breaking change and
purs-0.15. The breaking change label simply means that implementing the change would be a breaking one. It doesn’t necessarily mean we think it should be done, or that we will do it in this release.