No description
  • Rust 99.8%
  • C 0.2%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Michal Kozák 2948bf0667
Merge branch 'docs/readme-rewrite'
Split the README into a README and a manual under docs/.
2026-08-25 23:33:04 +02:00
crates/libgpod-sys fix(tui): stop libgpod's warnings printing over the interface 2026-08-25 13:05:48 +02:00
docs docs: split the README into a README and a manual 2026-08-25 23:32:07 +02:00
src fix(tui): stop the copy popup counting files it is not converting 2026-08-25 20:59:00 +02:00
tests feat(copy): say when a track was named after its filename 2026-08-25 16:48:54 +02:00
.gitignore chore: drop TASK.md, gitignore future kickoff briefs 2026-05-12 12:30:19 +02:00
AGENTS.md chore: record where issues, labels and domain docs live 2026-08-25 20:39:30 +02:00
Cargo.lock feat: show how much room is left on the iPod 2026-08-25 17:20:41 +02:00
Cargo.toml feat: show how much room is left on the iPod 2026-08-25 17:20:41 +02:00
CONTRIBUTING.md docs: split the README into a README and a manual 2026-08-25 23:32:07 +02:00
LICENSE feat: phase 0 — cargo workspace, vendored libgpod, bindgen smoke test 2026-05-12 11:49:18 +02:00
README.md docs: split the README into a README and a manual 2026-08-25 23:32:07 +02:00
rust-toolchain.toml feat: phase 0 — cargo workspace, vendored libgpod, bindgen smoke test 2026-05-12 11:49:18 +02:00
SPEC.md fix(tui): stop the copy popup counting files it is not converting 2026-08-25 20:59:00 +02:00

ironpod

Put music on an iPod without iTunes.

license: MIT rust 1.85+ platform: macOS | Linux last commit

Browse your files and the device side by side in the terminal, or drive it from the command line — either way, tracks land with their metadata and cover art, and nothing syncs behind your back.

Built in Rust, wrapping libgpod via FFI so the iTunesDB format, per-model checksums and artwork encoding are handled by the library that has always handled them.

Features

  • Dual-pane terminal browser — your files on one side, the iPod on the other. Mark across several folders and disks, then copy once.
  • Or just use the command linecp, ls, rm, info, all where you'd expect them.
  • Converts on the way over. FLAC, Ogg and Opus can't play on an iPod; ironpod encodes them to AAC with ffmpeg as it copies. Tags and cover art come from the original, not from ffmpeg's output.
  • Duplicate-aware. Re-copying a folder you've already copied is free and safe, and dedupe cleans up what earlier tools left behind.
  • Cover art, from the file's embedded picture or a cover.jpg next to it.
  • Never syncs. It copies what you asked for and removes what you asked it to remove. Nothing else.

Install

No packages yet — build from source. You'll need a C toolchain and a few development headers first; see docs/install.md for the one-liner for your platform.

git clone https://code.nolog.cz/wokoman/ironpod
cd ironpod
cargo install --path .        # puts `ironpod` in ~/.cargo/bin

The first build compiles the vendored libgpod C sources, so give it a minute.

Install ffmpeg too unless you have no FLAC, Ogg or Opus anywhere.

Usage

Run it with no arguments for the browser, opened on the folder you're standing in with the connected iPod on the right:

ironpod

Tab switches panes, Space marks, c copies, d deletes, ? shows every key. Marks survive walking around, so you can gather an album here, another one on a network share, and copy them in one go.

Or from the command line:

$ ironpod info
model:      Classic (Silver)
generation: Classic
model no:   B029
capacity:   80 GB
mountpoint: /Volumes/IPOD
tracks:     1203
playlists:  17
music:      8.8 GB
free:       70.4 GB

$ ironpod cp ~/Music/Harakiri /Volumes/IPOD
[1/11] 01 - Serj Tankian - Cornucopia.mp3
[2/11] 02 - Serj Tankian - Figure It Out.mp3
...
copied 11 of 11 files

You can usually leave the mountpoint out — ironpod finds a mounted volume with an iPod_Control directory on it.

Full usage guide →

Status

Working, and used on real hardware: albums copy with full metadata, track numbers and cover art, and play on the device. dedupe has cleaned 11 real duplicates off that iPod without touching anything else.

Three things worth knowing before you start:

  • FLAC, Ogg and Opus need ffmpeg installed, or they're refused rather than converted.
  • No playlist management. You can list playlists, not create or edit them.
  • It is not a sync tool and never will be.

Full list →

Documentation

  • Usage — the browser, the commands, transcoding, limitations
  • Install — dependencies, toolchain, building
  • Contributing — tests, checks, device-test opt-ins
  • SPEC.md — design, roadmap, and the libgpod pitfalls found the hard way

Licence

ironpod is MIT.

The vendored libgpod under crates/libgpod-sys/vendor/ is LGPL-2.1+ (see crates/libgpod-sys/vendor/COPYING). It is compiled at build time via the cc crate, so it can be replaced with a modified copy.