Skip to content

aloks98/isoman

Repository files navigation

ISOMan

GitHub Release CI License: MIT

A modern, self-hosted Linux ISO download manager with real-time progress tracking and verification.

Screenshots

Grid View
Grid view showing completed ISO downloads

List View
List view with sortable columns

Download Progress
Real-time download progress tracking

Statistics Dashboard
Statistics dashboard with charts

Add ISO Form
Add new ISO download form

Directory Listing
HTTP file browser for direct downloads

What is ISOMan?

ISOMan is a web-based application that allows you to download, verify, and serve Linux ISOs (and other disk images) over HTTP. It provides a clean, modern interface to manage your ISO downloads with features like automatic checksum verification, real-time progress updates via WebSocket, and organized file storage.

Perfect for:

  • Homelab enthusiasts managing multiple Linux distributions
  • System administrators maintaining ISO libraries
  • DevOps teams needing centralized ISO storage
  • Anyone tired of manually downloading and organizing ISOs

Features

  • Multiple File Format Support: Download ISO, QCOW2, VMDK, VDI, IMG, and other disk image formats
  • Organized Storage: Automatic organization by distribution name, version, and architecture
  • Checksum Verification: Automatic SHA256/SHA512/MD5 verification during download
  • Real-time Progress: WebSocket-based live progress updates for all downloads
  • Concurrent Downloads: Configurable worker pool for parallel downloads
  • Modern UI: Clean, responsive interface with dark mode support
  • Grid and List Views: Flexible viewing options with sorting and pagination
  • Apache-style Directory Listing: Browse and download files directly via HTTP
  • RESTful API: Full API access for automation and integration
  • Single Container Deployment: Easy deployment with Docker

Tech Stack

Backend

  • Go - High-performance backend server
  • Gin - HTTP web framework
  • SQLite (modernc.org/sqlite) - Pure Go, CGO-free database
  • WebSocket - Real-time progress updates

Frontend

  • React + TypeScript - Modern UI framework
  • Vite + Rsbuild - Fast build tooling
  • Tailwind CSS - Utility-first styling
  • Zustand - Global state management
  • TanStack Query - Server state management
  • TanStack Table - Advanced data grid
  • React Router - Client-side routing
  • Bun - Fast JavaScript runtime and package manager

Quick Start

Prerequisites

  • Go 1.22+ (for backend development)
  • Bun (for frontend development)
  • Docker (for containerized deployment)

Development Setup

  1. Clone the repository

    git clone https://github.com/yourusername/isoman.git
    cd isoman
  2. Start the backend

    cd backend
    go run main.go

    Backend will be available at http://localhost:8080

  3. Start the frontend (in a new terminal)

    cd ui
    bun install
    bun run dev

    Frontend will be available at http://localhost:3000

Docker Deployment

  1. Build the image

    docker build -t isoman .
  2. Run the container

    docker run -d \
      -p 8080:8080 \
      -v isoman-data:/data \
      --name isoman \
      isoman
  3. Access the application Open http://localhost:8080 in your browser

Usage

Adding an ISO Download

  1. Click the "Add ISO" button
  2. Fill in the details:
    • Name: Distribution name (e.g., "Ubuntu")
    • Version: Version number (e.g., "24.04")
    • Architecture: CPU architecture (e.g., "x86_64")
    • Edition (optional): Variant (e.g., "desktop", "server")
    • Download URL: Direct link to the ISO file
    • Checksum URL (optional): Link to checksum file for verification
  3. Click "Download" to start

Monitoring Downloads

  • Watch real-time progress in the ISO cards
  • See download status: pending, downloading, verifying, complete, or failed
  • Retry failed downloads with one click

Accessing ISOs

  • Via UI: Click "Download" button on completed ISOs
  • Via HTTP: Navigate to /images/ for directory listing
  • Direct Link: Use the copy button to get direct download URLs

Architecture

┌─────────────┐
│   Browser   │
└──────┬──────┘
       │ HTTP/WS
       ▼
┌─────────────────────────────────────┐
│         Gin Web Server              │
│  ┌──────────┐  ┌────────────────┐  │
│  │ REST API │  │ WebSocket Hub  │  │
│  └──────────┘  └────────────────┘  │
└───────────┬─────────────────────────┘
            │
            ▼
┌─────────────────────────────────────┐
│      Download Manager               │
│  ┌──────────────────────────────┐  │
│  │   Worker Pool (concurrent)   │  │
│  │  ┌────────┐    ┌────────┐   │  │
│  │  │Worker 1│    │Worker 2│   │  │
│  │  └────────┘    └────────┘   │  │
│  └──────────────────────────────┘  │
└───────────┬─────────────────────────┘
            │
            ▼
┌─────────────────────────────────────┐
│         SQLite Database             │
│    (Pure Go, no CGO required)       │
└─────────────────────────────────────┘
            │
            ▼
┌─────────────────────────────────────┐
│        File System Storage          │
│   data/isos/{name}/{version}/{arch}/│
└─────────────────────────────────────┘

Storage Structure

data/isos/
├── alpine/
│   └── 3.19.1/
│       └── x86_64/
│           ├── alpine-3.19.1-x86_64.iso
│           └── alpine-3.19.1-x86_64.iso.sha256
├── ubuntu/
│   └── 24.04/
│       └── x86_64/
│           ├── ubuntu-24.04-desktop-x86_64.iso
│           └── ubuntu-24.04-server-x86_64.iso

API Reference

See docs/API.md for complete API documentation.

Quick example:

# Create a download
curl -X POST http://localhost:8080/api/isos \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Alpine Linux",
    "version": "3.19.1",
    "arch": "x86_64",
    "download_url": "https://dl-cdn.alpinelinux.org/alpine/v3.19/releases/x86_64/alpine-standard-3.19.1-x86_64.iso",
    "checksum_url": "https://dl-cdn.alpinelinux.org/alpine/v3.19/releases/x86_64/alpine-standard-3.19.1-x86_64.iso.sha256"
  }'

# List all ISOs
curl http://localhost:8080/api/isos

Documentation

Configuration

Environment Variables

Backend:

  • PORT - HTTP server port (default: 8080)
  • DATA_DIR - Base data directory (default: ./data)
  • WORKER_COUNT - Number of concurrent download workers (default: 2)

Frontend:

  • PUBLIC_API_URL - Backend API URL (default: http://localhost:8080)
  • PUBLIC_WS_URL - WebSocket URL (default: ws://localhost:8080/ws)

Development

Backend Commands

cd backend
go run main.go           # Run development server
go build -o server .     # Build production binary
go test ./...            # Run tests
go mod tidy              # Clean up dependencies

Frontend Commands

cd ui
bun install              # Install dependencies
bun run dev              # Start dev server
bun run build            # Production build
bun run preview          # Preview production build
bun run lint             # Lint code

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

License

MIT License - see LICENSE file for details

Acknowledgments

Support

For issues, questions, or suggestions, please open an issue on GitHub.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 2

  •  
  •