Structured code

MultiTool replaces brittle shell scripts and Makefiles with a structured, imperative DSL. Using the Toolfile DSL, you can encode common workflows like build, deploy and release.

Invoking these work is just like Make:
$ multi build
$ multi deploy
MultiTool compiles your workflows to WebAssembly with all the benefits of type-safety and the performance of native code.

Unlike shell scripts that can partially run before crashing on a syntax error, MultiTool checks the syntax and semantics of your program before it runs.

Idempotency

Similar to Infrastructure-as-Code tools like HashiCorp Terraform, MultiTool's novel Platform-as-Code approach remembers where you left off. Each provisioned resource is remembered, so if your computer loses power in the middle of a deploy, MultiTool will pick up where it left off when you next run it.

Provider support

MultiTool providers are WebAssembly Components and can be written in any language. Compile any existing library or SDK to a WebAssembly Component and it can be used from MultiTool's DSL, retrofitted with state management.

HTTP client generation

If your microservice has an OpenAPI specification, MultiTool can generate HTTP bindings for it. These bindings are implemented as Rust source code with a WebAssembly target. This gives you full control to alter the source code, extremely fast out-of-the-box performance, full interoperability with WASI, and full integration into MultiTool as a provider.

Cross-language SDKs

MultiTool can generate an SDK for any of its providers. MultiTool supports generating SDKs to Rust, Python, Go, .NET, Ruby, and Elixir.

Resource tracking

If you have an application that needs to create resources on the fly, you lose the state-tracking benefits of Infrastructure-as-Code. However, MultiTool's SDKs can optionally track these ad-hoc resources in state.
from aws import s3

let client = s3.client()
# my-bucket tracked in MultiTool's state
client.new-bucket("my-bucket")