Hextorio Devlog 1 - Deploying WASM
11/26/2022
WASM is live!
A while back, I started working on a game. I don’t have much experience making video games. I’ve never used Unity or Godot. However, one day, I was drawn to learn the Rust Programming Language by creating games using Bevy - Introduction.
Eventually I made something, and I was pretty happy with my progress. I wanted to show the world! But I ran into an error trying to compile it into a WASM. I kept receiving an error that said a rustup update would fix all my problems— but it didn’t.
Unfortunately, I gave up on the project for months. When I revisited it, I found that which rustup and which rustc varied wildly. I then ran brew list and saw that I had installed rust with brew. So instead of rustc being managed by rustup, it was being managed by brew.
How it should be:
❯ which rustup
/Users/hkievet/.cargo/bin/rustup
❯ which rustc
/Users/hkievet/.cargo/bin/rustc
How it was:
❯ which rustup
/Users/hkievet/.cargo/bin/rustup
❯ which rustc
/opt/homebrew/bin/rustc Uninstalling rust with brew uninstall rust and freshly installing rustup fixed my issues. Problem solved!
I was able to compile my app by following the documentation at Deployment - The wasm-bindgen Guide and Browser (WebAssembly) - Unofficial Bevy Cheat Book.
Afterwards, I was left with a file structure that looks like
src/lib/components/game
├── hex-game.d.ts
├── hex-game.js
├── hex-game_bg.wasm
└── hex-game_bg.wasm.d.ts Step 1 complete: wasm file, check! But how to host online? I made a little component in svelte:
<script lang="ts">
import { onMount } from 'svelte';
import init from './hex-game.js';
onMount(async () => {
let wasm = await init();
});
</script> … and added my game’s static assets to src/static/assets in my svelte project.
You can view the final results of a hosted bevy-game-compiled-to-wasm here.
I’m so relieved that I got this to work! I’m excited to start working on this project again.