Navigate back to the homepage

EXM v0.1.5: Major Platform Improvements

Andres Pirela
November 2nd, 2022 · 2 min read

After the release of our public beta, our team has been actively iterating on the feedback provided by the community. This release focuses on improving the developer experience and softening the learning curve encountered when onboarding to EXM.

EXM 0.1.5 has been tagged and released with the following features and changes:

  • EXM Functions as URLs
  • result is now available during execution alongside the state
  • EXM.getDate(), SmartWeave.arweave.crypto.(sign|verify|hash|jwkToPublicCryptoKey|jwkToCryptoKey) has been stabilized

You can install for the first time or upgrade to EXM’s latest version by running:

1$ npm i -g @execution-machine/cli

New features and changes

Functions as URLs

Our #1 goal as a platform is to enable web2 and web3 developers to build and iterate on trustless applications as quickly as possible. From the feedback we’ve received on beta, we realized moving away from generalized API keys and treating each EXM Function as its own endpoint would greatly improve the developer experience.```

“Functions as URLs” enable any person to interact with EXM’s function through a unique URL. The syntax for this URL is the following:

1https://{EXM_Function_Id}.exm.run

Let’s take a look at function 4EBGfbWNweoq4ER84N_YoETGo8LAcGchBeIZBUhS2S0 which follows the user registry example in our documentation.

If we wanted to interact with it through URLs, we would do the following:

1curl --location --request POST 'https://4EBGfbWNweoq4ER84N_YoETGo8LAcGchBeIZBUhS2S0.exm.run' \
2--header 'Content-Type: application/json' \
3--data-raw '{
4 "username": "Andres Pirela"
5}'

In the example above, we are sending a POST request to our EXM Function’s URL where the JSON body of the request will be equivalent to action.input. Now, if we take a look at the state of it here, we can see the following state:

1{"users":[{"username":"Andres Pirela"}]}

We are pumped to enable this new feature starting today and can’t wait to see how you leverage it in your own applications.


Property result available during execution

The result property is part of the SmartWeave Contract Design and it enables returning information that is not part of the state. This feature was not previously exposed in EXM. Today, we are pleased to announce you can now make use of result as part of the returning object of your functions.

The result property is now available in the optimistic response when sending a write operation. This new feature enables EXM Functions to make use of input data against a state without mutation for use cases such as indexing. We hope this can help improve the way your application handles state.

API Stabilizations

We are excited to announce we have stabilized:

  • EXM.getDate()
  • SmartWeave.arweave.crypto.sign(jwk, buffer)
  • SmartWeave.arweave.crypto.verify(jwk.n, buffer, signature)
  • SmartWeave.arweave.crypto.hash(buffer, algorithm = "SHA-256")
  • SmartWeave.arweave.crypto.jwkToPublicCryptoKey(jwk)
  • SmartWeave.arweave.crypto.jwkToCryptoKey(jwk)

You can request API stabilization by opening an issue here and indicating what API you would like to see as stable.

Local Testing

While Local Testing is not part of this release, we are excited to announce it officially. EXM’s local testing APIs enable you to deeply test EXM functions without having to deploy them.

You can read more about testing functions locally here.


Follow @exmbuild on Twitter or Github and be on the lookout for exciting new developments that will be rolling out shortly.

More articles from EXM

Introducing The Execution Machine

EXM Brings Lambda Functions to the Blockchain, Opening Web3 to Millions of Developers

October 6th, 2022 · 2 min read
© 2022 EXM
Link to $https://github.com/exmbuild