First look: wasmCloud and Cosmonic
Here's a first look at the developer preview of Cosmonic—a WebAssembly PaaS with its own graphical cloud user interface, robust networking, and CLI.
- What is wasm?
- What is wasmCloud?
- What is Cosmonic?
- Installing and testing wasmCloud
- Installing and testing Cosmonic
- Conclusion
Installing and testing Cosmonic
I installed the Cosmonic CLI from the Quickstart page and asked it to tell me about itself:
martinheller@Martins-M1-MBP ~ % cosmo --help
⣀⣴⣶⣶⣦⣀
⢀⣠⣴⣾⣿⣿⣿⣿⣿⣿⣷⣦⣄⡀
⣀⣤⣶⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣶⣤⣀
⢀⣴⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⠋⠹⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣦⡀
⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠏ ⢻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷
⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠁ ⠙⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⡿⠛⠁ ⠈⠛⠛⠿⠿⠿⣿⣿⡿
⣿⣿⣿⣿⣏
⣿⣿⣿⣿⣿⣿⣷⣦⣀ ⣀⣤⣶⣶⣾⣿⣿⣿⣷
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⡄ ⣴⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿
⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣆ ⣼⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿
⠈⠛⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣄⣰⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠛⠁
⠈⠛⠻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠿⠛⠁
⠙⠻⢿⣿⣿⣿⣿⣿⣿⡿⠛⠋
⠈⠛⠿⠿⠛⠁
C O S M O N I C
Usage: cosmo [OPTIONS] <COMMAND>
Commands:
build Build (and sign) an actor, provider, or interface
down Stop the wasmCloud host and NATS leaf launched by `up`
launch Launch an actor on a local wasmCloud host
login Securely download credentials to authenticate this machine with Cosmonic infrastructure
new Create a new project from template
up Start a NATS leaf and wasmCloud host connected to Cosmonic infrastructure, forming a super constellation
tutorial Run through the tutorial flow
whoami Check connectivity to Cosmonic and query device identity information
help Print this message or the help of the given subcommand(s)
Options:
-o, --output <OUTPUT> Specify output format (text or json) [default: text]
-h, --help Print help
-V, --version Print version
Then, I went through the online interactive drag-and-drop tutorial to create an echo application, resulting in this diagram:
Figure 2. Cosmonic Logic view after going through the online tutorial. The reversed arrow indicates that the wormhole is connected for ingress into the echo application.
I also ran the local Quickstart hello
tutorial:
martinheller@Martins-M1-MBP ~ % cosmo tutorial hello
⣀⣴⣶⣶⣦⣀
⢀⣠⣴⣾⣿⣿⣿⣿⣿⣿⣷⣦⣄⡀
⣀⣤⣶⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣶⣤⣀
⢀⣴⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⠋⠹⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣦⡀
⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠏ ⢻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷
⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠁ ⠙⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⡿⠛⠁ ⠈⠛⠛⠿⠿⠿⣿⣿⡿
⣿⣿⣿⣿⣏
⣿⣿⣿⣿⣿⣿⣷⣦⣀ ⣀⣤⣶⣶⣾⣿⣿⣿⣷
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⡄ ⣴⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿
⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣆ ⣼⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿
⠈⠛⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣄⣰⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠛⠁
⠈⠛⠻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠿⠛⠁
⠙⠻⢿⣿⣿⣿⣿⣿⣿⡿⠛⠋
⠈⠛⠿⠿⠛⠁
C O S M O N I C
Welcome to cosmo!
✅ You're already authenticated!
⚙️ It looks like you don't have a wasmCloud host running locally. Launching one with:
`cosmo up`
>>> ⠀⢀
Ok to download NATS and wasmCloud to /Users/martinheller/.cosmo ?: y
🟢 A wasmCloud host connected to your constellation has been started!
To stop the host, run:
'cosmo down'
>>> ⡋⢀
To start the tutorial, we'll generate a new project with `cosmo new`. Proceed?: y
🌐 Next we'll download code for your hello world actor to the hello/ directory...
>>> ⢋⠁ Cloning into '.'...
>>> ⠈⢙ remote: Enumerating objects: 86, done.
remote: Counting objects: 100% (86/86), done.
remote: Compressing objects: 100% (56/56), done.
>>> ⠈⡙
>>> ⠀⢙
>>> ⠀⡙ remote: Total 86 (delta 23), reused 76 (delta 22), pack-reused 0
Receiving objects: 100% (86/86), 312.66 KiB | 1.02 MiB/s, done.
Resolving deltas: 100% (23/23), done.
>>> ⠀⠩ Already on 'main'
Your branch is up to date with 'origin/main'.
🔧 Using template subfolder `hello-world/rust`...
🔧 Generating template ...
[ 1/15] Done: .cargo/config.toml
[ 7/15] Done: .gitignore
✨ Done! New project created /Users/martinheller/hello
>>> ⠀⠠ No keypair found in "/Users/martinheller/.wash/keys/martinheller_account.nk".
We will generate one for you and place it there.
If you'd like to use alternative keys, you can supply them as a flag.
No keypair found in "/Users/martinheller/.wash/keys/hello_module.nk".
We will generate one for you and place it there.
If you'd like to use alternative keys, you can supply them as a flag.
>>> ⠀⢀
Now, we'll launch your hello actor and connect it to its capabilities. Proceed?: y
🚀 Launching your actor with:
cosmo launch -p hello
🚀 Actor launched!
✅ You already have a Cosmonic-managed host running!
🔗 Launching capability providers and linking them to your actor...
In the future, you can start providers from the UI at https://app.cosmonic.com/constellations/logic
✅ You're already running a required capability provider: HTTP Server
🌌 Creating a wormhole connected to your actor...
In the future, you can create wormholes from the UI at https://app.cosmonic.com/constellations/logic
👇 Here's what we did:
⭐️ We started a wasmCloud host on your machine, connected to your constellation
🚀 We launched the hello world actor on your local wasmCloud host
⚙️ We started a managed host on the Cosmonic platform in your constellation
We started an HTTP server capability provider on this host
🔗 We linked the actor on your local host to the provider running on your Cosmonic-managed host
🌌 We created a wormhole associated with this actor, allowing you to access your hello world app from the internet
Feel free to browse the code placed in the `hello/` directory.
If you're interested in how to deploy custom code to Cosmonic, check out our docs at:
https://cosmonic.com/docs/user_guide/deploying-your-application
If you want to go through this tutorial again in the future, simply run:
cosmo tutorial hello
🎉 That's it! Access your actor securely through a wormhole now:
curl https://nameless-pine-8370.cosmonic.app
martinheller@Martins-M1-MBP ~ % curl https://nameless-pine-8370.cosmonic.app
Hello, World!%
At this point, both my online and offline tutorials appeared in my Cosmonic constellation:
Figure 3. Cosmonic Logic view after completing both the online Echo tutorial and the offline Hello World tutorial. The two applications share a single HTTP-Wormhole provider but have separate URLs.
Figure 4. Cosmonic Infrastructure view after completing both the online Echo tutorial and the offline Hello World tutorial.
Running cosmo down
stops the local host and NATS server from cosmo tutorial hello
, but doesn’t affect the online tutorial result. The code generated by the tutorial is remarkably simple, given that it’s creating a web application with a wormhole:
Figure 5. Rust source for Hello actor generated by cosmo tutorial hello
, displayed in Visual Studio Code. Note that the actual implementation only amounts to one to four lines of Rust code, depending on how you count.
Conclusion
We could go on and explore Cosmonic's pre-built capabilities and examples, wasmCloud examples, and even build a complete wasmCloud/Cosmonic application.
At this point, you should have a reasonably good feeling for what is possible with this technology. Given that wasmCloud is free and open source, and that Cosmonic’s developer preview is also currently free, I encourage you to explore those possibilities and see what you come up with.
Copyright © 2023 IDG Communications, Inc.