A virtual filesystem for retro game collections that can be mounted and transformed on-the-fly without duplicating files.
RetroMount is an experimental Rust project for building a virtual filesystem over retro game collections.
It allows ROMs, disc images, and archives to be mounted into alternative filesystem layouts on-the-fly, enabling different devices and emulators to view the same underlying collection in different formats without duplicating files.
For example:
- Present CHD images as ISO files
- Extract ROMs from ZIP archives transparently
- Convert disc images into emulator-friendly layouts
- Provide platform-specific views for systems like MiSTer or Batocera
The long-term goal is a flexible input โ transformation โ output pipeline backed by a FUSE filesystem.
Retro game collections are often stored in formats that are not ideal for every device or emulator.
For example:
| Storage format | Works well for | Problems |
|---|---|---|
| ZIP archives | ROM management | Many emulators cannot read zipped files |
| CHD images | Space-efficient storage | Some tools require ISO/BIN files |
| CUE/BIN discs | Accurate disc representation | Some systems prefer CHD |
| Raw ROM sets | Simple emulators | Hard to manage at scale |
Traditionally, users solve this by duplicating their collection in multiple formats:
ROMs/
snes/
game.zip
game.sfc
or
PS1/
game.chd
game.iso
This wastes storage space and creates maintenance headaches.
RetroMount solves this by providing a virtual filesystem layer that can dynamically transform game data into the format required by the target system.
Example:
Storage (single copy)
โ
โผ
/roms/ps1/game.chd
RetroMount can present that same file as:
/mnt/mister/ps1/game.cue
/mnt/batocera/ps1/game.chd
/mnt/tools/ps1/game.iso
All backed by one underlying file.
Retromount is under active development and progressing through a structured roadmap.
- Phase 1 โ Foundations
- Phase 2 โ Core abstractions and initial pipeline
- Phase 3 โ Pipeline consolidation and normalized content model
- Phase 4A โ Mountable filesystem (FUSE integration)
- Phase 4B โ Consumer views (multiple presenters)
- Phase 4C โ Naming and conflict resolution policies
- Phase 4D โ Extensibility and configuration layer
- Phase 5 โ Advanced encoders and external integrations (e.g. torrent compatibility)
- Phase 6 โ Performance, caching, and optimisation
RetroMount can expose a collection as a read-only filesystem using FUSE.
retromount mount <input> <mountpoint>retromount mount ./retromount-testdata /tmp/retromount-testYou can then browse and read files normally:
ls /tmp/retromount-test
tree /tmp/retromount-test
cat /tmp/retromount-test/ps1/Final\ Fantasy\ VII/Final\ Fantasy\ VII.m3u
head /tmp/retromount-test/snes/Super\ Mario\ World/Super\ Mario\ World.sfc- Linux only (via FUSE)
- filesystem is read-only
- output reflects the same structure as
preview/inspect - performance optimisations are planned in future phases
Create a file called retromount.yaml:
- name: ps1
source: /roms/ps1/Ridge Racer.cue
mount: /mnt/retromount/ps1
platform: ps1
- name: snes
source: /roms/snes
mount: /mnt/retromount/snes
platform: snes
- name: megadrive
source: /roms/megadrive
mount: /mnt/retromount/megadrive
platform: megadriveFields:
| Field | Description |
|---|---|
name |
Logical name for the mounted view |
source |
Source directory, archive, or disc image |
mount |
Mount point for the virtual filesystem |
platform |
Target platform (e.g. ps1, snes, megadrive) |
Platform names are case-insensitive and accept friendly aliases.
The ingestion pipeline currently looks like this:
Input Source
โ
โผ
InputHandler
โ
โผ
InputRegistry
โ
โผ
Loader
โ
โโโโโดโโโโโโโโโโโโโโโโ
โ โ
โผ โผ
VirtualFile list GameImage
(file-oriented) (disc-oriented)
Input handlers are responsible for discovering files from a source.
Examples:
DirectoryInputHandlerZipInputHandlerFileInputHandlerCueInputHandler
Readers provide access to underlying data streams:
DirReaderZipReader
Disc-based systems use structured models:
GameImage
โโ Disc
โโ Track
This enables accurate representation of multi-track disc formats.
RetroMount only removes universally unwanted junk files during discovery:
__MACOSX/.DS_StoreThumbs.db
Other sidecar files such as .nfo, .txt, or cover art are preserved.
Output-specific filtering will be implemented in the view/output layer in a later phase.
- Consumer-specific filesystem views
- Presentation policies (naming, filtering, grouping)
- Performance improvements (e.g. read caching)
- Output translators (e.g. CHD โ ISO)