🐣 New features
Apple Silicon builds
We now offer native builds for Apple Silicon (M1/M2) macOS architectures. To install Unison on an Apple Silicon machine, you no longer need to use Rosetta emulation.
Homebrew installs will automatically detect your architecture and install the correct version of Unison, or you can manually download the Apple Silicon build:
mkdir -p unisonlanguage && cd unisonlanguage
curl -L https://github.com/unisonweb/unison/releases/latest/download/ucm-macos-arm64.tar.gz \
| tar -xz
./ucm
Enhanced edit
command
The edit workflow has been refined:
It used to be that entering edit aTerm
would bring the term into your scratch file, appending a fold ---
to the term to give you a fresh workspace to make your changes. However, if you were working on a series of definitions that were still in-flight, you'd have to scroll down to remove the fold to continue working. This was a bit cumbersome since most of us work iteratively on large problem spaces, adding definitions as we go.
The new behavior is as follows:
edit
will add definitions to your current fold by default. The desirededit
targets will simply be put at the top of your working file.edit.new
will create a new fold if you want a fresh section for your changes.
🛠️ UX improvements and speed-ups
- Improved branch sorting with fzf
- We've fine-tuned branch navigation: now, the fzf search prioritizes branches in your current project, sorting them to the bottom for easier access. This should help you find the branches you’re actively working on more efficiently.
- Pure top-level definitions are cached for faster runtime performance
- Before this change, all pure top-level definitions were evaluated at every call site, which was unnecessary overhead. Now we detect these using type info from the codebase. For example, a top-level definition performing
IO
wouldn't be cached, but one which just returns a large string can safely be cached, and references to the definition will be replaced with the cached value. This should result in a noticeable speedup for many workloads.
- Before this change, all pure top-level definitions were evaluated at every call site, which was unnecessary overhead. Now we detect these using type info from the codebase. For example, a top-level definition performing
- Fix for
namespace
anduse
clauses in scratch files - We've resolved an issue where a
namespace
directive followed by ause
clause in scratch files would not parse in Unison. Now, these clauses will be correctly applied to the definitions in your scratch file.namespace
will open up a block which adds a prefix to all the definitions that follow it, anduse
will import definitions from other namespaces for use in your program.
- We've resolved an issue where a
- Fix for
🔮 Coming soon: mergetool support
One of the most anticipated features on the horizon is mergetool support. This will simplify resolving merge conflicts within Unison, offering a better experience when working with branches and collaborating with others. Stay tuned for more updates.