Sphaira - hbmenu replacement

Sphaira is hbmenu alternative. It currently has feature parity with hbmenu (that is, launches homebrew + nxlink) whilst adding quite a few features.



HomeBrew​

The main menu tab, it lists all the .nro found in "/switch/". From there, you can launch, sort, delete, create a forwarder etc.
You can navigate to the other menu tabs using "L" and "R", explained below.

FileBrowser​

By pressing "L" from the main menu, you can access the file browser. You can Cut, Copy, Delete, Rename etc.
You can select multiple files / folders by using the "ZR" button and then se the above functions of that group of files.

Forwaders can be created if the selected file has a file assoc, see below for more details.

Appstore​

sphaira features an appstore, using the api from https://hb-app.store/switch. It can be navigated to by pressing "R" from the main menu.
The appstore is feature parity with hb-appstore app, as well as installing the manifests in the same folder as hb-appstore, in order to not break compatibility between the two.

Themes​

sphaira comes with 3 themes, abyss (default), black and white (unfinished).
custom themes can be added to "/config/sphaira/themes/", here is the abyss theme for example:
INI:
[meta]
name=Abyss
author=TotalJustice
version=1.0.0
; unused currently
preview=romfs:/theme/preview.jpg

[theme]
background=0x0f111aff
grid=0x0f115c30
selected=0x0f115cff
selected_overlay=0x529cffff
text=0xffbc41ff
text_selected=0x529cffff

icon_audio=romfs:/theme/icon_audio.png
icon_video=romfs:/theme/icon_video.png
icon_image=romfs:/theme/icon_image.png
icon_file=romfs:/theme/icon_file.png
icon_folder=romfs:/theme/icon_folder.png
icon_zip=romfs:/theme/icon_zip.png
icon_nro=romfs:/theme/icon_nro.png

music can be added to a theme, as long as the music is converted to bfstm format. simply add an entry like so: `music=/config/sphaira/themes/music/bgmusic_pcm.bfstm`

Forwaders​

sphaira can create and install forwarders for any .nro. It will use the icon of the .nro and the name + author.

It can also install forwarders for files that have a file assoc. For example, if mgba is installed and a game is located in "/roms/gba/game.gba", then the "Install Fowarder" option will appear. In this case, it will try to scrape the icon of the game, otherwise it will use the icon of the .nro and the name will be a combination of the .nro name and game name.

File Assoc​

file assoc is a way to associate file extensions (.gba, .nro etc) with a homebrew app. For example, clicking on rom.gbc that has an file assoc will bring up a list of all the applications that can handle it.
This can be used for emulators, media players, text editors etc...

custom file assoc should go in the folder "/config/sphaira/assoc/"

the format is *very* simple, here is an example of vgedit.ini
INI:
[config]
supported_extensions=txt|json|cfg|ini|md|log

and again for mgba.ini
INI:
[config]
supported_extensions=gba|gbc|sgb|gb
database=Nintendo - Game Boy|Nintendo - Game Boy Color|Nintendo - Game Boy Advance

"path": (optional) fullpath to the .nro. if not specified, it uses the name of the ini, ie, mgba.ini will use mgba.nro.
"supported_extensions": list of extensions the application supports, separated by |. plea
"database": (optional) name of the rom database to use defined by the left-side of this table <https://gist.github.com/ITotalJustice/d5e82ba601ca13b638af9b00e33a4a86>..

All of the retroarch cores has file assoc built into sphaira, so if you download retroarch using the appstore, and then navigate to "/roms/gbc/game.gbc", gambatte and mgba will be available to be selected.

Games can be kept in .zip format, sphaira will peek into the .zip and find the real extension and use that for displaying icons / file assoc.

Roms​

roms should be placed in "/roms/system_name/" where system name is defined by this table right-side entries <https://gist.github.com/ITotalJustice/d5e82ba601ca13b638af9b00e33a4a86>.
this is the same layout emulation station uses. the reason for forcing roms to be in specific folders is due to many roms for different systems using the same file extension, ie, .bin / .cue or .chd.

roms placed in subfolders are allowed, for example "/roms/psx/scooby-doo/scooby-doo.bin" is valid.

Themezer​

themes can be browsed and download by going Menu Options -> Misc -> Themezer. Themes will be downloaded to "/themes/sphaira/Theme Name - By Author/".
To install themes, launch "NXThemes Installer" and browse to the selected folder listed above.

Nxlink​

For homebrew developers, nxlink is built into sphaira. You do not have to press any special buttons, just do "nxlink *.nro" and send your nro like normal, console logging works to be using "nxlink -s *.nro"
By default, this is enabled in the background, to disable it: Menu Options -> Network -> Nxlink.



That's most of the features spahira has. If you enjoy it so much that you'd rather it be launched over regular hbmenu, you can enable the option in "Menu Options -> Replace hbmenu on exit" where it will do just that. It will create a backup of hbmenu in "/switch/hbmenu.nro" should you wish to swap back.
homebrew.jpg

games.jpg

appstore.jpg

appstore_page.jpg

file_browser.jpg

themezer.jpg

launch_options.jpg


Releases: https://github.com/ITotalJustice/sphaira/releases/
Bleeding-edge Releases: https://github.com/ITotalJustice/sphaira/actions
Source Code: https://github.com/ITotalJustice/sphaira
 
Last edited by Deleted member 413168,
How does the title installation via USB work? I connect the switch to the PC with the USB install option and nothing happens.
It seems Windows doesn't recognize driver correctly. I look into Device Manager and see "Nintendo Switch" on Other devices section which is need a driver libusbK in order to work.
 
Idk why screenshots wouldn't work in sphaira but do in hbmenu. Neither of them do anything to enable/disable them.

Nvm, I was wrong about this. Turns out you have to explicitly enable permissions in applet mode. I never knew this!
In forwarder creators there are checking boxes for allowing screenshot and videorecording when launching the NRO with the forwarder.
 
  • Like
Reactions: impeeza
Version 0.8.0 is out!
  • Added support for stream installs.
  • Added ftp install menu.
  • Added GameCard install menu.
  • Fix screenshot permission not being set in applet mode (you can now take screenshots in applet mode).
  • Add transfer speed and time remaining to the progress bar.
  • Added forwarder support for mame and neogeo.
2025042718261800-CA43EC7375AB1E2BC8AFC050C0941918.jpg
2025042721125200-CA43EC7375AB1E2BC8AFC050C0941918.jpg
 
Version 0.8.0 is out!
  • Added support for stream installs.
  • Added ftp install menu.
  • Added GameCard install menu.
  • Fix screenshot permission not being set in applet mode (you can now take screenshots in applet mode).
  • Add transfer speed and time remaining to the progress bar.
  • Added forwarder support for mame and neogeo.
View attachment 501094View attachment 501095
The usb install option still doesn't work, here it shows waiting for connection on Windows 11
 

Attachments

  • usb install.jpg
    usb install.jpg
    13.1 KB · Views: 40
The usb install option still doesn't work, here it shows waiting for connection on Windows 11
You need to use the python script in the tools folder.
Stream installs? Spharia can replace a lot now
Stream installs are transfers that don't offer random (seek) access. This was needed in order to ftp installs, and (in the far future) mtp installs.
 
It's incredible to see Sphaira development, I'm here since the first versions and the game install is incredible. I wonder if we can have a title update and dlc check?
 
  • Love
  • Like
Reactions: Tyvar1 and impeeza
Version 0.8.1 is out!

  • fix appstore author search being case sensitive.
  • gc_menu now waits on the gamecard inserted event, rather than polling. slightly reduces core3 usage.
  • fix control nca (name and icon) mounting due to uses the app_id rather than the program id when mounting.
  • stream installs can now parse the control nca, allowing for artwork and application name to be parsed during installs.
  • improved "skip_if_already_installed" option by checking each nca existence, rather than checking if all exist in order to skip.
  • re-write usb protocol to match Tinfoils. this allows applications such as ns-usbloader and fluffy to be used with sphaira.
  • add "boost mode" option for installing. this increases the CPU clock and reduces the GPU clock, can improve transfer speed.
  • removed the irs menu. no one used it.
  • removed the web menu. the switch web browser sucks, and no one used it.
  • add option in the theme menu to download the default background music, i highly recommend it.
  • added shortcut for the "misc" menu, triggered by pressing "-" (minus), this allows for faster navigation between menus.
  • small optimisations throughout the code base.
The main changes i'd imagine most users are interested in is the USB protocol change. This change allows you to use existing tools that work with Tinfoil, awoo and other installers based on Tinfoil. I have tested (linux) ns-usbloader and fluffy and both worked for me (i really like fluffy, it has a very detailed README with instructions and is fast and simple to use. highly recommend!).

The other nice feature is the option to download the default background music. This option is found in the "Theme Options".

I've added build instructions to the README, in case anyone was having trouble building sphaira from source. I also updated the wiki for the install options, found here https://github.com/ITotalJustice/sphaira/wiki/Install.

Lastly, i added a "boost mode" option for installing. Like i mentioned above, this increases your cpu clock and reduces the gpu clock to the minimum. This is the same clock speeds that are applied when launching a game or hitting a loading screen. This can slightly improve install speeds.
 
The installation via USB on a PC using Windows is quite complicated and I don't understand how it actually works, I apologize for my English.
I wanted to know if the sphaira recognizes an external device in the dock formatted in FAT32/exFAT?
 
  • Love
Reactions: impeeza
The installation via USB on a PC using Windows is quite complicated and I don't understand how it actually works, I apologize for my English.
I wanted to know if the sphaira recognizes an external device in the dock formatted in FAT32/exFAT?
it doesn't support hdd, it's not really worth adding imo. it massively increases the binary size, slow to start (has to wait for the hdd to spin up) and you can't launch homebrew from it. installing games i guess is a usecase, but you're better off plugging in your hdd to your pc and install via usb/ftp. hdd support is nice for media players and emulators, not really suitable for sphaira.

as for installing on windows, follow the guide for fluffy https://github.com/fourminute/Fluffy?tab=readme-ov-file#windows-instructions-for-use-fluffyexe or ns-usbloader https://github.com/developersu/ns-usbloader?tab=readme-ov-file#windows. For either option, follow the instructions for Tinfoil, as thats the protocol that sphaira uses.
 
Version 0.8.2 is out!
  • Update zh.json by @BIGBIGSUI in #129
  • highlight the currently select entry in popup list.
  • remove stale etags if the server does not send back a new etag. fixes appstore images constantly being requested.
  • only append etag if the dst file already exists.
  • enable the curl option to request compressed data from the server. this allows for slightly faster download speeds when requesting text (json, xml) data.
  • add option to extract multiple / single zip files.
  • add option to compress multiple single files into a zip.
  • themezer now displays the file name when it's extracting.
  • the "install forwarder" option in the filebrowser has been move outside of the "advanced menu".
  • added select all option in the filebrowser by pressing ZL.
  • added back the irs menu.
  • irs menu will now try and connect to the first available joycon that supports irs.
  • irs menu now displays the name of the connected joycon in the title bar.
 
I've added a few new experimental features that some of you may like. No new release for now, but you can download the bleeding edge builds from here https://github.com/ITotalJustice/sphaira/actions.

- Added "Games" menu. This displays all install games, allows you to launch, delete, see info and option to launch a random game.
- Added an option to the advanced options menu that allows you to set the right-side menu. Basically, the layout is Filebrowser (left), Homebrew (middle) and Appstore (right). With this option, you can replace the appstore with another menu, should you want quick access to it.
- Added scrolling text to most text that previously was cropped.


 
I've added a few new experimental features that some of you may like. No new release for now, but you can download the bleeding edge builds from here https://github.com/ITotalJustice/sphaira/actions.

- Added "Games" menu. This displays all install games, allows you to launch, delete, see info and option to launch a random game.
- Added an option to the advanced options menu that allows you to set the right-side menu. Basically, the layout is Filebrowser (left), Homebrew (middle) and Appstore (right). With this option, you can replace the appstore with another menu, should you want quick access to it.
- Added scrolling text to most text that previously was cropped.


View attachment 501892
Have you thought about including the option to back up and restore saves?
There is JKSV, but it always requires you to create a first save to restore the saved file. The idea would be to make it similar to DBi, very practical, if possible.
 
I've added a few new experimental features that some of you may like. No new release for now, but you can download the bleeding edge builds from here https://github.com/ITotalJustice/sphaira/actions.

- Added "Games" menu. This displays all install games, allows you to launch, delete, see info and option to launch a random game.
- Added an option to the advanced options menu that allows you to set the right-side menu. Basically, the layout is Filebrowser (left), Homebrew (middle) and Appstore (right). With this option, you can replace the appstore with another menu, should you want quick access to it.
- Added scrolling text to most text that previously was cropped.


View attachment 501892
Thanks for making my favourite Switch Homebrew!
 
  • Love
Reactions: impeeza

Site & Scene News

Popular threads in this forum