User:QuarkTheAwesome/Dev guide draft

From WiiUBrew
< User:QuarkTheAwesome
Revision as of 11:23, 6 January 2019 by QuarkTheAwesome (talk | contribs) (Get started with a rewrite; "Configuring Environment")
Jump to navigation Jump to search

This article will go over the primary ways of developing various types of homebrew on the Wii U.

Configuring environment

At this time, a linux-esque environment (not msys2) is required - though work into Windows support is ongoing. For now, Windows users can use WSL or a virtual machine. Your first step is to install devkitPro pacman, downloading the Linux or OSX versions as appropriate for your setup. Once installed, you can use one of dkp-pacman -S <package> or pacman -S <package> to install packages! Start off by installing devkitPPC, followed by devkit-env on Linux or Windows. If that worked without error, your next step is to install wiiu-fling using the instructions in that link. That will add some extra Wii U-related packages to pacman, including most things you'll need to develop homebrew!

Making HBL Apps

The Homebrew Launcher is an easy platform to target for development. The two below methods are useful for making console and GUI apps respectively. In particular, lib_easy is a good place to start. Apps compiled with this method are in the ELF format.

Using lib_easy

lib_easy by rw-r-r_0644 was designed to be a quick way to get familiar with programming on the Wii U. That link contains an example hello world project. After setting up your environment, you can compile the hello world project by cd-ing into the folder and running "make".

An example of a homebrew app that was made using lib_easy is UClick.

Using Dimok's libraries

Dimok's libraries provide assistance with interacting with various parts of the Wii U. For some projects that use OSScreen to interact with the see Pong, C@ve, Snake, or Space Game. (Specifically, you will want to look at this HBL pong port).

Dimok's libs also provide many GX2 wrappers that provide a template for creating Homebrew Launcher-style GUIs. Examples of projects that utilize this include Homebrew Launcher, CHIP-8_Emulator, and Homebrew App Store.

Making Native Apps

There's a work in progress Wii U Toolchain (also called "wut") that can be used to make native RPX apps. These would be able to be installed to the System if not for the heavy signature checking that the Wii U performs on the System menu. In the long run, these may be preferable to the HBL-style ELF launching system.

Wut is under active development. It provides instructions on how to get started in its readme along with a Hello World. There are a few apps out that make use of wut, including gx2texture2d and ports of Pong and Space Game. Although it is under development, it is still fairly featured. RPX files that are compiled with wut can also be played in decaf-emu.

Making Userland Apps

The userland environment does not require a kernel exploit to execute programs, but as a result is heavily limited. These apps hijack the browser, but don't go any further. libwiiu is a good build system to use to produce .bin files which can be converted into mp4 payloads. It has detailed compilation instructions and many examples in the readme and repository.

A lot of the earlier homebrew was initially made for this userland environment, although most of it has since been ported to HBL. Pong, C@ve, and Space Game are among those early apps.

It isn't really recommended to use userland while a kernel exploit environment is available. It is heavily restricted to ~20KB payload files, no access to global variables, and no access to GX2 (OSScreen only).


QuarkTheAwesome is working on a more in-depth guide to Wii U development, which is available here.

He has also produced an older, outdated development guide for the userspace environment here.


If you need help developing, here are a few IRC channels that may be able to provide direct assistance.

Don't be afraid to ask! :)