No description
- Go 52.1%
- HTML 20.4%
- CSS 17.2%
- JavaScript 10.3%
| internal | ||
| static | ||
| templates | ||
| go.mod | ||
| go.sum | ||
| isosilo | ||
| main.go | ||
| README.md | ||
ISOSilo
A Vibe coded Go web server that lets you browse and download files from ISO 9660 images via your browser, without mounting them.
Features
- Library view - lists all
.isofiles in a directory as clickable cards - In-ISO browsing - navigate directories inside any ISO just like a file manager
- File downloads - download individual files directly from within an ISO
- Clean UI - dark-themed, responsive interface with file-type icons
- Safe - path traversal protection; only
.isofiles in the served directory are accessible - Zero mount required - reads ISO images directly using the ISO 9660 library
Installation
Prerequisites
- Go 1.22 or later
Build from source
git clone https://code.oscorp.dk/visionmercer/isosilo.git
cd isosilo
go mod tidy # fetches github.com/kdomanski/iso9660
go build -o isosilo .
Usage
isosilo [flags]
Flags:
-dir string Directory containing ISO files to serve (default: current directory)
-addr string Address to listen on (default: :8080)
Examples
# Serve ISOs from the current directory on port 8080
./isosilo
# Serve a specific directory on a custom port
./isosilo -dir /mnt/isos -addr :9000
# Serve on all interfaces (default) or localhost only
./isosilo -addr 127.0.0.1:8080
Then open http://localhost:8080 in your browser.
URL Structure
| URL | Description |
|---|---|
GET / |
List all ISO files in the served directory |
GET /browse/{iso} |
Browse the root of an ISO |
GET /browse/{iso}/{path} |
Browse a subdirectory inside an ISO |
GET /file/{iso}/{path} |
Download a file from inside an ISO |
Dependencies
github.com/kdomanski/iso9660— pure-Go ISO 9660 reader
Project Layout
isosilo/
├── main.go # Entry point, CLI flags, route registration
├── go.mod
├── go.sum
└── internal/
├── iso/
│ └── reader.go # ISO open/list/read abstraction
└── handlers/
└── handlers.go # HTTP handlers + HTML templates
Security Notes
- The server only serves files with a
.isoextension from the configured directory. - ISO names are validated to prevent path traversal (
..,/,\). - Internal ISO paths are cleaned before use.