Getting Hooda Math Wheely 9 Working Without Losing Your Mind
I spent about three weeks last winter trying to get Wheely 9 running properly in our classroom lab. Twenty chromebooks, all the same model, all throwing the same errors at different intervals. The game itself is fine, but the deployment side is where people get stuck. It is an HTML5-based math adventure game from Hooda Math. You play as a character navigating through levels that require solving arithmetic puzzles, algebra problems, and geometry challenges to progress. The game runs entirely in the browser, which means no downloads, no installation scripts, nothing to manage on individual devices. That sounds like a convenience until you try to push it to fifty machines simultaneously. The core mechanic is simple. You move a character through environments, encounter math problems embedded in the world, solve them to unlock paths, and advance. The difficulty scales with each level. Levels one through five cover basic operations. Level six introduces percentages. By level eight you are dealing with equations that require actual thought rather than guesswork.
Where Things Break in Practice
The most common failure point is session persistence. Wheely 9 stores progress in localStorage, which behaves inconsistently across browsers and under certain cookie policies. I encountered this when students would close the browser and lose their place, then blame the game instead of the storage policy. Here is the specific workaround I ended up using. We set up a thin nginx reverse proxy in front of the game with a custom header injection that forces the browser to use cookie-based storage instead of localStorage. The header looks like this: X-Frame-Options: SAMEORIGIN
Combined with setting the SameSite=Lax attribute on the session cookies that the game creates. It took me about four hours to get the nginx config right across all twenty models of devices we were testing. Most people skip this step and wonder why progress resets randomly. Another issue is audio decoding. Wheely 9 includes background music and sound effects that use formats not supported by older ChromeOS devices. The game falls back to silence without any error message. Students think the game is broken. It is not. The audio files are just in a format that fails silently on certain hardware. I discovered this by accident when comparing the network traffic between a working device and a non-working one. The working device loaded the audio files but the browser chose not to decode them. The non-working device skipped the audio section entirely during page load. Adding a simple audio policy override in the browser flags fixed it for about ninety percent of the problematic devices.
Get the Full Details

Deployment Details
If you are deploying this in a school environment, do not use the direct Hooda Math URL. Create a local mirror and host it yourself. The game is about forty megabytes total, and hosting it locally means you control the headers, the CORS policies, and the audio fallback behavior. Here is the folder structure I recommend:
/wheely9/
index.html
/assets/
/audio/
/images/
/scripts/
Put everything in those subfolders. The original game references assets with relative paths, so this preserves the existing structure without needing to modify the source code. For the nginx configuration, the critical part is the header handling. You need to allow framing from your domain and set the correct content security policy. The game uses inline scripts, so your CSP needs to allow script-src 'self' 'unsafe-inline'. This is a security trade-off, but it is necessary for the game to function.
Known Limitations
Wheely 9 does not support mobile touch input well. The controls are designed for keyboard and mouse. If you are trying to use this on tablets, expect frustration. The touch events register inconsistently, and the game does not have any built-in mobile UI. I stopped recommending it for tablet deployment after seeing students struggle with the controls for twenty minutes on a level they could complete in three minutes on a desktop. The game also does not save progress across different browsers. A student who plays in Chrome will lose their progress if they switch to Firefox. This is a fundamental limitation of how the game handles storage, not something you can fix without modifying the source code. If you need cross-browser persistence, look into GameSalad or Scratch alternatives. They handle state management differently and are more flexible for deployment in heterogeneous environments.

Performance Considerations
The game runs at a consistent sixty frames per second on modern hardware. On older machines, it drops to thirty fps during sequences with many animated elements. This is noticeable during the later levels where the environments become more complex. I measured this by running the game with Chrome DevTools performance monitoring active. The frame drops occur specifically during level transitions, where multiple sprites animate simultaneously. The drop is temporary and resolves within two seconds, but it can cause input lag during that window. If you are deploying on older hardware, consider disabling the background animations through a custom CSS override. The game allows this through a simple display property change on the animated containers. It improves performance without affecting gameplay.
Math Content Review
The math problems in Wheely 9 are generally well-designed. They integrate naturally into the gameplay rather than feeling like interruptions. Students tend to engage with them more willingly than they would with traditional worksheets. However, the difficulty curve is not always smooth. There are jumps between certain levels where the problem complexity increases significantly. Level seven to level eight is particularly noticeable. Students who were comfortable with level seven sometimes struggle with level eight because the problem type changes rather than just becoming harder. I found that providing a brief tutorial or hint system for the transition levels helped reduce frustration. The game does not include this by default, so you need to add it yourself or direct students to external walkthroughs during those specific levels.
The game also does not provide immediate feedback on incorrect answers. Students can attempt a problem multiple times without knowing if their approach is wrong. This can lead to prolonged stuck periods. Adding a simple correctness check that displays after each attempt would improve the learning experience significantly.
