fake-08: a Pico-8 player for consoles that cannot run Pico-8
A Pico-8 player/emulator for console homebrew
At a glance
- What is it?
- fake-08 is a C++ reimplementation of the Pico-8 runtime that runs on the Nintendo Switch, the 3DS, the PS Vita, the Wii U and Miyoo handhelds, with a libretro core for RetroArch. It suits homebrew developers who want to share their Pico-8 games on devices the official runtime does not support.
- Who is it for?
- fake-08 is a good fit for a Pico-8 developer who wants their carts to run on handhelds and consoles that have no official Pico-8 build, and for someone who wants a single cart format across several devices.
- Can I use it commercially?
- Check first. The repository uses a licence we do not classify automatically, so read its LICENSE file before any commercial use.
- Is it still maintained?
- Yes. The repository last received commits 132 days ago.
- What is it written in?
- Mainly C++, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on October 23, 2026, and from our analysis. They are not legal advice.
Editorial analysis
An unofficial runtime with a deliberate scope
The framing at the top of the readme sets the expectations, and the disclaimer is short. The project is a Pico-8 player for homebrew consoles, and it is explicitly not related to or supported by Lexaloffle Software, the company that makes Pico-8. The project goals section states the scope rule plainly, which is the thing to read first. The goal of fake-08 is to make Pico-8 games playable on platforms that are not officially supported, and the maintainer will only be providing builds for platforms that will not run Pico-8 proper, with no Windows, Mac, Linux, Raspberry Pi or web builds. The stated focus is on improving compatibility and having fun, and the invitation to file issues comes with a note to be patient since it may not be worked on immediately. That is an unusual combination, a project that is deliberately not trying to replace the official runtime everywhere, which means the effort goes into the platforms that would otherwise have nothing. It also means the homebrew console user is the primary customer, and the release artefacts are shaped around that.
Which platforms get a release, and what the artefact is
The latest release includes builds for the Nintendo 3DS, the Nintendo Switch, the Sony PS Vita, the Nintendo Wii U, the Miyoo CFW for bittboy and similar consoles, and the Miyoo Mini, and the readme notes that build artefacts from the latest CI runs are also available in the Actions section for anyone feeling extra brave. The installation method depends on the console and the executable type. A console with a homebrew menu, meaning the Switch, the Wii U and the 3DS using the 3dsx format, takes the executable dropped into the directory with the other executables. A console with installable homebrew, meaning the 3DS with a cia or the PS Vita, needs the executable installed through VitaShell on the Vita or FBI on the 3DS. For the bittboy and similar devices, the instructions are to back up the pico8.elf file in the emus/pico8 directory and replace it with the one from the release, then put the cart files in the roms/pico-8 directory and launch through whichever front end you use. The Miyoo Mini is the awkward case, since the executable has to be called directly from the terminal emulator or a shortcut has to be created, and the readme admits the author is not sure exactly how that works and does not have a device to figure it out.
Cart files, the menu, and the button vocabulary
The runtime behaviour is straightforward once the cart is in place. Cart files go in the p8carts directory of the memory card, which is the SD card on the 3DS, the Switch and the Wii U, and the memory card at ux0:/ on the Vita, and both .p8 text file carts and .p8.png image file carts are supported. The application is launched through the homebrew menu or the normal system interface depending on how it was installed, and the left and right buttons cycle through the carts on the card, with the A button on Nintendo consoles or the X button on the Vita choosing one. The pause menu is opened with Start or the plus button, and it contains an exit to the menu option for leaving the running cart. The R button cycles between rendering sizes, and L and R pressed together exits the application, though the console's own operating system controls also work. On the bittboy, the menu button returns to the menu, and pressing start exits to the bios menu instead. The rendering size toggle is a small detail that matters more than it looks, because the screen resolutions of these devices vary widely and a single fixed size wastes most of a handheld screen.
The libretro core, and the save state limitation
The RetroArch integration is a separate and less mature path, and the documentation is candid about it. The libretro cores are still in early development but should be working, and installation can be tricky. The general procedure is to install the core through the Load Core, then Install or Restore a Core menu item, navigating to the core file location, and then drop the fake08_libretro.info file into the retroarch cores directory, a directory that may be hidden and whose location varies from platform to platform. Once that file is in place you can scan for Pico-8 carts using Scan Directory, and if that does not work there is a manual scan where you choose the directory, set the custom system name to Pico-8, set the default core to the one just installed, and set the file extensions to p8 png, which should add a playlist of the carts associated with the new core. The functional limitation is stated in the acknowledgements, where the reference to a working save state implementation notes that savestates are currently only available in the libretro cores. That is the reverse of what you might expect, since a native build would seem like the more capable option, but it reflects where the emulator work was actually done.
Building it means a toolchain per platform
The build system is a Makefile with a target per platform, and the toolchains are the real work. All platforms have automated builds set up through GitHub Actions using docker images, with the per-platform scripts in the .github/workflows directory, and the readme gives a command to run one locally with docker run, mounting the current directory into the container and executing the platform script. The volume argument mounts the output of pwd in the container, and the script invocation executes the build script for that platform, most of which just call make while a few run extra steps. Building outside a pre-setup container needs the toolchain for the platform installed. The console platforms need the appropriate toolchain from devkitPro, and the Switch and Wii U also need the platform specific SDL2 portlibs. The Vita needs the Vita SDK. Once the toolchains are in place, you call make followed by the platform name, and the Makefile exposes targets for 3ds, switch, wiiu and vita, plus desktop variants for the SDL2 and SDL 1.2 backends, and make alone builds everything, with make clean removing the files for all platforms. The build was tested on Windows using devkitPro's MSYS2 and on Ubuntu through WSL and standalone. Two more platforms need their own toolchain construction, with the bittboy requiring you to build the toolchain from the bittboy buildroot repository and copy the host output to a fixed path, and the Miyoo Mini using a third party Union Miyoo Mini toolchain.
Where the implementation actually comes from
The acknowledgements section is unusually informative and worth reading before you judge the code, because fake-08 is a reimplementation that stands on other reimplementations. The audio, tline, emoji conversion and newer png decompression implementations were ported from zepto8, which the author calls probably the best Pico-8 emulator, and a slightly modified z8lua is used for Pico-8 specific features. The noise synthesis was ported from PicoLove, which was also the basis for the author's previous project, PicoLovePotion, and where he first learned the basics of Pico-8's API. The sprite rendering and cart parsing were originally based on tac08's implementations. The runtime for PicoLovePotion was LovePotion, an implementation of LÖVE2D for 3DS and Switch, and a modified version of its static logger is used. The acknowledgements also thank Zep and Lexaloffle software for making Pico-8 with a note to buy a copy, plus the Nintendo and Vita homebrew communities. So the project is a careful composition of existing work rather than a from-scratch interpreter, which is why it covers a lot of behaviour in a relatively small codebase, and also why the licence situation is a question worth asking before you redistribute a build.
Editorial conclusion
fake-08 is a good fit for a Pico-8 developer who wants their carts to run on handhelds and consoles that have no official Pico-8 build, and for someone who wants a single cart format across several devices. It is the wrong tool if you own a platform Pico-8 itself runs on, since the maintainer is explicit that builds are only provided for platforms that will not run Pico-8 proper, and it is the wrong tool if you need save states outside RetroArch, since the documentation says those are currently only available in the libretro cores. It is also the wrong tool if you need a maintained project, since the last tagged release is v0.0.2.20 from 2023 while the last push is more recent, which suggests work without a release. Before building it, expect to install a per-platform toolchain, since the Switch and Wii U need devkitPro with the SDL2 portlibs and the Vita needs its own SDK. The licence is a custom one GitHub cannot classify, and the last push was on 2026-06-13.
Frequently asked questions
What is fake-08 and which platforms does it target?
It is a Pico-8 player for homebrew consoles, not related to or supported by Lexaloffle Software. The latest release includes builds for the Nintendo 3DS, the Nintendo Switch, the Sony PS Vita, the Nintendo Wii U, the Miyoo CFW for bittboy and similar consoles, and the Miyoo Mini, and the maintainer only provides builds for platforms that will not run Pico-8 proper.
How do I install and run fake-08 on a console?
For a console with a homebrew menu such as the Switch, the Wii U or the 3DS with a 3dsx, place the executable in the directory with the other executables, and for installable homebrew on the 3DS with a cia or the PS Vita, install it with FBI or VitaShell. Cart files go in the p8carts directory on the memory card, and both .p8 and .p8.png carts are supported.
Can I use fake-08 with RetroArch?
There is a libretro core, described as still in early development but working, and installation can be tricky. You install the core through the Load Core then Install or Restore a Core menu, drop the fake08_libretro.info file into the retroarch cores directory, then scan the directory for carts or do a manual scan with the system name set to Pico-8 and the file extensions set to p8 png.
What do I need to build fake-08 myself?
Each platform needs its own toolchain. The console platforms need devkitPro, and the Switch and Wii U also need the platform specific SDL2 portlibs, while the Vita needs the Vita SDK. The bittboy needs the toolchain built from the bittboy buildroot repository and copied to a fixed path, and the Miyoo Mini uses a third party Union toolchain. The Makefile has a target per platform and make builds them all.
Which existing Pico-8 emulators is fake-08 based on?
The audio, tline, emoji conversion and newer png decompression implementations were ported from zepto8, and a modified z8lua provides Pico-8 specific features. The noise synthesis came from PicoLove, the sprite rendering and cart parsing were originally based on tac08, and the runtime for the author's previous project came from LovePotion, an implementation of Love2d for 3DS and Switch.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/jtothebell-fake-08)Was this useful?