wash dev
wash dev
is a subcommand that makes it easy to iteratively develop wasmCloud projects.
Thanks to the unique features of WebAssembly, WIT, and wasmCloud wash dev
enables quick development feedback loops by:
- Building your project
- Starting a local wasmCloud host
- Resolving and running local versions of dependencies like providers where possible
- Deploying your application
- Reloading (and redeploying) your application on local code changes.
Check out our Blog Post on wash dev
wash dev
Quickstart
This tutorial assumes you already have wash
installed. If you don't, refer to the installation instructions first.
Here's a quick guide to getting started with wasmCloud and wash dev
.
First, run wash new
to scaffold a new project:
wash new component wdev
After selecting what kind of project you'd like to build, you should see output like the following:
➜ wash new component wdev
✔ Select a project template: · hello-world-rust: a hello-world component (in Rust) that responds over an HTTP connection
🔧 Cloning template from repo wasmCloud/wasmCloud subfolder examples/rust/components/http-hello-world...
🔧 Using template subfolder examples/rust/components/http-hello-world...
🔧 Generating template...
✨ Done! New project created /tmp/wdev
Project generated and is located at: /tmp/wdev
Next, change into the directory that was created:
cd wdev
You should immediately be able to run wash dev
and build the project:
wash dev
You should see output similar to the following:
ℹ️ Resolved wash session ID [ATYO9I]
🚧 Starting a new host...
👀 Found nats-server version on the disk: nats-server: v2.10.20
🎣 Downloading new nats-server from https://github.com/nats-io/nats-server/releases/download/v2.10.26/nats-server-v2.10.26-linux-amd64.tar.gz
🎯 Saved nats-server to /home/user/.wash/downloads/nats-server
ℹ️ NATS server successfully started, using config @ [/home/user/.wash/downloads/nats.conf]
ℹ️ NATS server logs written to [/home/user/.wash/dev/ATYO9I/nats.log]
👀 Found wadm version on the disk: wadm 0.20.3
🎣 Downloading new wadm from https://github.com/wasmcloud/wadm/releases/download/v0.21.0/wadm-v0.21.0-linux-amd64.tar.gz
🎯 Saved wadm to /home/user/.wash/downloads/wadm
✅ Successfully started host, logs writing to /home/user/.wash/dev/ATYO9I/wasmcloud.log
>>> ⠍⠀ Building project... Compiling proc-macro2 v1.0.93
# .... build logs truncated ...
Finished `release` profile [optimized] target(s) in 5.74s
✅ Successfully built project at [/tmp/wdev/build/http_hello_world_s.wasm]
ℹ️ Detected component dependencies: {"http-server"}
🔁 Reloading component [ATYO9I-http-hello-world]...
🔁 Deployed updated manifest for application [dev-atyo9i-http-hello-world]
✨ HTTP Server: Access your application at http://127.0.0.1:8000
👀 Watching for file changes (press Ctrl+c to stop)...
wash dev
won't return, but if you're working on an example like a HTTP server, it will tell you where you can access the running application (in this case, http://127.0.0.1:8000
, AKA localhost:8000
).
wash dev
did the work of starting wasmCloud, a HTTP provider, your component, and hooking all of the pieces up so you could simply curl localhost:8000
:
$ curl localhost:8000
Hello from Rust!
Configuring wash
(and wash dev
)
Configuration for wash
is stored in wasmcloud.toml
. While template projects contain basic options, there are many more to consider.
See the wasmcloud.toml
config reference for more information.