Cloudless freedom for your iPhone. Local-first photo/video backup from iOS devices to disk. A HARTLE.TECH tool. https://hartle.tech
  • Go 95.2%
  • Shell 4.8%
Find a file
hartle-tech e4f76d9433
fix(gui+backup S01E37 #27): one row per run, scrollable; .dumpsock extension; decrypt back on every row
Operator: "Each row, a new backup, if it's too many rows, scrollbar.
With that stupid move, you got rid of all chances of even decrypting
the damn files AT ALL" + "Encrypted files in DumpSock should have the
.dumpsock extension."

Saved Backups restructure (#45)
- Frontend flattens (entry × history) into one row per RunRecord
  sorted newest-first. Folders without metadata get a single
  synthetic row with the rolled-up totals. Each row shows
  device · timestamp · pulled/skipped/errors counts.
- Every row carries the FULL action set: Reveal, Decrypt (when an
  archive is present), Decrypt & unarchive (same), Move…, Forget.
  Operator can never lose decrypt access via UI restructure again.
- .backups-list now has max-height: 520px + overflow-y: auto so a
  long list scrolls inside the card instead of pushing the page.

.dumpsock extension (#46)
- backup.EncryptFile produces `<name>.dumpsock` instead of
  `<name>.aes` (strips `.zip` suffix from input if present;
  otherwise appends).
- App.DecryptArchive + App.DecryptAndExtractArchive accept .dumpsock
  AND legacy .aes (default output name strips either, ensures
  .zip suffix).
- ListBackups detects .dumpsock alongside .zip.aes for the
  Encrypted-archive badge + per-row Decrypt button.
- removeRawTree preserves .dumpsock files.
- PackageZip walk skips .dumpsock files (so re-runs don't gobble
  predecessor encrypted archives into the new zip).
- OpenFileDialog filter lists *.dumpsock first, *.aes second for
  legacy users.
- Magic-byte check inside DSAES2 means existing .zip.aes archives
  decrypt unchanged — only the NAMING changed.

Tracks #45 and #46. Co-touches #36 / #40 / #42 / #43.
2026-05-18 03:42:25 +01:00
.github feat(k8s S01E37): containerize docs build for k3s migration 2026-05-16 23:23:59 +01:00
assets feat(gui S01E37 #27): phase 2.5 — operator's 10-item GUI sweep + nonnegotiable workflow retrofit 2026-05-17 05:26:06 +01:00
cmd feat(ui): v3 pixel-precision pass per Archive.zip zoomed mockups 2026-05-15 06:49:22 +01:00
docs fix(gui S01E37 #27): packaging perf + UX — Store mode, streaming encrypt, live progress, archive inside outputRoot 2026-05-18 01:44:36 +01:00
internal fix(gui+backup S01E37 #27): one row per run, scrollable; .dumpsock extension; decrypt back on every row 2026-05-18 03:42:25 +01:00
scripts feat(gui S01E37 #27): phase 2.5 — operator's 10-item GUI sweep + nonnegotiable workflow retrofit 2026-05-17 05:26:06 +01:00
.gitignore fix(ci docs): commit docs/package-lock.json so npm ci can run 2026-05-15 21:56:40 +01:00
CLAUDE.md feat(gui S01E37 #27): phase 2.5 — operator's 10-item GUI sweep + nonnegotiable workflow retrofit 2026-05-17 05:26:06 +01:00
go.mod fix(gui+cli S01E37 #27): saved-backups + decrypt CLI + Touch ID honest errors 2026-05-18 02:19:26 +01:00
go.sum fix(gui+cli S01E37 #27): saved-backups + decrypt CLI + Touch ID honest errors 2026-05-18 02:19:26 +01:00
LICENSE feat(docs): GHA-deployed dumpsock.hartle.tech/{docs,wiki} + Apache-2.0 OSS license + brand theme 2026-05-15 21:54:09 +01:00
NOTICE feat(docs): GHA-deployed dumpsock.hartle.tech/{docs,wiki} + Apache-2.0 OSS license + brand theme 2026-05-15 21:54:09 +01:00
README.md feat(v2-brand): light theme + approved mascot + playful voice 2026-05-15 05:43:08 +01:00
SESSION_RESUME.md docs(session): Phase 6 Layer 1 validated; resume pointer up-to-date 2026-05-18 01:16:34 +01:00
wails.json feat(gui): phase 2 — Wails desktop app sharing the pull engine 2026-05-14 23:24:33 +01:00

DumpSock

Cloudless freedom for your iPhone.

DumpSock is a playful, local-first tool that helps people free space on iPhone and iPad by backing up media and files the good old way: locally, privately, no cloud.

dumpsock pull

That's the whole common case.


What it does

  • Plug your iPhone in over USB.
  • DumpSock walks DCIM/, pulls every photo and video to your Mac (or to any folder you point it at — including an external SSD).
  • Files land in date-sorted YYYY-MM-DD/ folders so you can find them later.
  • Optional --delete-after removes each file from the iPhone once it's safely on disk. Storage freed immediately.

No iCloud. No account. No telemetry. No phone-home. The bytes go from your phone to your disk and nowhere else.

Status

Phase 2 — desktop GUI shipped, v2 brand applied. macOS .app bundle works end-to-end against real iPhones on iOS 26. Linux + Windows CLI binaries build; native GUIs for those platforms are in flight.

Roadmap

Phase Lands
0 Project scaffold + brand bible
1 Go CLI — pull, devices, dry-run, set-mtime, parallel, live-pair, since/until, watch-mode, delete-after
2 macOS GUI (Wails) with the v2 mascot, light theme, playful copy
2.1 Multi-tab dashboard (Dashboard / Compare / Progress / Settings), storage gauge, status pills
2.5 iPhone Mirroring auto-empty of Recently Deleted (one Touch ID on the Mac, then bytes really go)
3 Landing page at dumpsock.app (or dumpsock.hartle.tech); browser-control of a desktop bridge
4 Signed installers, notarization, SBOM, SLSA provenance
5 Mobile-to-mobile (iPhone → Android over OTG, native)

Privacy

DumpSock is fully offline. No telemetry. No phone-home. No account. Your data stays yours.

Contact

A HARTLE.TECH tool. Questions: contact@hartle.tech.