Skip to main content

ipsw-storage

ipsw-storage is a small Python CLI for listing Apple IPSW firmware records from the ipsw.me API and AppleDB, and for interactively downloading selected firmware.

Installation

python -m pip install .

For local development:

python -m pip install -e ".[dev]"

The interactive pull and devices --interactive commands shell out to fzf — install it separately if you want terminal selection.

Usage

List firmware

Firmware records are merged from ipsw.me and AppleDB by default. Pick a single source with --source:

ipsw-storage list
ipsw-storage list --source ipsw
ipsw-storage list --source appledb

Filter to signed firmware for one device:

ipsw-storage list --device iPhone16,2 --signed-only

Machine-readable output:

ipsw-storage list --device iPhone16,2 --json-output

Browse devices (AppleDB)

List every AppleDB device, including simulators and internal identifiers:

ipsw-storage devices
ipsw-storage devices --type Simulator
ipsw-storage devices --device iPhone99,11

Pick a device interactively with fzf and print its summary:

ipsw-storage devices --interactive

AppleDB metadata

Show a single device or OS build:

ipsw-storage appledb device iPhone16,2
ipsw-storage appledb firmware iOS 22A3354

Download an IPSW

Interactively select and download a firmware. The fzf picker shows merged records from both sources by default:

ipsw-storage pull ./downloads --device iPhone16,2 --signed-only

To browse AppleDB devices first, then pick firmware for the chosen device:

ipsw-storage pull ./downloads --pick-device

Skip fzf entirely by pinning to a specific firmware — when --device / --version / --build narrow the catalog to a single record, pull downloads it directly:

ipsw-storage pull ./downloads --device iPhone99,11 --version 26.1
ipsw-storage pull ./downloads --device iPhone99,11 --build 23B85

If the filter still matches multiple records (e.g. one version with several builds) pull falls back to fzf so you can pick the right one.

Downloads show a progress bar with transferred size, speed, and ETA.

You can also run the package module directly:

python -m ipsw_storage list --signed-only

Module layout

Module Responsibility
ipsw_storage.api Orchestrator: Firmware type, fetch_ipsws, AGENTS registry
ipsw_storage.api.ipsw_me ipsw.me agent (NAME = "ipsw")
ipsw_storage.api.appledb AppleDB agent (NAME = "appledb") + device/build metadata
ipsw_storage.api.types Shared Firmware / FirmwareSource types
ipsw_storage.download Streaming file download with progress callbacks
ipsw_storage.cli click command surface

Agent contract

Every API agent under ipsw_storage.api exposes the same two symbols:

NAME: str  # "ipsw", "appledb", ...
def fetch_ipsws(
    device: str | None = None,
    *,
    signed_only: bool = False,
) -> list[Firmware]: ...

The orchestrator in ipsw_storage.api.fetch_ipsws looks up agents by AGENTS[name], calls each one with the same arguments, then merges, dedupes, and sorts the combined result. Adding a new source means dropping a new module into ipsw_storage/api/ that conforms to this contract.

Development

Run the checks used by CI:

python -m ruff check .
python -m pytest
python -m build

Versioning

The package version is derived from git via setuptools_scm. Tag a release as vX.Y.Z and the next build wheel will pick that up automatically — no need to edit pyproject.toml. Between tags, dev builds get a PEP 440-compliant X.Y.Z.devN+g<sha> suffix.

setuptools_scm writes the resolved value to ipsw_storage/_version.py at build time; that file is gitignored. At runtime, ipsw_storage.__version__ reads from it (or falls back to importlib.metadata for installed wheels).

License

This project is released under the Mozilla Public License 2.0.

Metadata

Release files for ipsw-storage 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for ipsw-storage 0.1.0
File Size Uploaded
ipsw_storage-0.1.0.tar.gz 38.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for ipsw-storage 0.1.0
File Interpreter ABI Platform
ipsw_storage-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 57.3 kB

Release files / ipsw_storage-0.1.0.tar.gz

Download URL ipsw_storage-0.1.0.tar.gz
Size 38.6 kB
Tags Source
SHA-256 checksum
How to use checksums
a912e46aef5cfea196257e4ce387a1e7ad6cd8f326772de32f48288e49be65e8
BLAKE2b-256 checksum
How to use checksums
e0ca7da5353fcf9a1e07a7e92fce40fca91f4faf9464fdd4d08e7e405a090e3b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jun 4, 2026.

Transparency log

Release files / ipsw_storage-0.1.0-py3-none-any.whl

Download URL ipsw_storage-0.1.0-py3-none-any.whl
Size 18.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
b157a34ee941dbe301ce1d6ab8cd1a833724bfa226a08597ac85c51eef9e667e
BLAKE2b-256 checksum
How to use checksums
701b52a666ccb60c512ada1cb1e7e76d8c445ebd5636a9328036a9707516b782
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jun 4, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files

0.0.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page