Unison 1.0 is here!
This milestone reflects the dedication of our talented team and the many developers, maintainers, and early adopters who have indelibly shaped our language ecosystem.
We did it!
Unison 1.0 marks a point where the language, distributed runtime, and developer workflow have stabilized. Over the past few years, we've refined the core language, optimized the programming workflow, built collaborative tooling, and created a deployment platform for your Unison apps and services.
What is Unison?
Unison is a programming language built around one big idea: let's identify a definition by its actual contents, not just by the human-friendly name that also referred to older versions of the definition. Our ecosystem leverages this core idea from the ground up. Some benefits: we never compile the same code twice; many versioning conflicts simply aren't; and we're able to build sophisticated self-deploying distributed systems within a single strongly-typed program.
Unison code lives in a database—your "codebase"—rather than in text files. The human-friendly names are in the codebase too, but they're materialized as text only when reading or editing your code.
The Codebase Manager
The Unison Codebase Manager (ucm) is a CLI tool used alongside your text editor to edit, rename, delete definitions; manage libraries; run your programs and test suites.
factorial n =
if n > 1 then n * factorial (n-1) else n
guessingGame = do Random.run do
target = Random.natIn 0 100
printLine "Guess a number between 0 and 100"
loop = do
match (console.readLine() |> Nat.fromText) with
Some guess | guess == target ->
printLine "Correct! You win!"
Some guess | guess < target ->
printLine "Too low, try again"
loop()
Some guess | guess > target ->
printLine "Too high, try again"
loop()
otherwise ->
printLine "Invalid input, try again"
loop()
loop()
scratch/main>
Loading changes detected in ~/scratch.u.
+ factorial : Nat -> Nat
+ guessingGame : '{IO, Exception} ()
Run `update` to apply these changes to your codebase.
UCM Desktop
UCM Desktop is our GUI code browser for your local codebase.
Unison Share
Unison Share is our community hub where open and closed-source projects alike are hosted. In addition to all the features you'd expect of a code-hosting platform—project and code search, individual and organizational accounts, browsing code and docs, reviewing contributions, etc, thanks to the one big idea, all of the code references are hyperlinked and navigable.
Unison Cloud
Unison Cloud is our platform for deploying Unison applications. Transition from local prototypes to fully deployed distributed applications using a simple, familiar API—no YAML files, inter-node protocols, or deployment scripts required. In Unison, your apps and infrastructure are defined in the same program, letting you manage services and deployments entirely in code.
deploy : '{IO, Exception} URI
deploy = Cloud.main do
name = ServiceName.named "hello-world"
serviceHash =
deployHttp Environment.default() helloWorld
ServiceName.assign name serviceHash
What does Unison code look like?
Here's a Unison program that prompts the user to guess a random number from the command line.
It features several of Unison's language features:
- Abilities - for functional effect management
- Structural pattern matching - for decomposing types and managing control flow
- Delayed computations - for representing non-eager evaluation
guessingGame : '{IO, Exception} ()
guessingGame = do Random.run do
target = Random.natIn 0 100
printLine "Guess a number between 0 and 100"
loop = do
match (console.readLine() |> Nat.fromText) with
Some guess | guess == target ->
printLine "Correct! You win!"
Some guess | guess < target ->
printLine "Too low, try again"
loop()
Some guess | guess > target ->
printLine "Too high, try again"
loop()
otherwise ->
printLine "Invalid input, try again"
loop()
loop()
Our road to 1.0
The major milestones from 🥚 to 🐣 and 🐥.
Unison Computing company founding
First alpha release of Unison
Strangeloop conference
Unison adopts SQLite for local codebases
Unison Share's first deployment
Unison Forall conference
LSP support
Projects land in Unison
Kind-checking lands for Unison
Contributions added to Unison Share
OrderedTable storage added to the Cloud
Unison Cloud generally available to the public
We open-sourced Unison Share
Cloud daemons
Ecosystem-wide type-based search
Unison Forall 2024
Unison Desktop App
Volturno distributed stream processing library
Runtime performance optimizations
MCP server for Unison
Cloud BYOC
UCM git-style diff tool support
Branch history comments
Unison 1.0 release
Metrics
Our momentum is powered by a prolific team and a remarkable community.
26,558+
Commits
3,490+
PRs merged
6.2k
Github stars
152,459
Unison library downloads
139,811+
Published Unison definitions
1,300+
Unison project authors
Whats next?
We're continuing to improve the core Unison language and tooling for a more streamlined and delightful development experience, as well as developing exciting new capabilities on top of Unison Cloud. Here are a few examples on our immediate horizon:
Join us today
Unison couldn't be made without our amazing community. Join us and help shape the future of Unison.
Frequently asked questions
Why make a whole new programming language? Couldn't you add Unison's features to another language?
Unison's hash-based, database-backed representation changes how code is identified, versioned, and shared. As a consequence, the workflow, toolchain, and deployment model are not add-ons; they emerge naturally from the language's design. In theory, you could try to retrofit these ideas onto another language, but doing so might be fragile, difficult to make reliable in production, and would likely require rewriting major parts of the existing tooling while restricting language features.
You don't build a rocket ship out of old cars, you start fresh.
Is anyone using Unison in prod?
Yes, we are! Our entire Cloud orchestration layer is written entirely in Unison, and it has powered Unison Cloud from day one.
I'm concerned about vendor lock-in; do I have to use Unison Cloud to deploy my services?
No, Unison is an open source, general programming language, and you can export a compiled binary and deploy it via Docker, or however you prefer.
You can also run Unison Cloud on your own infrastructure. Both Unison Cloud and our Bring Your Own Cloud (BYOC) offer generous free tiers.
What does collaborating look like in Unison?
Unison Share supports organizations, tickets, code contributions (pull requests), code review, and more.
In many ways Unison's story for collaboration outstrips the status quo of developer tooling. e.g. merge conflicts only happen when two people actually modify the same definition; not because you moved some stuff around in your files.
How does version control work in the absence of Git?
Unison implements a native version control system: with projects, branches, clone, push, pull, merge, etc.
Do I have to use a specific IDE?
No, you can pick any IDE that you're familiar with. Unison exposes an LSP server and many community members have contributed their own editor setups here.
What about interop with other languages?
Work is underway today to add a C FFI!
Without files, how do I see my codebase?
Your codebase structure is viewable with the Unison Desktop app. The UCM Desktop app also features click-through to definition tooling and rich rendering of docs.