[package] name = "wasmtime-cli" version.workspace = true authors.workspace = true description = "Command-line interface for Wasmtime" license = "Apache-2.0 WITH LLVM-exception" documentation = "https://bytecodealliance.github.io/wasmtime/cli.html" categories = ["wasm"] keywords = ["webassembly", "wasm"] repository = "https://github.com/bytecodealliance/wasmtime" readme = "README.md" edition.workspace = true default-run = "wasmtime" rust-version.workspace = true [package.metadata.binstall] pkg-url = "{repo}/releases/download/v{version}/wasmtime-v{version}-{target-arch}-{target-family}{archive-suffix}" bin-dir = "wasmtime-v{version}-{target-arch}-{target-family}/{bin}{binary-ext}" pkg-fmt = "txz" [package.metadata.binstall.overrides.x86_64-apple-darwin] pkg-url = "{repo}/releases/download/v{version}/wasmtime-v{version}-{target-arch}-macos{archive-suffix}" bin-dir = "wasmtime-v{version}-{target-arch}-macos/{bin}{binary-ext}" [package.metadata.binstall.overrides.aarch64-apple-darwin] pkg-url = "{repo}/releases/download/v{version}/wasmtime-v{version}-{target-arch}-macos{archive-suffix}" bin-dir = "wasmtime-v{version}-{target-arch}-macos/{bin}{binary-ext}" [package.metadata.binstall.overrides.x86_64-pc-windows-msvc] pkg-fmt = "zip" [package.metadata.binstall.overrides.x86_64-pc-windows-gnu] pkg-fmt = "zip" [package.metadata.binstall.overrides.x86_64-unknown-linux-musl] pkg-url = "{repo}/releases/download/v{version}/wasmtime-v{version}-{target-arch}-musl{archive-suffix}" bin-dir = "wasmtime-v{version}-{target-arch}-musl/{bin}{binary-ext}" [lints] workspace = true [lib] doctest = false [[bin]] name = "wasmtime" path = "src/bin/wasmtime.rs" doc = false [dependencies] wasmtime = { workspace = true, features = ['std'] } wasmtime-cache = { workspace = true, optional = true } wasmtime-cli-flags = { workspace = true } wasmtime-cranelift = { workspace = true, optional = true } wasmtime-environ = { workspace = true } wasmtime-explorer = { workspace = true, optional = true } wasmtime-wast = { workspace = true, optional = true } wasi-common = { workspace = true, default-features = true, features = ["exit", "tokio"], optional = true } wasmtime-wasi = { workspace = true, default-features = true, optional = true } wasmtime-wasi-nn = { workspace = true, optional = true } wasmtime-wasi-runtime-config = { workspace = true, optional = true } wasmtime-wasi-keyvalue = { workspace = true, optional = true } wasmtime-wasi-threads = { workspace = true, optional = true } wasmtime-wasi-http = { workspace = true, optional = true } clap = { workspace = true } anyhow = { workspace = true, features = ['std'] } target-lexicon = { workspace = true } once_cell = { workspace = true } listenfd = { version = "1.0.0", optional = true } wat = { workspace = true, optional = true } serde = { workspace = true } serde_derive = { workspace = true } serde_json = { workspace = true } wasmparser = { workspace = true } tracing = { workspace = true } log = { workspace = true } humantime = { workspace = true } tempfile = { workspace = true, optional = true } async-trait = { workspace = true } bytes = { workspace = true } cfg-if = { workspace = true } tokio = { workspace = true, optional = true, features = [ "signal", "macros" ] } hyper = { workspace = true, optional = true } http = { workspace = true, optional = true } http-body-util = { workspace = true, optional = true } [target.'cfg(unix)'.dependencies] rustix = { workspace = true, features = ["mm", "param", "process"] } [dev-dependencies] # depend again on wasmtime to activate its default features for tests wasmtime = { workspace = true, features = ['default', 'winch', 'all-arch', 'call-hook', 'memory-protection-keys'] } env_logger = { workspace = true } log = { workspace = true } filecheck = { workspace = true } tempfile = { workspace = true } tokio = { workspace = true, features = ["rt", "time", "macros", "rt-multi-thread"] } wast = { workspace = true } criterion = { workspace = true } num_cpus = "1.13.0" memchr = "2.4" async-trait = { workspace = true } wat = { workspace = true } rayon = "1.5.0" wasmtime-wast = { workspace = true, features = ['component-model'] } wasmtime-component-util = { workspace = true } component-macro-test = { path = "crates/misc/component-macro-test" } component-test-util = { workspace = true } bstr = "1.6.0" libc = { workspace = true } serde = { workspace = true } serde_json = { workspace = true } walkdir = { workspace = true } test-programs-artifacts = { workspace = true } bytesize = "1.3.0" wit-component = { workspace = true } cranelift-filetests = { workspace = true } cranelift-codegen = { workspace = true, features = ["disas", "trace-log", "timing"] } cranelift-reader = { workspace = true } toml = { workspace = true } similar = { workspace = true } libtest-mimic = { workspace = true } capstone = { workspace = true } object = { workspace = true, features = ['std'] } wasmtime-test-macros = { path = "crates/test-macros" } [target.'cfg(windows)'.dev-dependencies] windows-sys = { workspace = true, features = ["Win32_System_Memory"] } [build-dependencies] anyhow = { workspace = true, features = ['std'] } [profile.release.build-override] opt-level = 0 [workspace] resolver = '2' members = [ "cranelift", "cranelift/isle/fuzz", "cranelift/isle/islec", "cranelift/serde", "crates/bench-api", "crates/c-api/artifact", "crates/environ/fuzz", "crates/test-programs", "crates/wasi-preview1-component-adapter", "crates/wasi-preview1-component-adapter/verify", "examples/fib-debug/wasm", "examples/wasi/wasm", "examples/tokio/wasm", "examples/component/wasm", "examples/min-platform", "examples/min-platform/embedding", "fuzz", "winch/codegen", ] exclude = [ 'docs/rust_wasi_markdown_parser', ] [workspace.package] version = "25.0.3" authors = ["The Wasmtime Project Developers"] edition = "2021" # Wasmtime's current policy is that this number can be no larger than the # current stable release of Rust minus 2. rust-version = "1.78.0" [workspace.lints.rust] # Turn on some lints which are otherwise allow-by-default in rustc. unused_extern_crates = 'warn' trivial_numeric_casts = 'warn' unstable_features = 'warn' unused_import_braces = 'warn' unused-lifetimes = 'warn' [workspace.lints.clippy] # The default set of lints in Clippy is viewed as "too noisy" right now so # they're all turned off by default. Selective lints are then enabled below as # necessary. all = { level = 'allow', priority = -1 } clone_on_copy = 'warn' map_clone = 'warn' uninlined_format_args = 'warn' unnecessary_to_owned = 'warn' manual_strip = 'warn' [workspace.dependencies] arbitrary = { version = "1.3.1" } wasmtime-wmemcheck = { path = "crates/wmemcheck", version = "=25.0.3" } wasmtime = { path = "crates/wasmtime", version = "25.0.3", default-features = false } wasmtime-c-api-macros = { path = "crates/c-api-macros", version = "=25.0.3" } wasmtime-cache = { path = "crates/cache", version = "=25.0.3" } wasmtime-cli-flags = { path = "crates/cli-flags", version = "=25.0.3" } wasmtime-cranelift = { path = "crates/cranelift", version = "=25.0.3" } wasmtime-winch = { path = "crates/winch", version = "=25.0.3" } wasmtime-environ = { path = "crates/environ", version = "=25.0.3" } wasmtime-explorer = { path = "crates/explorer", version = "=25.0.3" } wasmtime-fiber = { path = "crates/fiber", version = "=25.0.3" } wasmtime-types = { path = "crates/types", version = "25.0.3" } wasmtime-jit-debug = { path = "crates/jit-debug", version = "=25.0.3" } wasmtime-wast = { path = "crates/wast", version = "=25.0.3" } wasmtime-wasi = { path = "crates/wasi", version = "25.0.3", default-features = false } wasmtime-wasi-http = { path = "crates/wasi-http", version = "=25.0.3", default-features = false } wasmtime-wasi-nn = { path = "crates/wasi-nn", version = "25.0.3" } wasmtime-wasi-runtime-config = { path = "crates/wasi-runtime-config", version = "25.0.3" } wasmtime-wasi-keyvalue = { path = "crates/wasi-keyvalue", version = "25.0.3" } wasmtime-wasi-threads = { path = "crates/wasi-threads", version = "25.0.3" } wasmtime-component-util = { path = "crates/component-util", version = "=25.0.3" } wasmtime-component-macro = { path = "crates/component-macro", version = "=25.0.3" } wasmtime-asm-macros = { path = "crates/asm-macros", version = "=25.0.3" } wasmtime-versioned-export-macros = { path = "crates/versioned-export-macros", version = "=25.0.3" } wasmtime-slab = { path = "crates/slab", version = "=25.0.3" } component-test-util = { path = "crates/misc/component-test-util" } component-fuzz-util = { path = "crates/misc/component-fuzz-util" } wiggle = { path = "crates/wiggle", version = "=25.0.3", default-features = false } wiggle-macro = { path = "crates/wiggle/macro", version = "=25.0.3" } wiggle-generate = { path = "crates/wiggle/generate", version = "=25.0.3" } wasi-common = { path = "crates/wasi-common", version = "=25.0.3", default-features = false } wasmtime-fuzzing = { path = "crates/fuzzing" } wasmtime-jit-icache-coherence = { path = "crates/jit-icache-coherence", version = "=25.0.3" } wasmtime-wit-bindgen = { path = "crates/wit-bindgen", version = "=25.0.3" } test-programs-artifacts = { path = 'crates/test-programs/artifacts' } pulley-interpreter = { path = 'pulley', version = "=0.1.3" } pulley-interpreter-fuzz = { path = 'pulley/fuzz' } cranelift-wasm = { path = "cranelift/wasm", version = "0.112.3" } cranelift-codegen = { path = "cranelift/codegen", version = "0.112.3", default-features = false, features = ["std", "unwind"] } cranelift-frontend = { path = "cranelift/frontend", version = "0.112.3" } cranelift-entity = { path = "cranelift/entity", version = "0.112.3" } cranelift-native = { path = "cranelift/native", version = "0.112.3" } cranelift-module = { path = "cranelift/module", version = "0.112.3" } cranelift-interpreter = { path = "cranelift/interpreter", version = "0.112.3" } cranelift-reader = { path = "cranelift/reader", version = "0.112.3" } cranelift-filetests = { path = "cranelift/filetests" } cranelift-object = { path = "cranelift/object", version = "0.112.3" } cranelift-jit = { path = "cranelift/jit", version = "0.112.3" } cranelift-fuzzgen = { path = "cranelift/fuzzgen" } cranelift-bforest = { path = "cranelift/bforest", version = "0.112.3" } cranelift-bitset = { path = "cranelift/bitset", version = "0.112.3" } cranelift-control = { path = "cranelift/control", version = "0.112.3" } cranelift = { path = "cranelift/umbrella", version = "0.112.3" } winch-codegen = { path = "winch/codegen", version = "=0.23.3" } wasi-preview1-component-adapter = { path = "crates/wasi-preview1-component-adapter" } byte-array-literals = { path = "crates/wasi-preview1-component-adapter/byte-array-literals" } # Bytecode Alliance maintained dependencies: # --------------------------- regalloc2 = "0.10.2" # cap-std family: target-lexicon = "0.12.16" cap-std = "3.4.1" cap-rand = { version = "3.4.1", features = ["small_rng"] } cap-fs-ext = "3.4.1" cap-net-ext = "3.4.1" cap-time-ext = "3.4.1" cap-tempfile = "3.4.1" fs-set-times = "0.20.1" system-interface = { version = "0.27.1", features = ["cap_std_impls"] } io-lifetimes = { version = "2.0.3", default-features = false } io-extras = "0.18.1" rustix = "0.38.31" # wit-bindgen: wit-bindgen = { version = "0.30.0", default-features = false } wit-bindgen-rust-macro = { version = "0.30.0", default-features = false } # wasm-tools family: wasmparser = { version = "0.217.0", default-features = false } wat = "1.217.0" wast = "217.0.0" wasmprinter = "0.217.0" wasm-encoder = "0.217.0" wasm-smith = "0.217.0" wasm-mutate = "0.217.0" wit-parser = "0.217.0" wit-component = "0.217.0" # Non-Bytecode Alliance maintained dependencies: # -------------------------- cc = "1.0" object = { version = "0.36", default-features = false, features = ['read_core', 'elf'] } gimli = { version = "0.29.0", default-features = false, features = ['read'] } addr2line = { version = "0.22.0", default-features = false } anyhow = { version = "1.0.22", default-features = false } windows-sys = "0.52.0" env_logger = "0.10" log = { version = "0.4.8", default-features = false } clap = { version = "4.3.12", default-features = false, features = ["std", "derive"] } hashbrown = { version = "0.14", default-features = false } capstone = "0.12.0" once_cell = { version = "1.12.0", default-features = false } smallvec = { version = "1.6.1", features = ["union"] } tracing = "0.1.26" bitflags = "2.0" thiserror = "1.0.43" async-trait = "0.1.71" heck = "0.4" similar = "2.1.0" toml = "0.8.10" mach2 = "0.4.2" memfd = "0.6.2" psm = "0.1.11" proptest = "1.0.0" rand = { version = "0.8.3", features = ["small_rng"] } sptr = "0.3.2" # serde and serde_derive must have the same version serde = { version = "1.0.188", default-features = false, features = ['alloc'] } serde_derive = "1.0.188" serde_json = "1.0.80" glob = "0.3.0" libfuzzer-sys = "0.4.0" walkdir = "2.3.3" cfg-if = "1.0" tempfile = "3.1.0" filecheck = "0.5.0" libc = { version = "0.2.112", default-features = true } file-per-thread-logger = "0.2.0" tokio = { version = "1.30.0", features = [ "rt", "time" ] } hyper = "1.0.1" http = "1.0.0" http-body = "1.0.0" http-body-util = "0.1.0" bytes = "1.4" futures = { version = "0.3.27", default-features = false } indexmap = { version = "2.0.0", default-features = false } pretty_env_logger = "0.5.0" syn = "2.0.25" test-log = { version = "0.2", default-features = false, features = ["trace"] } tracing-subscriber = { version = "0.3.1", default-features = false, features = ['fmt', 'env-filter', 'ansi', 'tracing-log'] } url = "2.3.1" humantime = "2.0.0" postcard = { version = "1.0.8", default-features = false, features = ['alloc'] } criterion = { version = "0.5.0", default-features = false, features = ["html_reports", "rayon"] } rustc-hash = "2.0.0" libtest-mimic = "0.7.0" semver = { version = "1.0.17", default-features = false } # ============================================================================= # # Features for the Wasmtime CLI executable # # # Note that many of these features are inherited from Wasmtime itself or # otherwise configure the `wasmtime` crate's execution. Features are provided as # compile-time switches to disable functionality primarily if one is interested # in configuring binary size and or exploring the binary size implications of # various features. Most features are enabled by default but most embeddings # likely won't need all features. # # When adding or removing a feature, make sure to kepe the C API in sync by # modifying locations marked WASMTIME_FEATURE_LIST [features] default = [ # All subcommands are included by default. "run", "compile", "explore", "serve", "wast", "config", # On-by-default WASI features "wasi-nn", "wasi-threads", "wasi-http", "wasi-runtime-config", "wasi-keyvalue", # Most features of Wasmtime are enabled by default. "wat", "parallel-compilation", "pooling-allocator", "cache", "logging", "demangle", "cranelift", "profiling", "coredump", "addr2line", "debug-builtins", "component-model", "threads", "gc", "winch", # Enable some nice features of clap by default, but they come at a binary size # cost, so allow disabling this through disabling of our own `default` # feature. "clap/default", "clap/wrap_help", ] # ======================================== # Off-by-default features # # These features are off-by-default but may optionally be enabled. all-arch = ["wasmtime/all-arch"] winch = ["wasmtime/winch"] wmemcheck = ["wasmtime/wmemcheck"] memory-protection-keys = ["wasmtime-cli-flags/memory-protection-keys"] # This feature, when enabled, will statically compile out all logging statements # throughout Wasmtime and its dependencies. disable-logging = ["log/max_level_off", "tracing/max_level_off"] # ======================================== # On-by-default features # # These features are all included in the `default` set above and this is # the internal mapping for what they enable in Wasmtime itself. wasi-nn = ["dep:wasmtime-wasi-nn"] wasi-threads = ["dep:wasmtime-wasi-threads", "threads"] wasi-http = ["component-model", "dep:wasmtime-wasi-http", "dep:tokio", "dep:hyper"] wasi-runtime-config = ["dep:wasmtime-wasi-runtime-config"] wasi-keyvalue = ["dep:wasmtime-wasi-keyvalue"] pooling-allocator = ["wasmtime/pooling-allocator", "wasmtime-cli-flags/pooling-allocator"] component-model = [ "wasmtime/component-model", "wasmtime-wast?/component-model", "wasmtime-cli-flags/component-model" ] wat = ["dep:wat", "wasmtime/wat"] cache = ["dep:wasmtime-cache", "wasmtime-cli-flags/cache"] parallel-compilation = ["wasmtime-cli-flags/parallel-compilation"] logging = ["wasmtime-cli-flags/logging"] demangle = ["wasmtime/demangle"] cranelift = ["wasmtime-cli-flags/cranelift", "dep:wasmtime-cranelift"] profiling = ["wasmtime/profiling", "wasmtime/call-hook"] coredump = ["wasmtime-cli-flags/coredump"] addr2line = ["wasmtime/addr2line"] debug-builtins = ["wasmtime/debug-builtins"] threads = ["wasmtime-cli-flags/threads"] gc = ["wasmtime-cli-flags/gc"] # CLI subcommands for the `wasmtime` executable. See `wasmtime $cmd --help` # for more information on each subcommand. serve = [ "wasi-http", "component-model", "dep:http-body-util", "dep:http", "wasmtime-cli-flags/async", ] explore = ["dep:wasmtime-explorer", "dep:tempfile"] wast = ["dep:wasmtime-wast"] config = ["cache"] compile = ["cranelift"] run = [ "dep:wasmtime-wasi", "wasmtime/runtime", "dep:listenfd", "dep:wasi-common", "dep:tokio", "wasmtime-cli-flags/async", ] [[test]] name = "host_segfault" harness = false [[test]] name = "disas" harness = false [[test]] name = "wast" harness = false [[example]] name = "tokio" required-features = ["wasi-common/tokio"] [[bench]] name = "instantiation" harness = false [[bench]] name = "thread_eager_init" harness = false [[bench]] name = "trap" harness = false [[bench]] name = "call" harness = false [[bench]] name = "wasi" harness = false [profile.release.package.wasi-preview1-component-adapter] opt-level = 's' strip = 'debuginfo' [profile.dev.package.wasi-preview1-component-adapter] # Make dev look like a release build since this adapter module won't work with # a debug build that uses data segments and such. incremental = false opt-level = 's' # Omit assertions, which include failure messages which require string # initializers. debug-assertions = false # Omit integer overflow checks, which include failure messages which require # string initializers. overflow-checks = false # Same as `wasi-preview1-component-adapter` above [profile.dev.package.wit-bindgen] incremental = false debug-assertions = false overflow-checks = false opt-level = 's' [profile.fastest-runtime] inherits = "release" codegen-units = 1 lto = true