Skip to content

Directory Structure

Directory Structure

Cannoli uses an opinionated directory structure heavily inspired by MinUI.

All paths below are relative to the Cannoli Root you picked during initial setup.

Cannoli Root/
├── Art/
├── BIOS/
├── Backup/
├── Config/
├── Guides/
├── Logs/
├── Media/
├── Overlays/
├── Roms/
├── Save States/
├── Saves/
├── Shaders/
└── Wallpapers/

Tip

Eyes glazing over? Skip the manual filing and use Nonna's Kitchen to get into your games faster.


Where does everything go?

Nearly everything is sorted using platform tags as folder names. These folders expect one subfolder per tag:

  • Art
  • BIOS
  • Guides
  • Roms
  • Saves
  • Save States

Sounds abstract, but it's not. Say you've got a cool rom hack, Pokémon - Recharged Yellow, for Game Boy Advance.

The rom file you'll copy over is Pokémon - Recharged Yellow.gba, and from the platform tags page you know GBA is the tag for Game Boy Advance.

With those two pieces of info you know where everything goes:

Thing Where It Goes
BIOS Files Cannoli/BIOS/GBA/gba_bios.bin
Box Art Cannoli/Art/GBA/Pokémon - Recharged Yellow.png
Guide File Cannoli/Guides/GBA/Pokémon - Recharged Yellow/Kanto Map.png
ROM Files Cannoli/Roms/GBA/Pokémon - Recharged Yellow.gba
Save Files Cannoli/Saves/GBA/Pokémon - Recharged Yellow.sav
Save States Cannoli/Save States/GBA/Pokémon - Recharged Yellow/Pokémon - Recharged Yellow.state (and .state.auto, .state1-.state9)

Multi-Disc Games

Drop the disc files into the platform's ROM folder. On the next scan Cannoli moves them into a per-game subfolder with a generated .m3u and shows a single entry.

See Multi-Disc Games for details.


Config folder reference

Most people never need to open Config/. If you're curious or troubleshooting, here's the full layout and what each piece does.

Config/
├── arcade_map.txt
├── cannoli.db
├── ignore_extensions_roms.txt
├── ignore_files_roms.txt
├── platforms.ini
├── settings.json
├── Assets/
├── Cache/
├── Fonts/
├── Input/
│   └── Mappings/
├── Launch Scripts/
│   ├── Ports/
│   └── Tools/
├── Ordering/
├── Overrides/
│   ├── global.ini
│   ├── Cores/
│   ├── Games/
│   └── systems/
├── Profiles/
├── RetroAchievements/
├── RetroArch/
└── State/

Files

File What it does
arcade_map.txt Maps arcade ROM filenames to human-readable game titles. Cannoli ships a default mapping, but you can edit this file to add or change entries.
cannoli.db Cannoli's library database (platforms, ROMs, collections, favorites, recently played, and overrides).
ignore_extensions_roms.txt File extensions to filter out of the games list, one per line. Cannoli creates this file automatically with .sav and .srm as defaults.
ignore_files_roms.txt Specific filenames to filter out of the games list, one per line. Seeded with common non-game files like map.txt, systeminfo.txt, and gamelist.xml.
platforms.ini Optional per-install tweaks to the platforms table (e.g. preferred core or app for a tag).
settings.json Your launcher settings.

Folders

Folder What it holds
Assets/ Bundled assets.
Cache/ Library scan caches (.platform_cache.json, .game_cache). Safe to delete; Cannoli rebuilds them.
Fonts/ Drop-in location for custom fonts.
Input/Mappings/ One INI file per controller holding its button mappings, glyph style, and other per-controller options.
Overrides/ Per-scope RetroArch overrides. global.ini for the global baseline, Cores/ for core defaults, systems/ for platform overrides (lowercase), and Games/<tag>/<game>.ini for single-game overrides.
RetroAchievements/ Saved RetroAchievements data such as ra_game_ids.txt.
RetroArch/ Files Cannoli writes for RetroArch, including retroarch_launch.cfg.
State/ Runtime state Cannoli regenerates as you use it: recently_played.txt, quick_resume.txt, guide_positions.ini.