EmuMon is a modern, cross-platform ROM emulation manager that simplifies discovering, downloading, and playing retro games. It provides a unified interface for managing emulators and ROMs across multiple gaming consoles, with support for popular ROM sources and automatic emulator setup.
- Multi-Console Support: Supports PSP, PS2, PS3, GBA, NDS, 3DS, Wii, and GameCube
- ROM Discovery: Browse and search ROMs from multiple sources (HexRom, RomsPedia)
- Automatic Downloads: High-speed parallel downloading with aria2c integration
- Emulator Management: Automatic emulator downloading and installation
- Local Library: Organize and launch your downloaded ROMs
- Cross-Platform: Available for Windows, macOS, and Linux
| Console | Emulator(s) | Supported Formats |
|---|---|---|
| PSP | PPSSPP | .iso, .cso |
| PS2 | PCSX2 | .iso, .cso |
| PS3 | RPCS3 | .iso |
| GBA | mGBA | .gba, .gbc, .gb, .ips |
| NDS | DeSmuME, melonDS | .nds |
| 3DS | Citra | .3ds, .cia |
| Wii/GameCube | Dolphin | .iso, .gcz, .wbfs, .wad, .gcm |
- HexRom: Large collection of ROMs with detailed metadata
- RomsPedia: Alternative ROM source with extensive catalog
- Search Functionality: Search across all sources simultaneously
- Node.js (v16 or higher)
- pnpm package manager
- Git
-
Clone the repository
git clone https://github.com/your-username/emumon.git cd emumon -
Install dependencies
pnpm install
-
Development mode
pnpm dev
-
Build for production
# For Windows pnpm build:win # For macOS pnpm build:mac # For Linux pnpm build:linux
- Electron - Cross-platform desktop application framework
- React 19 - Modern UI library with hooks
- TypeScript - Type-safe JavaScript
- Tailwind CSS - Utility-first CSS framework
- React Router - Client-side routing
- TanStack Query - Data fetching and caching
- Zustand - Lightweight state management
- Node.js - Runtime environment
- Electron Store - Persistent data storage
- aria2c - High-performance download manager
- Cheerio - Server-side DOM manipulation for web scraping
- Axios - HTTP client for API requests
- Vite - Fast build tool and dev server
- ESLint - Code linting
- Prettier - Code formatting
- electron-builder - Application packaging
- Library - View and launch your downloaded ROMs
- ROMs - Browse ROM sources (HexRom, RomsPedia)
- Emulators - Manage emulator installations
- Settings - Configure download paths and preferences
src/
โโโ main/ # Electron main process
โ โโโ download/ # ROM and emulator download logic
โ โโโ emulators/ # Emulator configuration and management
โ โโโ extensions/ # ROM source integrations
โ โ โโโ hexrom/ # HexRom API integration
โ โ โโโ romspedia/ # RomsPedia API integration
โ โโโ launch/ # ROM launching functionality
โ โโโ lib/aria2/ # Download manager
โ โโโ store/ # Data persistence
โโโ renderer/ # Frontend React application
โ โโโ src/
โ โโโ components/ # Reusable UI components
โ โโโ pages/ # Application pages
โ โโโ store/ # Frontend state management
โ โโโ types/ # TypeScript type definitions
โโโ preload/ # Electron preload scripts
- Launch EmuMon
- Go to Settings and configure your download path
- Visit the Emulators section to download required emulators
- Navigate to the ROMs section
- Choose a ROM source (HexRom or RomsPedia)
- Browse by console or use the search feature
- Click on a ROM to view details and download options
- Downloads will appear in the Settings section
- Once a ROM is downloaded, it appears in your Library
- Click on any ROM to launch it with the appropriate emulator
- The application automatically detects the correct emulator based on file type
- View installed emulators in the Emulators section
- Download new emulators as needed
- Each emulator is automatically configured for optimal performance
Emulators are automatically configured via src/main/emulators/emulators.json:
- Download URLs for latest versions
- Supported file extensions
- Launch parameters
New ROM sources can be added by creating extensions in src/main/extensions/:
- Console listing
- ROM browsing and searching
- Download URL extraction
- Metadata parsing
pnpm dev # Start development server
pnpm build # Build for production
pnpm lint # Run ESLint
pnpm format # Format code with Prettier
pnpm typecheck # TypeScript type checking- Create a new directory in
src/main/extensions/ - Implement the required functions:
getConsoles()- List available consolesgetRoms()- Get ROMs for a consolesearchRoms()- Search functionalitygetRomDetails()- Get detailed ROM informationgetDownloadUrls()- Extract download links
- Update
src/main/emulators/emulators.json - Add console mapping in
src/main/mappings/consoleMap.ts - Include emulator icon in
src/renderer/src/assets/emulators/
- IPC Communication: Main process communicates with renderer via Electron IPC
- Data Flow: React Query manages API calls to ROM sources
- Storage: Electron Store persists ROM library and emulator data
- Downloads: aria2c handles parallel downloading with progress tracking
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
- Follow TypeScript best practices
- Use ESLint and Prettier for code consistency
- Write meaningful commit messages
- Test your changes across different platforms
This project is licensed under the ISC License. See the LICENSE file for details.
- aria2 - For high-performance downloading
- Emulator Communities - For creating amazing emulators
- ROM Preservation Groups - For keeping gaming history alive
- Open Source Contributors - For the tools and libraries that make this possible
Downloads not starting:
- Check your internet connection
- Verify download path in Settings
- Ensure aria2c is properly installed
Emulator won't launch:
- Verify emulator is properly downloaded
- Check ROM file format compatibility
- Ensure ROM file isn't corrupted
ROMs not appearing in Library:
- Verify download completed successfully
- Check if ROM format is supported by emulator
- Refresh the Library page
For support and questions:
- Open an issue on GitHub
- Check the troubleshooting section
- Review existing issues for solutions
Made with โค๏ธ for the retro gaming community


