I'm excited to introduce Telemelt 2, a networked multi-system browser emulator designed to recreate the experience of playing console games with a single controller in a room full of friends.
Telemelt 2 is an evolution of the original Telemelt by Andy Reitano of Batlab Electronics. When he told me he'd bootstrapped a ground-up rewrite and asked if I wanted to help, I jumped on it immediately, because Telemelt v1 is one of the coolest things I've ever seen in my entire life.
What is this thing?
Telemelt is a multi-system emulator that runs in the browser (it can play most retro consoles up to the PS1) except that it's uniquely designed around the concept of sharing a single virtual controller. One player hosts a room and shares an invite link with their friends. Everyone else connects, loads up the same game, and enjoys a shared experience by passing the controller around.
Example of a three player session
This is a little bit different from most networked emulators, which are specifically built for 2+ player co-op or player-vs-player games (those projects are great and we really appreciate and love using tools like Fightcade). Telemelt was specifically inspired by fond memories of playing single player games while passing around a controller with your buddies. We wanted to enable experiences like:
- a book club-like experience for long running single player games like RPGs
- passing the controller around between action game levels
- teaching speedrun tech on-the-fly
Or any situation focused on collaboration with only one player holding the controller at a time, really. One group regularly streamed the original Telemelt to collaborate on chiptune tracks in Little Sound Dj.
Telemelt was written with an emphasis on performance. Every player runs the emulator locally while peer-to-peer networking keeps state synced between players. The controller can be passed seamlessly to another player, and the controller player is never subject to any network latency (spectators will generally notice a very short delay).
Design focuses
Our biggest design focuses when creating Telemelt were the controller player's experience, general ease of use, and how to best approach a single-controller distributed session.
Take for example save management. How do you manage saves when people are dropping in and out of sessions? What if the one player who remembered to save the game can't make it next time? How do you protect saves in browser storage from the all-powerful Clear History and Settings button? We decided early on that players would have to manually export saves if only to protect them from volatile browser storage, but manually distributing saves gets tiresome.
Then we remembered that like most video game enjoyers in 2025, our sessions were coordinated in Discord, and we could lean into that.
Exporting a MELT save to Discord
Paste in one or more Discord webhooks and you can announce new rooms with the invite link, post screenshots, and export saves at the press of a button directly to channels of your choosing. Discord save export made picking up a session super simple: all you need to do is grab the latest save from the dedicated channel. The integrations with Discord streamlined the experience immensely.
Worth mentioning! Discord isn't required at all. Players who don't want to use it can just as easily export saves to their local disk and distribute them as they see fit. The Discord integrations are there for anyone who wants to use it as their dedicated session hub.
The Discord integrations are an example of Telemelt's general design ethos and focus on social play:
- The HUD shows the controller player's frame-by-frame inputs on console-specific overlays, but you can hide them if you want more dedicated screen space.
- Support for reactions like clapping, drum rolls, and others. Reactions both play a sound effect and display on the player card.
- Exported MELT saves are wrapped save states with enough metadata to ensure they're only opened with the correct game. Players can end a session at any time without having to find a save point and then resume from the exact frame they left off.
- Despite its focus on using save states for saves, emulator SRAM can still be imported or exported.
Everywhere that we could think to pick sensible defaults or find of a way to make functionality point-and-click, we did. Telemelt is not a replacement for emulators with many fine-grained controls, but rather the result of a lot of time spent building the emulator that we wanted to use with friends.
What's next?
We've put a lot of work into this thing, and now we're excited to see how people use it and what they think of it. So what's next is that we're going to play a bunch of games in Telemelt with our friends.
Once we've had a chance to smooth out any release issues, I plan to make some posts about how we implemented certain features, solved specific challenges, and some of the technical underpinnings that power this application, especially when there wasn't an out-of-box solution available in Rust compiled to WASM. But otherwise, we hope you give Telemelt a try and that you have as much fun using it as we had making it.
