icloud-photos-downloader/icloud_photos_downloaderPublic

A command-line tool to download photos from iCloud

AI summary: A robust command-line tool for downloading and backing up all media from Apple iCloud.

Stars
12.3K
+6 today
Forks
846
Watchers
115
Open issues
142
Open PRs
38
Contributors
~48
Commits
994
Branches
8

PythonMITCreated May 13, 2016Last push 4mo agoLatest release v1.32.3+23 stars this week+88 this month

Quick answers

What is icloud_photos_downloader?
A robust command-line tool for downloading and backing up all media from Apple iCloud.
What does icloud_photos_downloader do?
This utility provides a reliable, automated way to download and incrementally backup photos and videos from an Apple iCloud account to a local drive. It bypasses the limitations of the official web interface by communicating directly with iCloud's internal APIs. The tool handles the complexities of Apple's Two-Factor Authentication (2FA) and securely manages session tokens. It is designed to run efficiently in the background, only downloading new or modified files to keep local backups perfectly in sync. It also ensures that all original metadata, such as EXIF tags and live photo components, are preserved during the transfer.
Who is icloud_photos_downloader for?
Apple users, data hoarders, and self-hosters who want complete, local control over their iCloud photo libraries. It is perfect for those looking to automate backups to a NAS or local storage without relying solely on Apple's ecosystem.
How do I get started with icloud_photos_downloader?
pip install icloudpd
How popular is icloud_photos_downloader on GitHub?
icloud-photos-downloader/icloud_photos_downloader has 12,290 stars and 846 forks on GitHub, and gained 23 stars in the last 7 days.
What license does icloud_photos_downloader use?
icloud-photos-downloader/icloud_photos_downloader is released under the MIT license.

Star history

since Oct 18, 2020
05K10KOct 2020Oct 2022Sep 2024Oct 2026
12.3K stars as of Oct 2, 2026. Before Jul 29, 2026, reconstructed from public GitHub event archives (checked against the repository's real star total); since then measured daily.

Contribution activity

commits per day, last 52 weeks
SepOctNovDecJanFebMarAprMayJunJulAugSepMonWedFri2025-09-28: 0 commits2025-09-29: 0 commits2025-09-30: 0 commits2025-10-01: 0 commits2025-10-02: 0 commits2025-10-03: 0 commits2025-10-04: 0 commits2025-10-05: 0 commits2025-10-06: 0 commits2025-10-07: 0 commits2025-10-08: 0 commits2025-10-09: 0 commits2025-10-10: 0 commits2025-10-11: 0 commits2025-10-12: 0 commits2025-10-13: 0 commits2025-10-14: 0 commits2025-10-15: 0 commits2025-10-16: 0 commits2025-10-17: 0 commits2025-10-18: 0 commits2025-10-19: 0 commits2025-10-20: 0 commits2025-10-21: 0 commits2025-10-22: 0 commits2025-10-23: 0 commits2025-10-24: 0 commits2025-10-25: 0 commits2025-10-26: 0 commits2025-10-27: 0 commits2025-10-28: 0 commits2025-10-29: 0 commits2025-10-30: 0 commits2025-10-31: 0 commits2025-11-01: 0 commits2025-11-02: 0 commits2025-11-03: 0 commits2025-11-04: 0 commits2025-11-05: 0 commits2025-11-06: 0 commits2025-11-07: 0 commits2025-11-08: 0 commits2025-11-09: 0 commits2025-11-10: 0 commits2025-11-11: 0 commits2025-11-12: 0 commits2025-11-13: 0 commits2025-11-14: 0 commits2025-11-15: 0 commits2025-11-16: 0 commits2025-11-17: 0 commits2025-11-18: 0 commits2025-11-19: 0 commits2025-11-20: 0 commits2025-11-21: 0 commits2025-11-22: 0 commits2025-11-23: 0 commits2025-11-24: 0 commits2025-11-25: 0 commits2025-11-26: 0 commits2025-11-27: 0 commits2025-11-28: 0 commits2025-11-29: 0 commits2025-11-30: 0 commits2025-12-01: 0 commits2025-12-02: 0 commits2025-12-03: 0 commits2025-12-04: 0 commits2025-12-05: 0 commits2025-12-06: 0 commits2025-12-07: 0 commits2025-12-08: 0 commits2025-12-09: 0 commits2025-12-10: 0 commits2025-12-11: 0 commits2025-12-12: 0 commits2025-12-13: 0 commits2025-12-14: 0 commits2025-12-15: 0 commits2025-12-16: 0 commits2025-12-17: 0 commits2025-12-18: 0 commits2025-12-19: 0 commits2025-12-20: 0 commits2025-12-21: 0 commits2025-12-22: 0 commits2025-12-23: 0 commits2025-12-24: 0 commits2025-12-25: 0 commits2025-12-26: 0 commits2025-12-27: 0 commits2025-12-28: 0 commits2025-12-29: 0 commits2025-12-30: 0 commits2025-12-31: 0 commits2026-01-01: 0 commits2026-01-02: 0 commits2026-01-03: 0 commits2026-01-04: 0 commits2026-01-05: 1 commit2026-01-06: 0 commits2026-01-07: 0 commits2026-01-08: 0 commits2026-01-09: 0 commits2026-01-10: 0 commits2026-01-11: 0 commits2026-01-12: 0 commits2026-01-13: 0 commits2026-01-14: 0 commits2026-01-15: 0 commits2026-01-16: 0 commits2026-01-17: 0 commits2026-01-18: 0 commits2026-01-19: 0 commits2026-01-20: 0 commits2026-01-21: 0 commits2026-01-22: 0 commits2026-01-23: 0 commits2026-01-24: 0 commits2026-01-25: 0 commits2026-01-26: 0 commits2026-01-27: 0 commits2026-01-28: 0 commits2026-01-29: 0 commits2026-01-30: 0 commits2026-01-31: 0 commits2026-02-01: 0 commits2026-02-02: 0 commits2026-02-03: 0 commits2026-02-04: 0 commits2026-02-05: 0 commits2026-02-06: 0 commits2026-02-07: 0 commits2026-02-08: 0 commits2026-02-09: 0 commits2026-02-10: 0 commits2026-02-11: 0 commits2026-02-12: 0 commits2026-02-13: 0 commits2026-02-14: 0 commits2026-02-15: 0 commits2026-02-16: 0 commits2026-02-17: 0 commits2026-02-18: 0 commits2026-02-19: 0 commits2026-02-20: 0 commits2026-02-21: 0 commits2026-02-22: 0 commits2026-02-23: 0 commits2026-02-24: 0 commits2026-02-25: 0 commits2026-02-26: 0 commits2026-02-27: 0 commits2026-02-28: 0 commits2026-03-01: 0 commits2026-03-02: 0 commits2026-03-03: 0 commits2026-03-04: 0 commits2026-03-05: 0 commits2026-03-06: 0 commits2026-03-07: 0 commits2026-03-08: 0 commits2026-03-09: 0 commits2026-03-10: 0 commits2026-03-11: 0 commits2026-03-12: 0 commits2026-03-13: 0 commits2026-03-14: 0 commits2026-03-15: 0 commits2026-03-16: 0 commits2026-03-17: 0 commits2026-03-18: 0 commits2026-03-19: 0 commits2026-03-20: 0 commits2026-03-21: 0 commits2026-03-22: 0 commits2026-03-23: 0 commits2026-03-24: 0 commits2026-03-25: 0 commits2026-03-26: 0 commits2026-03-27: 0 commits2026-03-28: 0 commits2026-03-29: 0 commits2026-03-30: 0 commits2026-03-31: 0 commits2026-04-01: 0 commits2026-04-02: 0 commits2026-04-03: 0 commits2026-04-04: 0 commits2026-04-05: 0 commits2026-04-06: 0 commits2026-04-07: 0 commits2026-04-08: 0 commits2026-04-09: 0 commits2026-04-10: 0 commits2026-04-11: 0 commits2026-04-12: 0 commits2026-04-13: 0 commits2026-04-14: 0 commits2026-04-15: 0 commits2026-04-16: 0 commits2026-04-17: 0 commits2026-04-18: 1 commit2026-04-19: 0 commits2026-04-20: 0 commits2026-04-21: 0 commits2026-04-22: 0 commits2026-04-23: 0 commits2026-04-24: 0 commits2026-04-25: 0 commits2026-04-26: 0 commits2026-04-27: 0 commits2026-04-28: 0 commits2026-04-29: 0 commits2026-04-30: 0 commits2026-05-01: 0 commits2026-05-02: 0 commits2026-05-03: 0 commits2026-05-04: 0 commits2026-05-05: 0 commits2026-05-06: 0 commits2026-05-07: 0 commits2026-05-08: 0 commits2026-05-09: 0 commits2026-05-10: 0 commits2026-05-11: 0 commits2026-05-12: 0 commits2026-05-13: 0 commits2026-05-14: 0 commits2026-05-15: 0 commits2026-05-16: 0 commits2026-05-17: 0 commits2026-05-18: 0 commits2026-05-19: 0 commits2026-05-20: 0 commits2026-05-21: 0 commits2026-05-22: 0 commits2026-05-23: 0 commits2026-05-24: 0 commits2026-05-25: 0 commits2026-05-26: 0 commits2026-05-27: 0 commits2026-05-28: 3 commits2026-05-29: 4 commits2026-05-30: 5 commits2026-05-31: 0 commits2026-06-01: 0 commits2026-06-02: 0 commits2026-06-03: 0 commits2026-06-04: 0 commits2026-06-05: 0 commits2026-06-06: 0 commits2026-06-07: 0 commits2026-06-08: 0 commits2026-06-09: 0 commits2026-06-10: 0 commits2026-06-11: 0 commits2026-06-12: 0 commits2026-06-13: 0 commits2026-06-14: 0 commits2026-06-15: 0 commits2026-06-16: 0 commits2026-06-17: 0 commits2026-06-18: 0 commits2026-06-19: 0 commits2026-06-20: 0 commits2026-06-21: 0 commits2026-06-22: 0 commits2026-06-23: 0 commits2026-06-24: 0 commits2026-06-25: 0 commits2026-06-26: 0 commits2026-06-27: 0 commits2026-06-28: 0 commits2026-06-29: 0 commits2026-06-30: 0 commits2026-07-01: 0 commits2026-07-02: 0 commits2026-07-03: 0 commits2026-07-04: 0 commits2026-07-05: 0 commits2026-07-06: 0 commits2026-07-07: 0 commits2026-07-08: 0 commits2026-07-09: 0 commits2026-07-10: 0 commits2026-07-11: 0 commits2026-07-12: 0 commits2026-07-13: 0 commits2026-07-14: 0 commits2026-07-15: 0 commits2026-07-16: 0 commits2026-07-17: 0 commits2026-07-18: 0 commits2026-07-19: 0 commits2026-07-20: 0 commits2026-07-21: 0 commits2026-07-22: 0 commits2026-07-23: 0 commits2026-07-24: 0 commits2026-07-25: 0 commits2026-07-26: 0 commits2026-07-27: 0 commits2026-07-28: 0 commits2026-07-29: 0 commits2026-07-30: 0 commits2026-07-31: 0 commits2026-08-01: 0 commits2026-08-02: 0 commits2026-08-03: 0 commits2026-08-04: 0 commits2026-08-05: 0 commits2026-08-06: 0 commits2026-08-07: 0 commits2026-08-08: 0 commits2026-08-09: 0 commits2026-08-10: 0 commits2026-08-11: 0 commits2026-08-12: 0 commits2026-08-13: 0 commits2026-08-14: 0 commits2026-08-15: 0 commits2026-08-16: 0 commits2026-08-17: 0 commits2026-08-18: 0 commits2026-08-19: 0 commits2026-08-20: 0 commits2026-08-21: 0 commits2026-08-22: 0 commits2026-08-23: 0 commits2026-08-24: 0 commits2026-08-25: 0 commits2026-08-26: 0 commits2026-08-27: 0 commits2026-08-28: 0 commits2026-08-29: 0 commits2026-08-30: 0 commits2026-08-31: 0 commits2026-09-01: 0 commits2026-09-02: 0 commits2026-09-03: 0 commits2026-09-04: 0 commits2026-09-05: 0 commits2026-09-06: 0 commits2026-09-07: 0 commits2026-09-08: 0 commits2026-09-09: 0 commits2026-09-10: 0 commits2026-09-11: 0 commits2026-09-12: 0 commits2026-09-13: 0 commits2026-09-14: 0 commits2026-09-15: 0 commits2026-09-16: 0 commits2026-09-17: 0 commits2026-09-18: 0 commits2026-09-19: 0 commits2026-09-20: 0 commits2026-09-21: 0 commits2026-09-22: 0 commits2026-09-23: 0 commits2026-09-24: 0 commits2026-09-25: 0 commits2026-09-26: 0 commits
14 commits in the last yearLessMore

Signals and awards

derived from tracked data
  • Widely adopted

    12,290 stars

  • Battle-tested

    10 years of history

  • Permissive license

    MIT

  • Continuous integration

    Automated checks passing

What icloud_photos_downloader does

This utility provides a reliable, automated way to download and incrementally backup photos and videos from an Apple iCloud account to a local drive. It bypasses the limitations of the official web interface by communicating directly with iCloud's internal APIs. The tool handles the complexities of Apple's Two-Factor Authentication (2FA) and securely manages session tokens. It is designed to run efficiently in the background, only downloading new or modified files to keep local backups perfectly in sync. It also ensures that all original metadata, such as EXIF tags and live photo components, are preserved during the transfer.

Apple users, data hoarders, and self-hosters who want complete, local control over their iCloud photo libraries. It is perfect for those looking to automate backups to a NAS or local storage without relying solely on Apple's ecosystem.

  • Incremental backups: Scans the remote library and only downloads files that are missing from the local destination.
  • 2FA support: Fully handles Apple's Two-Factor Authentication flow and securely stores the necessary session tokens.
  • Metadata preservation: Ensures that all EXIF data, location tags, and creation dates remain intact on the downloaded files.
  • Live Photo handling: Automatically downloads both the static image and the accompanying video file for Apple Live Photos.
  • Docker integration: Provides an official Docker image for easy deployment on NAS systems or home servers.

Where teams use it

Automated local backups

Users run the script via a daily cron job to ensure all their iPhone photos are securely backed up to a local hard drive.

Migrating away from iCloud

Individuals use the tool to completely download their massive photo libraries before canceling their iCloud storage subscription.

NAS media syncing

Home lab enthusiasts deploy the Docker container on their Synology or Unraid servers to keep a continuous, local mirror of their family photos.

Preserving original quality

Photographers use the tool to extract the untouched, original resolution RAW files and videos directly from the cloud.

Getting started: pip install icloudpd

README

master branch

iCloud Photos Downloader Quality Checks Build and Package MIT License

  • A command-line tool to download all your iCloud photos.
  • Works on Linux, Windows, and macOS; laptop, desktop, and NAS
  • Available as an executable for direct downloading and through package managers/ecosystems (Docker, PyPI, AUR, npm)
  • Developed and maintained by volunteers (we are always looking for help).

See Documentation for more details. Also, check Issues

We aim to release new versions once a week (Friday), if there is something worth delivering.

iCloud Prerequisites

To make iCloud Photo Downloader work, ensure the iCloud account is configured with the following settings, otherwise Apple Servers will return an ACCESS_DENIED error:

  • Enable Access iCloud Data on the Web: On your iPhone / iPad, enable Settings > Apple ID > iCloud > Access iCloud Data on the Web
  • Disable Advanced Data Protection: On your iPhone /iPad disable Settings > Apple ID > iCloud > Advanced Data Protection

Install and Run

There are three ways to run icloudpd:

  1. Download executable for your platform from the GitHub Release and run it
  2. Use package manager to install, update, and, in some cases, run (Docker, PyPI, AUR, npm)
  3. Build and run from the source

See Documentation for more details

Features

  • Three modes of operation:
    • Copy - download new photos from iCloud (default mode)
    • Sync - download new photos from iCloud and delete local files that were removed in iCloud (--auto-delete option)
    • Move - download new photos from iCloud and delete photos in iCloud (--keep-icloud-recent-days option)
  • Support for Live Photos (image and video as separate files) and RAW images (including RAW+JPEG)
  • Automatic de-duplication of photos with the same name
  • One time download and an option to monitor for iCloud changes continuously (--watch-with-interval option)
  • Optimizations for incremental runs (--until-found and --recent options)
  • Photo metadata (EXIF) updates (--set-exif-datetime option)
  • ... and many more (use --help option to get full list)

Experimental Mode

Some changes are added to the experimental mode before they graduate into the main package. Details

Usage

To keep your iCloud photo collection synchronized to your local system:

icloudpd --directory /data --username [email protected] --watch-with-interval 3600

Important

It is icloudpd, not icloud executable

Tip

Synchronization logic can be adjusted with command-line parameters. Run icloudpd --help to get full list.

To independently create and authorize a session (and complete 2SA/2FA validation if needed) on your local system:

icloudpd --username [email protected] --password my_password --auth-only

Tip

This feature can also be used to check and verify that the session is still authenticated.

Contributing

Want to contribute to iCloud Photos Downloader? Awesome! Check out the contributing guidelines to get involved.

View on GitHub

Recent activity

commits and pull requests

Recent open issues

view all

Discussions

all 132

Releases and announcements

81 total
  1. v1.32.3v1.32.3May 30, 202610K downloads

    ## 1.32.3 (2026-05-29) - fix: restore 2FA for Apple's updated auth flow (2026+) [#1322]https://github.com/icloud-photos-downloader/icloud_photos_downloader/issues/1322 - fix: Update staticx to 0.14.2 with --no-build-isolation to resolve pkg_resources and SCons build failures on Python 3.13/Trixie - fix: Update Dockerfile.build-musl Alpine base from 3.19 to 3.23 to resolve Cargo lock file version 4 incompatibility ## Minimal Effort Compatibility Checks if `icloudpd` can be installed using minimal effort and ran bare minimum functionality of displaying a version information. Minimal effort may require installing default version of package manager using OS tools Version: version:1.32.3, commit sha:879c561, commit timestamp:Sat May 30 21:42:22 2026 UTC Compatibility rate: 48.3% (168 passed out of 348) Legend: - N/A - not applicable/available - pass - test pass - fail - test fail - pass (src) - Test pass using src (for pip) ### bin Compatibility rate: 95.1% (77 passed out of 81) OSes and distros|amd64|arm64|arm32v7 -|-|-|- alpine_3_10|pass|pass|pass alpine_3_11|pass|pass|pass alpine_3_12|pass|pass|pass alpine_3_13|pass|pass|pass alpine_3_14|pass|pass|pass alpine_3_15|pass|pass|p

  2. v1.32.2v1.32.2Sep 2, 202515.6K downloads

    ## 1.32.2 (2025-09-01) - fix: HTTP response content not captured for authentication and non-streaming requests [#1240](https://github.com/icloud-photos-downloader/icloud_photos_downloader/issues/1240) - fix: `--only-print-filenames` downloads live photo video files during deduplication [#1220](https://github.com/icloud-photos-downloader/icloud_photos_downloader/issues/1220) ## Minimal Effort Compatibility Checks if `icloudpd` can be installed using minimal effort and ran bare minimum functionality of displaying a version information. Minimal effort may require installing default version of package manager using OS tools Version: version:1.32.2, commit sha:dd5a421, commit timestamp:Tue Sep 2 00:53:56 2025 UTC Compatibility rate: 60.6% (211 passed out of 348) Legend: - N/A - not applicable/available - pass - test pass - fail - test fail - pass (src) - Test pass using src (for pip) ### bin Compatibility rate: 95.1% (77 passed out of 81) OSes and distros|amd64|arm64|arm32v7 -|-|-|- alpine_3_10|pass|pass|pass alpine_3_11|pass|pass|pass alpine_3_12|pass|pass|pass alpine_3_13|pass|pass|pass alpine_3_14|pass|pass|pass alpine_3_15|pass|pass|pass alpine_3_16|pass|pass|pass alpine_3_1

  3. v1.32.1v1.32.1Aug 31, 2025701 downloads

    ## 1.32.1 (2025-08-30) - fix: KeyError when downloading photos with --size adjusted --size alternative options [#926](https://github.com/icloud-photos-downloader/icloud_photos_downloader/issues/926) ## Minimal Effort Compatibility Checks if `icloudpd` can be installed using minimal effort and ran bare minimum functionality of displaying a version information. Minimal effort may require installing default version of package manager using OS tools Version: version:1.32.1, commit sha:e47fe6b, commit timestamp:Sun Aug 31 02:44:54 2025 UTC Compatibility rate: 60.6% (211 passed out of 348) Legend: - N/A - not applicable/available - pass - test pass - fail - test fail - pass (src) - Test pass using src (for pip) ### bin Compatibility rate: 95.1% (77 passed out of 81) OSes and distros|amd64|arm64|arm32v7 -|-|-|- alpine_3_10|pass|pass|pass alpine_3_11|pass|pass|pass alpine_3_12|pass|pass|pass alpine_3_13|pass|pass|pass alpine_3_14|pass|pass|pass alpine_3_15|pass|pass|pass alpine_3_16|pass|pass|pass alpine_3_17|pass|pass|pass alpine_3_18|pass|pass|pass alpine_3_19|pass|pass|pass alpine_3_20|pass|pass|pass alpine_3_21|pass|pass|pass alpine_3_22|pass|pass|pass debian_10_buster|pass|pas

  4. v1.32.0v1.32.0Aug 29, 2025555 downloads

    ## 1.32.0 (2025-08-29) - feat: support multiple user configurations in single command [#1067](https://github.com/icloud-photos-downloader/icloud_photos_downloader/issues/1067) [#923](https://github.com/icloud-photos-downloader/icloud_photos_downloader/issues/923) ## Minimal Effort Compatibility Checks if `icloudpd` can be installed using minimal effort and ran bare minimum functionality of displaying a version information. Minimal effort may require installing default version of package manager using OS tools Version: version:1.32.0, commit sha:9519784, commit timestamp:Fri Aug 29 16:51:00 2025 UTC Compatibility rate: 60.6% (211 passed out of 348) Legend: - N/A - not applicable/available - pass - test pass - fail - test fail - pass (src) - Test pass using src (for pip) ### bin Compatibility rate: 95.1% (77 passed out of 81) OSes and distros|amd64|arm64|arm32v7 -|-|-|- alpine_3_10|pass|pass|pass alpine_3_11|pass|pass|pass alpine_3_12|pass|pass|pass alpine_3_13|pass|pass|pass alpine_3_14|pass|pass|pass alpine_3_15|pass|pass|pass alpine_3_16|pass|pass|pass alpine_3_17|pass|pass|pass alpine_3_18|pass|pass|pass alpine_3_19|pass|pass|pass alpine_3_20|pass|pass|pass alpine_3_21|pa

  5. v1.31.0v1.31.0Aug 20, 20251.2K downloads

    ## 1.31.0 (2025-08-20) - fix: OOMing on large downloads [#1214](https://github.com/icloud-photos-downloader/icloud_photos_downloader/issues/1214) - feat: support downloading from multiple albums [#738](https://github.com/icloud-photos-downloader/icloud_photos_downloader/issues/738) [#438](https://github.com/icloud-photos-downloader/icloud_photos_downloader/issues/438) ## Minimal Effort Compatibility Checks if `icloudpd` can be installed using minimal effort and ran bare minimum functionality of displaying a version information. Minimal effort may require installing default version of package manager using OS tools Version: version:1.31.0, commit sha:2f77ee5, commit timestamp:Wed Aug 20 12:49:06 2025 UTC Compatibility rate: 67.7% (233 passed out of 344) Legend: - N/A - not applicable/available - pass - test pass - fail - test fail - pass (src) - Test pass using src (for pip) ### bin Compatibility rate: 93.8% (76 passed out of 81) OSes and distros|amd64|arm64|arm32v7 -|-|-|- alpine_3_10|pass|pass|pass alpine_3_11|pass|pass|pass alpine_3_12|pass|pass|pass alpine_3_13|pass|pass|pass alpine_3_14|pass|fail|pass alpine_3_15|pass|pass|pass alpine_3_16|pass|pass|pass alpine_3_17|pas

Code frequency

additions and deletions
+129-129Week of 2025-09-28: +0 linesWeek of 2025-09-28: -0 linesWeek of 2025-10-05: +0 linesWeek of 2025-10-05: -0 linesWeek of 2025-10-12: +0 linesWeek of 2025-10-12: -0 linesWeek of 2025-10-19: +0 linesWeek of 2025-10-19: -0 linesWeek of 2025-10-26: +0 linesWeek of 2025-10-26: -0 linesWeek of 2025-11-02: +0 linesWeek of 2025-11-02: -0 linesWeek of 2025-11-09: +0 linesWeek of 2025-11-09: -0 linesWeek of 2025-11-16: +0 linesWeek of 2025-11-16: -0 linesWeek of 2025-11-23: +0 linesWeek of 2025-11-23: -0 linesWeek of 2025-11-30: +0 linesWeek of 2025-11-30: -0 linesWeek of 2025-12-07: +0 linesWeek of 2025-12-07: -0 linesWeek of 2025-12-14: +0 linesWeek of 2025-12-14: -0 linesWeek of 2025-12-21: +0 linesWeek of 2025-12-21: -0 linesWeek of 2025-12-28: +0 linesWeek of 2025-12-28: -0 linesWeek of 2026-01-04: +2 linesWeek of 2026-01-04: -0 linesWeek of 2026-01-11: +0 linesWeek of 2026-01-11: -0 linesWeek of 2026-01-18: +0 linesWeek of 2026-01-18: -0 linesWeek of 2026-01-25: +0 linesWeek of 2026-01-25: -0 linesWeek of 2026-02-01: +0 linesWeek of 2026-02-01: -0 linesWeek of 2026-02-08: +0 linesWeek of 2026-02-08: -0 linesWeek of 2026-02-15: +0 linesWeek of 2026-02-15: -0 linesWeek of 2026-02-22: +0 linesWeek of 2026-02-22: -0 linesWeek of 2026-03-01: +0 linesWeek of 2026-03-01: -0 linesWeek of 2026-03-08: +0 linesWeek of 2026-03-08: -0 linesWeek of 2026-03-15: +0 linesWeek of 2026-03-15: -0 linesWeek of 2026-03-22: +0 linesWeek of 2026-03-22: -0 linesWeek of 2026-03-29: +0 linesWeek of 2026-03-29: -0 linesWeek of 2026-04-05: +0 linesWeek of 2026-04-05: -0 linesWeek of 2026-04-12: +129 linesWeek of 2026-04-12: -4 linesWeek of 2026-04-19: +0 linesWeek of 2026-04-19: -0 linesWeek of 2026-04-26: +0 linesWeek of 2026-04-26: -0 linesWeek of 2026-05-03: +0 linesWeek of 2026-05-03: -0 linesWeek of 2026-05-10: +0 linesWeek of 2026-05-10: -0 linesWeek of 2026-05-17: +0 linesWeek of 2026-05-17: -0 linesWeek of 2026-05-24: +56 linesWeek of 2026-05-24: -29 linesWeek of 2026-05-31: +0 linesWeek of 2026-05-31: -0 linesWeek of 2026-06-07: +0 linesWeek of 2026-06-07: -0 linesWeek of 2026-06-14: +0 linesWeek of 2026-06-14: -0 linesWeek of 2026-06-21: +0 linesWeek of 2026-06-21: -0 linesWeek of 2026-06-28: +0 linesWeek of 2026-06-28: -0 linesWeek of 2026-07-05: +0 linesWeek of 2026-07-05: -0 linesWeek of 2026-07-12: +0 linesWeek of 2026-07-12: -0 linesWeek of 2026-07-19: +0 linesWeek of 2026-07-19: -0 linesWeek of 2026-07-26: +0 linesWeek of 2026-07-26: -0 linesWeek of 2026-08-02: +0 linesWeek of 2026-08-02: -0 linesWeek of 2026-08-09: +0 linesWeek of 2026-08-09: -0 linesWeek of 2026-08-16: +0 linesWeek of 2026-08-16: -0 linesWeek of 2026-08-23: +0 linesWeek of 2026-08-23: -0 linesWeek of 2026-08-30: +0 linesWeek of 2026-08-30: -0 linesWeek of 2026-09-06: +0 linesWeek of 2026-09-06: -0 linesWeek of 2026-09-13: +0 linesWeek of 2026-09-13: -0 linesWeek of 2026-09-20: +0 linesWeek of 2026-09-20: -0 linesSep 28, 2025Sep 20, 2026
+187 lines added, -33 removed over the last year.

Commits per week

last 52 weeks
120Week of 2025-09-28: 0 commitsWeek of 2025-10-05: 0 commitsWeek of 2025-10-12: 0 commitsWeek of 2025-10-19: 0 commitsWeek of 2025-10-26: 0 commitsWeek of 2025-11-02: 0 commitsWeek of 2025-11-09: 0 commitsWeek of 2025-11-16: 0 commitsWeek of 2025-11-23: 0 commitsWeek of 2025-11-30: 0 commitsWeek of 2025-12-07: 0 commitsWeek of 2025-12-14: 0 commitsWeek of 2025-12-21: 0 commitsWeek of 2025-12-28: 0 commitsWeek of 2026-01-04: 1 commitsWeek of 2026-01-11: 0 commitsWeek of 2026-01-18: 0 commitsWeek of 2026-01-25: 0 commitsWeek of 2026-02-01: 0 commitsWeek of 2026-02-08: 0 commitsWeek of 2026-02-15: 0 commitsWeek of 2026-02-22: 0 commitsWeek of 2026-03-01: 0 commitsWeek of 2026-03-08: 0 commitsWeek of 2026-03-15: 0 commitsWeek of 2026-03-22: 0 commitsWeek of 2026-03-29: 0 commitsWeek of 2026-04-05: 0 commitsWeek of 2026-04-12: 1 commitsWeek of 2026-04-19: 0 commitsWeek of 2026-04-26: 0 commitsWeek of 2026-05-03: 0 commitsWeek of 2026-05-10: 0 commitsWeek of 2026-05-17: 0 commitsWeek of 2026-05-24: 12 commitsWeek of 2026-05-31: 0 commitsWeek of 2026-06-07: 0 commitsWeek of 2026-06-14: 0 commitsWeek of 2026-06-21: 0 commitsWeek of 2026-06-28: 0 commitsWeek of 2026-07-05: 0 commitsWeek of 2026-07-12: 0 commitsWeek of 2026-07-19: 0 commitsWeek of 2026-07-26: 0 commitsWeek of 2026-08-02: 0 commitsWeek of 2026-08-09: 0 commitsWeek of 2026-08-16: 0 commitsWeek of 2026-08-23: 0 commitsWeek of 2026-08-30: 0 commitsWeek of 2026-09-06: 0 commitsWeek of 2026-09-13: 0 commitsWeek of 2026-09-20: 0 commitsSep 28, 2025Sep 20, 2026
14 commits in the last 52 weeks.

When work happens

weekday and hour
SunMonTueWedThuFriSat036912151821Sun 0:00 — 6 commitsSun 1:00 — 0 commitsSun 2:00 — 7 commitsSun 3:00 — 10 commitsSun 4:00 — 6 commitsSun 5:00 — 1 commitsSun 6:00 — 3 commitsSun 7:00 — 5 commitsSun 8:00 — 9 commitsSun 9:00 — 6 commitsSun 10:00 — 4 commitsSun 11:00 — 6 commitsSun 12:00 — 1 commitsSun 13:00 — 6 commitsSun 14:00 — 3 commitsSun 15:00 — 5 commitsSun 16:00 — 1 commitsSun 17:00 — 7 commitsSun 18:00 — 5 commitsSun 19:00 — 10 commitsSun 20:00 — 5 commitsSun 21:00 — 2 commitsSun 22:00 — 4 commitsSun 23:00 — 3 commitsMon 0:00 — 4 commitsMon 1:00 — 18 commitsMon 2:00 — 2 commitsMon 3:00 — 3 commitsMon 4:00 — 2 commitsMon 5:00 — 0 commitsMon 6:00 — 0 commitsMon 7:00 — 18 commitsMon 8:00 — 3 commitsMon 9:00 — 10 commitsMon 10:00 — 3 commitsMon 11:00 — 3 commitsMon 12:00 — 4 commitsMon 13:00 — 3 commitsMon 14:00 — 4 commitsMon 15:00 — 4 commitsMon 16:00 — 7 commitsMon 17:00 — 17 commitsMon 18:00 — 4 commitsMon 19:00 — 5 commitsMon 20:00 — 12 commitsMon 21:00 — 13 commitsMon 22:00 — 10 commitsMon 23:00 — 2 commitsTue 0:00 — 3 commitsTue 1:00 — 4 commitsTue 2:00 — 4 commitsTue 3:00 — 3 commitsTue 4:00 — 12 commitsTue 5:00 — 3 commitsTue 6:00 — 16 commitsTue 7:00 — 6 commitsTue 8:00 — 3 commitsTue 9:00 — 5 commitsTue 10:00 — 7 commitsTue 11:00 — 10 commitsTue 12:00 — 5 commitsTue 13:00 — 5 commitsTue 14:00 — 4 commitsTue 15:00 — 2 commitsTue 16:00 — 4 commitsTue 17:00 — 3 commitsTue 18:00 — 8 commitsTue 19:00 — 1 commitsTue 20:00 — 5 commitsTue 21:00 — 4 commitsTue 22:00 — 9 commitsTue 23:00 — 6 commitsWed 0:00 — 1 commitsWed 1:00 — 7 commitsWed 2:00 — 3 commitsWed 3:00 — 2 commitsWed 4:00 — 2 commitsWed 5:00 — 4 commitsWed 6:00 — 6 commitsWed 7:00 — 6 commitsWed 8:00 — 2 commitsWed 9:00 — 1 commitsWed 10:00 — 7 commitsWed 11:00 — 1 commitsWed 12:00 — 3 commitsWed 13:00 — 2 commitsWed 14:00 — 1 commitsWed 15:00 — 3 commitsWed 16:00 — 6 commitsWed 17:00 — 8 commitsWed 18:00 — 5 commitsWed 19:00 — 11 commitsWed 20:00 — 4 commitsWed 21:00 — 7 commitsWed 22:00 — 13 commitsWed 23:00 — 6 commitsThu 0:00 — 0 commitsThu 1:00 — 1 commitsThu 2:00 — 1 commitsThu 3:00 — 3 commitsThu 4:00 — 5 commitsThu 5:00 — 0 commitsThu 6:00 — 4 commitsThu 7:00 — 4 commitsThu 8:00 — 6 commitsThu 9:00 — 3 commitsThu 10:00 — 7 commitsThu 11:00 — 3 commitsThu 12:00 — 2 commitsThu 13:00 — 5 commitsThu 14:00 — 10 commitsThu 15:00 — 9 commitsThu 16:00 — 5 commitsThu 17:00 — 5 commitsThu 18:00 — 4 commitsThu 19:00 — 1 commitsThu 20:00 — 7 commitsThu 21:00 — 6 commitsThu 22:00 — 6 commitsThu 23:00 — 6 commitsFri 0:00 — 4 commitsFri 1:00 — 2 commitsFri 2:00 — 0 commitsFri 3:00 — 5 commitsFri 4:00 — 1 commitsFri 5:00 — 2 commitsFri 6:00 — 2 commitsFri 7:00 — 4 commitsFri 8:00 — 7 commitsFri 9:00 — 3 commitsFri 10:00 — 3 commitsFri 11:00 — 7 commitsFri 12:00 — 5 commitsFri 13:00 — 1 commitsFri 14:00 — 1 commitsFri 15:00 — 7 commitsFri 16:00 — 12 commitsFri 17:00 — 9 commitsFri 18:00 — 6 commitsFri 19:00 — 3 commitsFri 20:00 — 5 commitsFri 21:00 — 4 commitsFri 22:00 — 4 commitsFri 23:00 — 1 commitsSat 0:00 — 3 commitsSat 1:00 — 2 commitsSat 2:00 — 0 commitsSat 3:00 — 0 commitsSat 4:00 — 0 commitsSat 5:00 — 5 commitsSat 6:00 — 0 commitsSat 7:00 — 6 commitsSat 8:00 — 8 commitsSat 9:00 — 8 commitsSat 10:00 — 9 commitsSat 11:00 — 9 commitsSat 12:00 — 3 commitsSat 13:00 — 3 commitsSat 14:00 — 7 commitsSat 15:00 — 8 commitsSat 16:00 — 17 commitsSat 17:00 — 4 commitsSat 18:00 — 11 commitsSat 19:00 — 17 commitsSat 20:00 — 11 commitsSat 21:00 — 7 commitsSat 22:00 — 7 commitsSat 23:00 — 8 commits
Commit volume by weekday and hour (UTC). Larger dots mean more commits.
DateListRankStars gained
Jan 12, 2026daily#11+243