A downloadable tool for Windows, macOS, and Linux

ROMBundler is a way to release your homebrew retro game as an executable. With the help of this tool, you can release your homebrew ROM to itch.io, GOG, Steam, etc.

It is based on this example libretro frontend https://github.com/heuripedes/nanoarch

If you don't know what is a libretro frontend, you might have heard of RetroArch. Well ROMBundler is like RetroArch without user interface. It is compatible with the same emulator cores.

The main differences are that the frontend is controlled by an ini file instead of command line flags to make it easier to bundle ROMs. Also we use glad instead of glew, added openal for cross platform audio, and will add joypad support and maybe a few shaders.

Linux support is not yet ready as some dependencies are still dynamically linked. But Windows and OSX versions should be fine.


You don't need to compile rombundler if you just want to use it, you can get one of the binary releases here

Then modify the config.ini to fit your needs:

title = Shrine Maiden Shizuka Demo 2
core = ./blastem_libretro.dylib
rom = ./Shrine Maiden Shizuka Demo 2.md
swap_interval = 1
full_screen = false
hide_cursor = false
map_analog_to_dpad = true
window_width = 800
window_height = 600
aspect_ratio = 1.3333

You can download libretro cores from http://buildbot.libretro.com/nightly/ and place it in the same folder, as well as your ROM. (But make sure to comply to the core license).

For Windows, the core need to be a .DLL, for OSX it needs to be a .dylib, and for Linux a .so. ROMBundler releases are for 64bit systems only for now.

Place your ROM in the same folder. And set the ROM name in your config.ini.

ROMBundler will read the ini file, load the emulator and the ROM and the game will start.

You can then rename rombundler with the name of your game, change it's icon, and distribute this as a zip.

Emulator configuration

If you need special options for the emulator, you can set them by creating a options.ini file like this:

fceumm_sndvolume = 7
fceumm_palette = default
fceumm_ntsc_filter = composite 


In the config.ini, you can specify a single pass shader. For example:

shader = zfast-crt
filter = linear 

Default values are

shader = default
filter = nearest 

For now available shaders are:

  • default
  • zfast-crt
  • zfast-lcd

We recommand using the linear filter with the CRT and LCD shaders.


  • Static linking for Linux
  • Switch full screen / windowed
  • Provide an OSX .app
  • Fix aspect ratio
  • Multitap option

Known working cores

  • lutro_libretro
  • fceumm_libretro
  • blastem_libretro
  • snes9x_libretro
  • genesis_plus_gx_libretro
  • nes_libretro
  • mesen_libretro
  • mesen-s_libretro
  • dosbox_pure_libretro
  • mgba_libretro
  • gambatte_libretro
  • gearsystem_libretro
  • mednafen_psx_libretro
  • pcsx_rearmed_libretro
  • melonds_libretro

Not yet compatible:

  • some GL cores
  • md_libretro (input issues)
  • sameboy_libretro (audio issues)
  • mupen64plus_next (various issues)

PlatformsWindows, macOS, Linux
Rated 5.0 out of 5 stars
(3 total ratings)
Tagsbundle, Emulator, Homebrew, libretro, release, Retro, rom




Log in with itch.io to leave a comment.

This 'project' is a violation of all libretro and related software licensing including the non-commercial licenses of relevant emulator cores.  Under NO circumstances is this kind of thing permitted to be done with bundling the emulator with the ROM file (even a ROM you created) to be sold or distributed together.

Devs can either make a proper PC version or distribute ONLY the ROM file itself without the emulator.  That's on them.  They didn't make the emulator so they don't get to bundle it either.

(1 edit)

What are you saying? A lot of libretro cores are under licenses that allow this kind of use. I'm myself a member of libretro and I know OSS licenses quite well.

Explain me for example what par of the license of Blastem or Lutro would prevent me to distribute my Genesis Homebrew or Lutro game?

is it possible to ever seperate/integrate the core, rom and config files into the EXE somehow and have them play?

There must be some ways to bundle everything into a single executable, like love2d does for the assets.
But some emulators require the ROM file to be a real file on the filesystem, especially for CD based systems.
Designing a solution that would work for all cores and OSes would take a bit of time.


Do you still monitor this page? Trying to get a response cause I need help.


Trying to get this to play... but it's not working. Using mesen core and testing with Castlevania. I put both in the folder and configured the .ini file just like how the video shows. Click the .exe and nothing happens.

Can you show your ini files?

you see the photo?

yep and it looks fine, but try setting the window size and aspect ratio, just in case, like here https://github.com/kivutar/rombundler#usage

(1 edit)

Tried that... it's still not working.

Update: FCEUMM works... but not MESEN which I would prefer.

Can you look into this issue? I tried playing an SNES game with mesen-s and it works. NES games with mesen don't seem to work at all.

OK I will try mesen

I can't get the functions to work properly. Can I asign a particular monitor? (the retroarch monitor_index doesn't work) Can I use this with custom bezels to fill up the black bars?

Any chance of having a custom "config" UI, where you could slap a particular image and music and config basic options? or a pre-launch menu/image?


window_width =  window_height =  aspect_ratio = 

Hi, window_width and window_hight will affect only the windowed mode.
There is currently no way to set a particular monitor.
There might be emulator settings to remove overscan, depending on the emulator.
So far there is no plan to add a configuration UI for this, as every user will have different wish for the look end feel. You can however make your own that can edit the config.ini.