Our contribution to the emulation community 🕹️

As a member of the emulation community, our team would like to take the time to share more information about our work, our setup, as well as answer all key questions we have received so far.

At the heart of its mission, Piepacker aims at bringing live multiplayer, with video cameras, to the world of emulation, which makes it a very distinct project from other great technology such as RetroArch. While our free primary service includes pre-built licensed games, a subscription will unlock, among other extra features, the ability to drag and drop ROMs to our platform to then play them in multiplayer. To read and stream games on Piepacker, we use both open source code and proprietary code and do not use any non-commercial emulators such as SNES-9X for example. We have been using GPL licensed emulators compatible with libretro (you will find the full list of emulators used below).

While using GPL licensed code, our team of gaming veterans is directly contributing to the emulation community by sharing our code. You will find our contributions here. In the long run, our goal is to support our ecosystem even more, by maintaining the swanstation libretro or helping on fixing key bugs to open new doors in the emulation space. We also publish additions like multitap support, or software renderer upscaling in emulators that were lacking it.

You might be wondering how we are different from RetroArch. While both projects are multi-console platforms, RetroArch is an open source downloadable application which users need to install and configure themselves whereas Piepacker is a proprietary web application that is ready to use. Piepacker focuses on the online multiplayer and makes it as simple and instantaneous as possible. There’s no network configuration required. All it takes is to copy paste a link to invite your friends to play directly from their web browser. Furthermore, we integrated a video chat to talk and see the friends you are playing with and we have legally secured the rights to distribute all the games available on our platform.

The emulation on our platform is not based on RetroArch, but on the libretro API header*. Incidentally, RetroArch also uses it. Because this header only identifies a common interface for emulators (or cores in the libretro lingo) to follow, a number of emulation projects relies on it, such as Ludo, among others. We then use GPL licensed emulators compatible with libretro, such as Swanstation for the PS1 and Blastem for the Genesis.

In order to process rom files, we are using a hybrid system that runs locally when playing alone and on our servers when playing with other people online. We’ve been asked if we were using Parsec’s SDK to run the remote play. We do not: we have our own custom solution based on WebRTC.

We have designed our own cartridge reader, the Piereader, which is fundamentally different from what is available right now. Since game roms cannot be always legally duplicated or distributed to other people, the PieReader does not allow you to dump and save your game like most cartridge dumpers. It’s a read only process that works exclusively on our platform. The game is executed on a private instance owned by the user and only the video stream is shared with other players, not the game data itself.

We have focused on answering the most frequently asked questions we have had until now. We encourage you to join our Discord to discuss with us directly if you want to know more. We’re always happy to talk to other emulation lovers!

* libretro is under the MIT license.

List of emulators we currently use:

  • blastem (genesis and sms): GPL 3
  • mesens (snes): GPL 3
  • mesen (nes): GPL 3
  • fceumm (nes): GPL 2
  • mednafen (psx): GPL 2
  • swanstation (psx) : GPL 3
  • mame (arcade): GPL 2
  • mgba (gba) : mozilla public license 2.0
  • lutro (lua game engine): MIT

Originally published at http://piepacker.blog on April 9, 2021.

On a mission to create the best social gaming experience 🚀

On a mission to create the best social gaming experience 🚀