Key Value API
1
4fbf02fc-0329-4291-aac3-0143969167c4
Promise API
2
4fbf02fc-0329-4291-aac3-0143969167c4
Worker API
8
fc0b5887-cca5-4261-b6b7-73711f6f23b0
Token API
7
fc0b5887-cca5-4261-b6b7-73711f6f23b0
Template API
6
fc0b5887-cca5-4261-b6b7-73711f6f23b0
Project policy API
5
fc0b5887-cca5-4261-b6b7-73711f6f23b0
Project grant API
4
fc0b5887-cca5-4261-b6b7-73711f6f23b0
Project API
3
fc0b5887-cca5-4261-b6b7-73711f6f23b0
Login API
2
fc0b5887-cca5-4261-b6b7-73711f6f23b0
Account API
1
fc0b5887-cca5-4261-b6b7-73711f6f23b0
Breaking changes August 2023
1
726cfb0b-bffe-41ba-98b4-94069569ec3c
Overview
0
726cfb0b-bffe-41ba-98b4-94069569ec3c
Tier 4 languages
4
03501aa5-572b-4129-aa0a-9e9fe9f5d3fc
Python
4
54bda586-0bf3-430e-93e5-6d8c578372bd
Overview
0
ac8f610e-7e8f-465d-9e32-4b6ae0aba3b5
Overview
0
0f58ad57-8cb7-4a64-8aed-c7bea90c37f9
Overview
0
03501aa5-572b-4129-aa0a-9e9fe9f5d3fc
Overview
0
54bda586-0bf3-430e-93e5-6d8c578372bd
Overview
0
9b92ca64-009f-47e8-9457-b544f786d8af
Quickstart
2
1d167981-dd90-40ab-8023-3b2013ceb5c5
Overview
0
1aa11fd4-1dcf-4c87-8b46-5c15ca815d61
Overview
0
4fbf02fc-0329-4291-aac3-0143969167c4
Overview
0
d0be080a-56f4-481a-91d3-ba7d30c144f4
Common tooling
1
03501aa5-572b-4129-aa0a-9e9fe9f5d3fc
C
3
54bda586-0bf3-430e-93e5-6d8c578372bd
Go
2
54bda586-0bf3-430e-93e5-6d8c578372bd
Grain
3
9b92ca64-009f-47e8-9457-b544f786d8af
Swift
1
9b92ca64-009f-47e8-9457-b544f786d8af
C#
3
9b92ca64-009f-47e8-9457-b544f786d8af
Zig
2
9b92ca64-009f-47e8-9457-b544f786d8af
Rust
1
54bda586-0bf3-430e-93e5-6d8c578372bd
Overview
0
fc0b5887-cca5-4261-b6b7-73711f6f23b0
Overview
0
62133a19-c114-4a29-a74b-f986d118e157
Why Golem?
1
1d167981-dd90-40ab-8023-3b2013ceb5c5
Overview
0
1d167981-dd90-40ab-8023-3b2013ceb5c5
API Gateway
308adf1f-525e-460e-81c9-6ea00d1dbca4
d0be080a-56f4-481a-91d3-ba7d30c144f4
4
Release notes
726cfb0b-bffe-41ba-98b4-94069569ec3c
d0be080a-56f4-481a-91d3-ba7d30c144f4
9
Component interface
ac8f610e-7e8f-465d-9e32-4b6ae0aba3b5
d0be080a-56f4-481a-91d3-ba7d30c144f4
7
Getting Started
1d167981-dd90-40ab-8023-3b2013ceb5c5
d0be080a-56f4-481a-91d3-ba7d30c144f4
1
Building Components
03501aa5-572b-4129-aa0a-9e9fe9f5d3fc
d0be080a-56f4-481a-91d3-ba7d30c144f4
2
Tier 2 languages
54bda586-0bf3-430e-93e5-6d8c578372bd
03501aa5-572b-4129-aa0a-9e9fe9f5d3fc
2
Promises
62133a19-c114-4a29-a74b-f986d118e157
d0be080a-56f4-481a-91d3-ba7d30c144f4
3
Tier 3 languages
9b92ca64-009f-47e8-9457-b544f786d8af
03501aa5-572b-4129-aa0a-9e9fe9f5d3fc
3
Golem CLI
1aa11fd4-1dcf-4c87-8b46-5c15ca815d61
d0be080a-56f4-481a-91d3-ba7d30c144f4
4
REST API
fc0b5887-cca5-4261-b6b7-73711f6f23b0
d0be080a-56f4-481a-91d3-ba7d30c144f4
5
Runtime API
4fbf02fc-0329-4291-aac3-0143969167c4
d0be080a-56f4-481a-91d3-ba7d30c144f4
6
FAQ
0f58ad57-8cb7-4a64-8aed-c7bea90c37f9
d0be080a-56f4-481a-91d3-ba7d30c144f4
7

Breaking changes August 2023

726cfb0b-bffe-41ba-98b4-94069569ec3c

The Golem Cloud August release (released on 5th of September 2023) contains a couple of breaking changes requiring installation of new tooling and rebuilding/re-uploading the user’s projects.

This page summarizes these breaking changes:

Changed vocabulary

Starting from this release we renamed some of the core entities of Golem Cloud. This renaming affects the whole solution including the CLI tool, the REST API, the documentation and examples.

Old nameNew nameDescription
instanceworkerA running worker identified by its unique worker-id can export multiple functions that can be invoked to produce a result and manipulate the worker’s state.
componenttemplateEach worker is constructed from a worker template, which contains the compiled WASM code to be executed by the workers, as well as additional metadata.
templateexampleThe CLI tool contains several examples available for creating new templates using the golem new command. These are living in the open source repository.

Update to the latest WASI and component model versions

The new version is built on the latest version of the WASM component model and implements the latest version of WASI Preview 2.

The WASI interface definitions had breaking changes since the version implemented in earlier Golem Cloud versions, having the following consequences:

  • The required versions of tooling (depending on the guest language) has been changed. Make sure to install the new versions before compiling any template for Golem Cloud!
  • The existing templates (previously components) cannot run on the updated version of Golem Cloud. They need to be recompiled with the new tooling.
  • There are some differences in the generated bindings / required settings etc, depending on the used guest language, so the template’s source code may have to be updated before recompilation. These differences are collected below.

Rust specific changes

The new version of cargo-component uses a new way to generate bindings from the WIT files, and also introduces some changes in how the output WASM is generated.

First you need to update cargo-component to the following version:

cargo install --git https://github.com/bytecodealliance/cargo-component cargo-component --rev e57d1d1405ed2d76f1f3d8647480dea700379ff8 --locked --force

In the Cargo.toml you no longer depend on wit-bindgen instead on the proper version of cargo-component-bindings:

cargo-component-bindings = { git = "https://github.com/bytecodealliance/cargo-component", rev = "e57d1d1405ed2d76f1f3d8647480dea700379ff8" }

Additionally, you must not specify a name for your lib in the Cargo.toml otherwise you won’t get a WASM component just a module (this is possibly a cargo-component bug that will be fixed later).

In the lib.rs, first you have to generate the bindings with a macro:

cargo_component_bindings::generate!();

And then import the generated bindings. In case you exported an interface, it is located in a submodule consisting of the package name and the interface name, for example:

use crate::bindings::exports::golem::it::api::*;

If you only exported functions, the binding is directly in the binding module:

use crate::bindings::*;

The next difference is when implementing the exported trait. It is now always called Guest, and the struct you implement the trait for must be called Component:

struct Component;



impl Guest for Component {

// ...

}

If your template uses the reqwest fork for Golem, it needs to be updated to the following depenency:

reqwest = { git = "https://github.com/zivergetech/reqwest", branch = "update-aug-2023", features = ["json"] }

Python specific changes

A new version of componentize-py must be downloaded from https://github.com/golemcloud/componentize-py/releases/tag/untagged-1d33f43a20e6729ca9f9

Tier 3 language specific changes

You need to update wasm-tools and wit-bindgen to the following versions:

cargo install wasm-tools@1.0.40

cargo install wit-bindgen-cli@0.11.0 wit-bindgen-cli

Additionally now instead of run, the exported function of Tier 3 templates is called wasi:cli/run/run.

Guest language independent changes

For those guest languages that require using wasm-tools with a preview2 adapter to construct the Golem templates (see Building Templates) (everything except Rust and Python now), need to use the updated adapter wasms coming with the updated version of golem-cli.

For new templates (created with golem new) this is automatically put into the adapters directory of the generated template.

For existing ones please download the correct one from https://github.com/golemcloud/golem-wit/tree/29e5cdbd6432fe4e0ab6cd09048ccf1767821b17/adapters and replace the old one with it.

If your existing template uses any of the Golem or WASI WIT definitions (in wit/deps ) they have to be updated to the latest version of these interface definitions.

Just like with the adapters, new templates contain the updated ones but for existing ones you need to update manually by downloading them from https://github.com/golemcloud/golem-wit/tree/29e5cdbd6432fe4e0ab6cd09048ccf1767821b17/wit