Inspiration
Retro games already have passionate communities on Reddit, but playing and sharing a moment usually means leaving the conversation, installing a separate frontend, or trusting a service with personal game files. EmuArcade started with a different question: what if a Reddit post could become the arcade, while the player's library remained private on their own device?
The project is inspired by the immediacy of classic multicarts, the portability of browser emulation, and Reddit communities where a short gameplay moment can start a much bigger conversation.
What it does
EmuArcade turns an interactive Reddit post into a self-contained, multi-system player for games.
Players select a local ROM and EmuArcade detects its title and likely system, chooses a compatible emulator core, and launches it in an expanded Devvit Web view. ROMs, BIOS files, libraries, save files, save states, settings, and custom touch layouts remain in browser storage on the player's device. EmuArcade does not ship copyrighted games or upload a player's private library to Reddit.
The player experience includes:
- Bundled support for NES, SNES, Game Boy, Game Boy Advance, Nintendo 64, Nintendo DS, PlayStation, PSP, Genesis, Atari, arcade, and other systems supported by the included cores
- Keyboard, physical gamepad, and customizable touch controls
- Responsive layouts for desktop, square posts, portrait phones, and an immersive rotated mobile play view
- Local save files and save states
- Per-game emulator, video, audio, rewind, and control settings
- Local video downloads with sound
- On-device GIF conversion for sharing selected gameplay moments as Reddit posts
The community layer is the hook. A player can turn a speedrun finish, unexpected glitch, difficult boss win, or funny failure into a native post for other redditors to watch, discuss, compare, and try to reproduce. The ROM stays private; only the moment the player deliberately chooses to share becomes a contribution.
Best Use of User Contributions
EmuArcade is designed around contributions that emerge naturally from play instead of asking users to stop playing and create separate content. Its clip workflow converts a private local session into a compact, Reddit-native artifact with one deliberate action.
Those clips give game communities fresh material for challenge threads, high-score runs, discoveries, troubleshooting, nostalgia, and friendly competition. The app therefore acts as both a player and a community publishing tool: every shared moment can become the beginning of a new discussion or challenge.
How we built it
EmuArcade is built with Devvit Web, React, TypeScript, Vite, Hono, and tRPC. EmulatorJS supplies the player framework, with Libretro WebAssembly cores packaged directly with the app so runtime scripts and emulator binaries do not depend on third-party CDNs.
Local libraries and emulator data use browser storage. Recording uses the browser MediaRecorder and canvas APIs; GIF sharing is encoded on-device with gifenc before Devvit's media APIs create the Reddit post. Server code is limited to Reddit integration and the explicit media-sharing action.
Challenges we ran into
Devvit's security model shaped nearly every technical decision. External script domains, blob-loaded scripts, and unsafe-eval behavior common in browser emulator distributions are blocked by the WebView Content Security Policy. We had to vendor the runtime, cores, localization files, workers, and assets, then adapt core loading so the complete emulator could run from the app package.
Mobile presented a second set of challenges. A playable layout has to work as a thin desktop feed post, a square mobile post, a portrait expanded view, and a landscape-style view inside a phone that may not grant normal fullscreen or orientation APIs. Touch controls also need to remain reachable without covering important gameplay.
Nintendo 64 emulation is computationally demanding in a mobile WebView. We included multiple compatible core choices and exposed performance settings so players can make an informed quality-versus-speed tradeoff for their device.
Accomplishments that we're proud of
- Running a broad, fully packaged emulator stack inside Devvit Web without external runtime domains
- Keeping private game files, BIOS files, saves, save states, and control layouts on the player's device
- Building one play surface that adapts from Reddit's feed to desktop and mobile play
- Making touch layouts customizable per console
- Giving the app a focused visual identity and a launcher that works inside Reddit's compact post formats
What's next for EmuArcade
Next steps include a community clip browser, recurring clip challenges, opt-in achievements, better per-device performance recommendations.
The long-term goal is simple: make every game community on Reddit one tap closer to playing, preserving, and sharing the moments that brought them together.
Built With
- devvit
- devvit-web
- emulatorjs
- gifenc
- hono
- indexeddb
- libretro
- mediarecorder
- react
- trpc
- typescript
- vite
- webassembly
Log in or sign up for Devpost to join the conversation.