Say hello to the future of cloud computing

Deploy with a function call. Call services as easily as local functions. Access storage as easily as in-memory data structures.

๐ŸŽ‰ Read the preview blog post
.> project.create-empty

  ๐ŸŽ‰ I've created the project with the randomly-chosen name
  energetic-cheetah (use `project.rename <new-name>` to change it).

energetic-cheetah/main> pull @unison/cloud-start/releases/latest 

  Downloading... DONE โœ…

energetic-cheetah/main> run helloWorld.deployannotation arrowfull code example below 

  Uploading service... DONE โœ…
  Service deployed at:


  View logs at: https://app.unison.cloud

energetic-cheetah/main> quit

$ curl https://myusername.unison-services.cloud/s/hello-world/Cloud
๐Ÿ‘‹ Hello, Cloud!


We've packed Unison Cloud full of goodies.

Web service hosting

Deploy HTTP and WebSocket services in seconds with a single function call. No building containers, managing VMs, or other cloud infra management. Focus entirely on the logic of your services.

Learn more
helloWorld.logic : HttpRequest ->{Exception, Log} HttpResponse                                     
helloWorld.logic = Route.run do
  name = route GET Parser.text
  info "request for greeting" [("name", name)]
  ok.text ("๐Ÿ‘‹ hello " ++ name ++ "\n")

helloWorld.deploy : '{IO, Exception} ()
helloWorld.deploy = Cloud.main do
  name = ServiceName.create "hello-world"
  serviceHash = deployHttp !Environment.default helloWorld.logic
  ServiceName.assign name serviceHash

Service-to-service calls

Make inter-service calls with a single line of code, without serialization or networking boilerplate. Get the benefits of a microservice architecture without the headache.

Learn more

Immutable deployments

All service deployments get a unique content-addressed hash. Named services have a stable URL and can point to any service version. Easily promote a deployment to production or rollback to an earlier version.

Learn more
#8LwIdQx1 A @alice 3 days ago
#G8VcMPGs Active Deploy C @carol 5 days ago
#AqjDPCC2 B @bob 6 days ago
#sS34CCmo L @logan 8 days ago
#45cKdmzL F @finley 13 days ago
#0fks3dLD T @taylor 29 days ago

Typed durable storage

Getting data into and and out of durable storage is usually a tedious layer of boilerplate in your application. With Unison Cloud, any value may saved in our transactional storage layer. Your access to storage is statically typed and checked by Unison's typechecker.

Learn more
counter : Database -> Table Text Nat -> HttpRequest -> HttpResponse
counter db userCounts = Route.run do
  (user, amount) = route.pair POST (s "increment" / text / nat)
  count = State.modifyGet db userCounts user 0 (x -> x + amount)
  ok.text (Nat.toText count ++ "\\n")

counter.deploy : '{IO, Exception} ()
counter.deploy = Cloud.main do
  db = Database.create "counter-service-db"
  env = Environment.create "counter-env"
  Database.assign db env
  h = deployHttp env (counter db (Table "counts"))
  ServiceName.assign (ServiceName.create "counter") h

Log collection and viewing

Logs produced by your services or batch jobs are consolidated and easily viewable in the Unison Cloud UI. You can also stream these logs to your local console.

Learn more
14:12:09 GET /hello/Cloud
14:12:16 GET /hello/Alice
14:13:21 GET /hello/Bob
14:18:09 GET /hello/Cloud

Batch compute jobs

Run your ETLs, data aggregations, or other batch jobs on elastic cloud resources.

Learn more

Secrets and config management

Upload secrets and config to our securely encrypted vault; access them easily from your services.

Learn more

Easy local testing

For easy testing, just swap a single function call and your service is running locally instead of in the cloud.

Learn more

Coming December 2023

ยฉ 2023 Unison Computing , a public benefit corp ยท Terms of Service ยท Privacy Policy ยท