CLI Options - Wasmtime

# CLI Options for `wasmtime`

The `wasmtime` CLI is organized into a few subcommands. If no subcommand is provided it'll assume `run`, which is to execute a wasm file. The subcommands supported by `wasmtime` are:

## `help`

This is a general subcommand used to print help information to the terminal. You can execute any number of the following:

    $ wasmtime help
    $ wasmtime --help
    $ wasmtime -h
    $ wasmtime help run
    $ wasmtime run -h

When in doubt, try running the `help` command to learn more about functionality!

## `run`

This is the `wasmtime` CLI's main subcommand, and it's also the default if no other subcommand is provided. The `run` command will execute a WebAssembly module. This means that the module will be compiled to native code, instantiated, and then optionally have an export executed.

The `wasmtime` CLI will automatically hook up any WASI-related imported functionality, but at this time if your module imports anything else it will fail instantiation.

The `run` command takes one positional argument which is the name of the module to run:

    $ wasmtime run foo.wasm
    $ wasmtime foo.wasm

Note that the `wasmtime` CLI can take both a binary WebAssembly file (`*.wasm`) as well as the text format for WebAssembly (`*.wat`):

    $ wasmtime foo.wat

The `run` command accepts an optional `invoke` argument which is the name of an exported function of the module to run.

    $ wasmtime run foo.wasm --invoke initialize

## `serve`

The `serve` subcommand runs a WebAssembly component in the `wasi:http/proxy` world via the WASI HTTP API, which is available since Wasmtime 18.0.0. The goal of this world is to support sending and receiving HTTP requests.

The `serve` command takes one positional argument which is the name of the component to run:

    $ wasmtime serve foo.wasm

Furthermore, an address can be specified via:

    $ wasmtime serve --addr=0.0.0.0:8081 foo.wasm

At the time of writing, the `wasi:http/proxy` world is still experimental and requires setup of some `wit` dependencies. For more information, see the hello-wasi-http example.

## `wast`

The `wast` command executes a `*.wast` file which is the test format for the official WebAssembly spec test suite. This subcommand will execute the script file which has a number of directives supported to instantiate modules, link tests, etc.

Executing this looks like:

    $ wasmtime wast foo.wast

## `config`

This subcommand is used to control and edit local Wasmtime configuration settings. The primary purpose of this currently is to configure how Wasmtime's code caching works. You can create a new configuration file for you to edit with:

    $ wasmtime config new

And that'll print out the path to the file you can edit.

## `compile`

This subcommand is used to Ahead-Of-Time (AOT) compile a WebAssembly module to produce a "compiled wasm" (.cwasm) file.

The `wasmtime run` subcommand can then be used to run a AOT-compiled WebAssembly module:

    $ wasmtime compile foo.wasm
    $ wasmtime foo.cwasm

AOT-compiled modules can be run from hosts that are compatible with the target environment of the AOT-completed module.

## `settings`

This subcommand is used to print the available Cranelift settings for a given target.

When run without options, it will print the settings for the host target and also display what Cranelift settings are inferred for the host:

    $ wasmtime settings