Vita homebrew are written with the unoffical SDK, which is a modified ARM EABI toolchain. You get access to all the same public APIs found in the official SDK (which is available only to Sony licensed developers) as well as many private APIs which allows, for example:
You can build the toolchain using vdpm. This script lets you easily set up the toolchain from source and also install some common dependencies such as libpng/libjpeg/vita2dlib/etc. Follow the directions from there.
/usr/local/vitasdkfor both Linux and OSX
pacman -S make) in order to use Makefiles.
$VITASDKpath variable to point to where the toolchain is installed
export VITASDK=/path/to/toolchainto your Bash profile.
You can find various sample code here. Build them and play around with the code to familiarize yourself with the environment. You can also look at the showcase to see some more advanced code. Unfortunately, there currently does not exist comprehensive documentation for the unoffical SDK. If you have the time, please help us with that!
You should look at the makefiles for the sample code, but here’s a breakdown:
arm-vita-eabi-gcc -c -o file.obj file.c
.ofiles into an
.elffile, using -Wl,-q option:
arm-vita-eabi-gcc -Wl,-q -o homebrew.elf file1.o file2.o file3.o
.velffile out of the
vita-elf-create homebrew.elf homebrew.velf
eboot.binfile out of the
vita-make-fself homebrew.velf eboot.bin
In order to use functions from the Vita’s runtime library (beyond the C/C++ standard libraries and
then in addition to including the required headers you also need to
statically link against the corresponding modules’ stub libraries. In
some cases, it’s also necessary to load the sysmodule and/or call the
library’s initialisation function before using any of its other
For instance, to use the
sceNetConnect function, you need to follow the following process:
sceNet, so the corresponding linker option would be
LIBSline (though of course the net/http sample already links against this particular library)
if(sceSysmoduleIsLoaded(SCE_SYSMODULE_NET) != SCE_SYSMODULE_LOADED) sceSysmoduleLoadModule(SCE_SYSMODULE_NET)
Homebrew installer uses a
.vpk format which is just a ZIP file, start from this template (try installing it from the shell)
eboot.bin with your
* you can also add
and stuff like icon/background/etc that will be displayed in LiveArea,
check out how it’s done in molecularShell (launch it and go to
* make sure to run pngquant on all your png images
* to make
vita-mksfoex -s TITLE_ID=XXXX00001 "homebrew name" output/param.sfo
When developing homebrew instead of rebuilding the vpk and reinstalling it on every change, you can upload your new
ux0:app/TITLE_ID/eboot.bin over ftp
NB: all files you place to
.vpk will be available as read-only inside
app0:. For example, you can add
vpk/something.txt and later in your app read
app0:something.txt. In the same way, you can read
The development community is still in its infancy. Do not be scared at all the new tools and terms. We are actively developing easier tools and templates to do the work, so the process will only be easier in the future. If you run into any issues, please check out the support options below.
You can request to add your homebrew to the showcase.
xis a unique id which you should choose as the next available number and
nameis a short-name for your homebrew.
_homebrew/x-name.mdappropriately. Look at one of the other entries as a template. The fields should be self explanatory.
nameshould be the same as above. For the best results, make sure your screenshot is 240x136.
Running into SDK related issues? Need help setting up the toolchain? Want advice on how to do something with vitasdk? You can find the community of developers on FreeNode IRC at #vitasdk. Please only join for development related support! General support can be found at #henkaku.