Skip to content(if available)orjump to list(if available)

Unison 1.0 Release

Unison 1.0 Release

22 comments

·November 25, 2025

gampleman

Congratulations on the milestone. You are making one of the most radical PLs out there into something that is actually useable in an industry setting - that’s no mean feat.

pchiusano

Also, hi, I'm one of the language creators, feel free to ask any questions here!

lorenzleutgeb

What is the data you actually store when caching a successful test run? Do you store the hash of the expression which is the test, and a value with a semantics of "passed". Or do you have a way to hash all values (not expressions/AST!) that Unison can produce?

I am asking because if you also have a way to cache all values, this might allow to carry some of Unison's nice properties a little further. Say I implement a compiler in Unison, I end up with an expression that has a free variable, which carries the source code of the program I am compiling.

Now, I could take the hash of the expression, the hash of the term that represents the source code, i.e., what the variable in my compiler binds to, and the hash of the output. Would be very neat for reproducibility, similar to content-addressed derivations in Nix, and extensible to distributed reproducibility like Trustix.

I guess you'll be inclined to say that this is out of scope for your caching, because your caching would only cache results of expressions where all variables are bound (at the top level, evaluating down). And you would be right. But the point is to bridge to the outside of Unison, at runtime, and make this just easy to do with Unison.

Feel free to just point me at material to read, I am completely new to this language and it might be obvious to you...

SwiftyBug

Really cool project. To be honest, I think I don't fully understand the concept of a content addressed language. Initially I thought this was another BEAM language, but it seems to run on its own VM. How does Unison compare to BEAM languages when it comes to fault tolerance? What do you think is a use case that Unison shines that Erlang maybe falls short?

SJMG

Congratulations and amazing job! I've loosely followed Unison for years; hitting 1.0 is a big deal.

Unison has many intriguing features, the foremost being hashed definitions. It's an incredible paradigm shift.

It does seem like a solution searching for a problem right now though.

Who is this language targeted at and who is using it in production besides Unison Cloud?

taliesinb

Hello! Yes I am curious, how does one deal with cycles in the code hash graph? Mutually recursive functions for example?

aryairani

There's an algorithm for it. The thing that actually gets assigned a hash IS a mutually recursive cycle of functions. Most cycles are size 1 in practice, but some are 2+ like in your question, and that's also fine.

littlestymaar

Does that algorithm detects arbitrary subgraphs with a cyclic component, or just regular cycles? (Not that it would matter in practice, I don't think many people write convoluted mutually recursive mess because it would be a maintenance nightmare, just curious on the algorithmic side of things).

littlestymaar

First, congratulations for the 1.0 milestone.

Then, a pretty basic question: I see that Unison has a quite radical design, but what problem does this design solves actually?

rlmark

Thank you!

Unison does diverge a bit from the mainstream in terms of its design. There's a class of problems around deploying and serializing code that involve incidental complexity and repetitive work for many dev teams (IDLs at service boundaries and at storage boundaries, provisioning resources for cloud infrastructure) and a few "everyday programming" pain points that Unison does away with completely (non-semantic merge conflicts, dependency management resolution).

We wrote up some of that here at a high level: https://www.unison-lang.org/docs/what-problems-does-unison-s...

But also, feel free to ask more about the technical specifics if you'd like.

jimis

"Unison" is the legendary file sync tool from the 90s, written in OCaml, reliable and efficient as rsync but supporting bi-directional sync. https://en.wikipedia.org/wiki/Unison_(software)

jonym

I'm so old, I thought this was about Panic's Usenet client Unison.

perrohunter

about time that gets a 1.0 release

phplovesong

How does the database of code work with git? Should you share it or version it too?

rlmark

The tool you use to interact with the code database keeps track of the changes in an append-only log - if you're familiar with git, the commands for tracking changes echo those of git (push, pull, merge, etc) and many of them integrate with git tooling.

The projects in a codebase can absolutely be shared and versioned as well. Here's a log of release artifacts from a library as an example: https://share.unison-lang.org/@unison/base/releases.

aryairani

No, Unison has its own native version control, and a code sharing platform at https://share.unison-lang.org

domlebo70

I've never used it, but watched from afar. So many interesting ideas. The website is also really good. Congrats Paul and team

epolanski

I remember using unison few years ago and it had that cool idea that your codebase was saved as symbols on a database.

But I don't see any references to it anymore.

rlmark

That's still the case in Unison! This particular post doesn't dive into the codebase format, but the core idea is the same: Unison hashes your code by its AST and stores it in a database.

shauniel

Has anyone used this, any cool ideas?

pchiusano

https://www.unison-lang.org/docs/the-big-idea/ might be a good starting point!

For interesting usage - we built Unison Cloud (a distributed computing platform) with the Unison language and also more recently an "AWS Kinesis over object storage" product. It's nice for distributed systems, though you can also use it like any other general-purpose language, of course.

In terms of core language features, the effect system / algebraic effects implementation is something you may not have seen before. A lot of languages have special cases of this (like for async I/O, say, or generators), but algebraic effects are the uber-feature that can express all of these and more.

eej71

At first I thought it was about this.

https://github.com/bcpierce00/unison