{"id":15715807,"url":"https://github.com/domt4/homebrew-autoupdate","last_synced_at":"2026-10-19T12:42:21.005Z","repository":{"id":30841694,"uuid":"34399150","full_name":"DomT4/homebrew-autoupdate","owner":"DomT4","description":":tropical_drink: An easy, convenient way to automatically update Homebrew.","archived":false,"fork":false,"pushed_at":"2026-09-17T19:28:35.000Z","size":1022,"stargazers_count":1510,"open_issues_count":5,"forks_count":75,"subscribers_count":12,"default_branch":"main","last_synced_at":"2026-10-15T03:29:34.252Z","etag":null,"topics":["homebrew","homebrew-autoupdate","ruby"],"latest_commit_sha":null,"homepage":"","language":"Ruby","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-2-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/DomT4.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"claude":null,"gemini":null,"cursor":null,"copilot":null,"dco":null,"cla":null,"disclosure":null},"funding":{"buy_me_a_coffee":"dom_t4"}},"created_at":"2015-04-22T15:36:13.000Z","updated_at":"2026-10-10T09:40:55.000Z","dependencies_parsed_at":"2026-09-22T01:11:55.694Z","dependency_job_id":null,"html_url":"https://github.com/DomT4/homebrew-autoupdate","commit_stats":{"total_commits":241,"total_committers":28,"mean_commits":8.607142857142858,"dds":"0.34024896265560167","last_synced_commit":"e0cf8d7762f35eb7558a35098909431887839bee"},"previous_names":["homebrew/homebrew-autoupdate"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/DomT4/homebrew-autoupdate","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DomT4%2Fhomebrew-autoupdate","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DomT4%2Fhomebrew-autoupdate/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DomT4%2Fhomebrew-autoupdate/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DomT4%2Fhomebrew-autoupdate/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/DomT4","download_url":"https://codeload.github.com/DomT4/homebrew-autoupdate/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DomT4%2Fhomebrew-autoupdate/sbom","scorecard":{"id":41614,"data":{"date":"2025-08-11","repo":{"name":"github.com/DomT4/homebrew-autoupdate","commit":"0304d73c2409fae061dc9a16d5bbc236fd87277f"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":5.9,"checks":[{"name":"Maintained","score":10,"reason":"30 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Code-Review","score":7,"reason":"Found 5/7 approved changesets -- score normalized to 7","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Binary-Artifacts","score":9,"reason":"binaries present in source code","details":["Warn: binary detected: notifier/brew-autoupdate.app/Contents/MacOS/applet:1"],"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: jobLevel 'contents' permission set to 'write': .github/workflows/stale-issues.yml:36","Warn: jobLevel 'contents' permission set to 'write': .github/workflows/stale-issues.yml:66","Warn: topLevel 'contents' permission set to 'write': .github/workflows/generate-help-output.yml:7","Info: found token with 'none' permissions: .github/workflows/stale-issues.yml:1","Info: topLevel 'contents' permission set to 'read': .github/workflows/tests.yml:3"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Pinned-Dependencies","score":3,"reason":"dependency not pinned by hash detected -- score normalized to 3","details":["Warn: third-party GitHubAction not pinned by hash: .github/workflows/generate-help-output.yml:16: update your workflow using https://app.stepsecurity.io/secureworkflow/DomT4/homebrew-autoupdate/generate-help-output.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/tests.yml:16: update your workflow using https://app.stepsecurity.io/secureworkflow/DomT4/homebrew-autoupdate/tests.yml/master?enable=pin","Info:   4 out of   4 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   2 third-party GitHubAction dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE.txt:0","Info: FSF or OSI recognized license: BSD 2-Clause \"Simplified\" License: LICENSE.txt:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":3,"reason":"SAST tool is not run on all commits -- score normalized to 3","details":["Warn: 9 commits out of 30 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-14T21:42:23.394Z","repository_id":30841694,"created_at":"2025-08-14T21:42:23.394Z","updated_at":"2025-08-14T21:42:23.394Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":344872684,"owners_count":38356471,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-10-03T21:59:58.778Z","status":"online","status_checked_at":"2026-10-19T02:00:06.414Z","response_time":53,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["homebrew","homebrew-autoupdate","ruby"],"created_at":"2024-10-03T21:43:08.716Z","updated_at":"2026-10-19T12:42:20.997Z","avatar_url":"https://github.com/DomT4.png","language":"Ruby","funding_links":["https://buymeacoffee.com/dom_t4"],"categories":[],"sub_categories":[],"readme":"# Homebrew Autoupdate\n\nAn easy, convenient way to automatically update Homebrew.\n\nThis script will run `brew update` in the background once every 24 hours (by\ndefault) until explicitly told to stop, utilising `launchd`.\n\n`brew upgrade` and `brew cleanup` can also be handled automatically, but\nare optional flags.\n\nNotifications are enabled by default using a code-signed, universal macOS app.\nPass `--notify-on-error` to suppress successful-run notifications, or\n`--no-notify` to disable notifications entirely.\n\n![A comic highlighting humanity's habit of skipping important updates](https://imgs.xkcd.com/comics/update.png)\n\n## Installing this command\n\nTap the repository and trust its external command:\n\n```sh\nbrew tap domt4/autoupdate\nbrew trust --command domt4/autoupdate/autoupdate\n```\n\nHomebrew is moving towards requiring explicit trust before loading commands\nfrom non-official taps. Command-scoped trust is recommended here because it\npermits only `brew autoupdate`; it does not trust every current or future\nformula, cask, or command in this tap.\n\nExisting users who see an untrusted tap warning can run the `brew trust`\ncommand above. When trust enforcement is enabled, an already installed launch\nagent will continue running its scheduled built-in `brew update`, `upgrade`,\nand `cleanup` commands. Management commands such as `brew autoupdate status`,\n`stop`, or `delete` will be unavailable until `autoupdate` is trusted.\n\nSee [Homebrew's tap trust documentation](https://docs.brew.sh/Tap-Trust) and\n[issue #222](https://github.com/DomT4/homebrew-autoupdate/issues/222) for\nbackground.\n\nNow run `brew autoupdate start [interval] [options]` to enable autoupdate.\nThe interval defaults to 24 hours and accepts seconds or a short duration such\nas `30m`, `12h`, or `1d`, or a 24-hour clock time such as `00:00` to run daily\nat that specific time instead of relative to when the command was run.\n\n_Note:_\n_To ensure that auto-updated cask-based apps are updated in place (so they stay on your Dock), add `~/Library/Application Support/com.github.domt4.homebrew-autoupdate/brew_autoupdate` to System Settings / Privacy and Security / App Management. (Also allow ruby and Terminal.app)_\n\n## Example\n\n```sh\nbrew autoupdate start 12h --upgrade --cleanup --immediate --sudo\n```\n\nThis will upgrade all your casks and formulae every 12 hours and on every system boot.\nIf a sudo password is required for an upgrade, a GUI to enter your password will be displayed.\nAlso, it will clean up every old version and left-over files.\n\nCasks that have built-in auto-updates enabled by default will not be upgraded.\n\n### Upgrade Only Specific Packages\n\n```sh\nbrew autoupdate start 12h --upgrade --only=wget,node,firefox\n```\n\nThis will only auto-upgrade `wget`, `node`, and `firefox` every 12 hours,\nleaving all other installed packages untouched. Both formulae and casks are\nsupported, including tap-qualified names (`homebrew/cask/firefox`) and\nversioned formulae (`node@20`).\n\nCannot be combined with `--leaves-only`. To change which packages are\nauto-upgraded, run `brew autoupdate delete` then start again with the new list.\n\n### Run at a specific time every day\n\n```sh\nbrew autoupdate start 00:00 --upgrade --cleanup\n```\n\nInstead of a duration, pass a 24-hour clock time (`HH:MM`) to schedule the run\nvia `launchd`'s `StartCalendarInterval` at that exact wall-clock time every\nday, rather than a relative interval measured from whenever the command was\nrun (which drifts and won't line up with midnight, or any other fixed time,\nover repeated runs).\n\n## Usage\n\n\u003c!-- HELP-COMMAND-OUTPUT:START --\u003e\n\n```help\nFrom tap: domt4/autoupdate\nUsage: brew autoupdate subcommand [options]\n\nAn easy, convenient way to automatically update Homebrew.\n\nThis script will run brew update in the background once every 24 hours (by\ndefault) until explicitly told to stop, utilising launchd.\n\nStart autoupdating with:\n  brew autoupdate start [interval] [options]\n\nThe interval defaults to 24 hours. It can be provided as seconds or as a\nduration such as 30m, 12h, 1d, or 1w, or as a 24-hour clock time such as\n00:00 to run daily at that specific time instead of relative to when the\ncommand was run.\n\nCommon start options:\n  --upgrade upgrades installed formulae and casks.\n  --cleanup cleans Homebrew's cache and logs after a successful run.\n  --immediate runs immediately and whenever the launch agent is loaded.\n  --only=wget,node,firefox upgrades only the listed packages.\n  --leaves-only upgrades only top-level formulae.\n  --greedy includes auto-updating casks.\n  --sudo enables a GUI password prompt for cask upgrades.\n  --ac-only skips runs while the Mac is on battery power.\n  --notify-on-error shows notifications only for failed runs.\n  --no-notify disables notifications.\n\nExamples:\n  brew autoupdate start\n  brew autoupdate start 12h --upgrade --cleanup --immediate\n  brew autoupdate start 1d --upgrade --only=wget,node,firefox\n  brew autoupdate start 00:00 --upgrade --cleanup\n  brew autoupdate logs --lines=50\n  brew autoupdate logs --follow\n\nRun brew autoupdate start --help or brew autoupdate logs --help for complete\noptions for those subcommands.\n\nSubcommands:\n  start:\n    Start autoupdating in the background.\n  stop:\n    Stop autoupdating while retaining the launch agent, configuration, and logs.\n  delete:\n    Stop autoupdating and delete its launch agent, configuration, and logs.\n  status:\n    Show whether autoupdate is running and describe its installed configuration.\n  version:\n    Show this tool's current version and a short changelog.\n  logs:\n    Show output from autoupdate runs.\n\n  -d, --debug                      Display any debugging information.\n  -q, --quiet                      Make some output more quiet.\n  -v, --verbose                    Make some output more verbose.\n  -h, --help                       Show this message.\n\nFrom tap: domt4/autoupdate\nUsage: brew autoupdate start [interval] [options]:\n    Start autoupdating in the background. The interval defaults to 24 hours and\naccepts seconds or a suffix such as 30m, 12h, or 1d, or a 24-hour clock\ntime such as 00:00 to run daily at that specific time.\n\n  -d, --debug                      Display any debugging information.\n  -q, --quiet                      Make some output more quiet.\n  -v, --verbose                    Make some output more verbose.\n  -h, --help                       Show this message.\n      --upgrade                    Automatically upgrade installed formulae and\n                                   casks.\n      --greedy                     Include auto-updating casks when upgrading.\n      --cleanup                    Automatically clean Homebrew's cache and\n                                   logs.\n      --immediate                  Run immediately and on login instead of\n                                   waiting for the first interval.\n      --sudo                       Open a GUI password prompt when a cask\n                                   upgrade requires sudo. Requires\n                                   pinentry-mac to be installed.\n      --leaves-only                Upgrade only top-level formulae that are not\n                                   dependencies.\n      --only                       Upgrade only these formulae and/or casks\n                                   (comma-separated). Requires --upgrade.\n      --ac-only                    Run only while the Mac is connected to AC\n                                   power.\n      --notify-on-error            Notify only when an autoupdate run fails.\n      --no-notify                  Disable autoupdate notifications.\n\nFrom tap: domt4/autoupdate\nUsage: brew autoupdate logs [options]:\n    Show output from autoupdate runs.\n\n  -d, --debug                      Display any debugging information.\n  -q, --quiet                      Make some output more quiet.\n  -v, --verbose                    Make some output more verbose.\n  -h, --help                       Show this message.\n  -f, --follow                     Follow the log as new output is written.\n  -n, --lines                      Show this many lines from the end of the log.\n                                   Defaults to 10.\n```\n\n\u003c!-- HELP-COMMAND-OUTPUT:END --\u003e\n\n**Logs of the performed operations can be found at:** `~/Library/Logs/com.github.domt4.homebrew-autoupdate`\n\n## This vs `brew`'s built-in autoupdate mechanism\n\nThis command mostly exists to ensure Homebrew is updated regardless of whether\nyou invoke `brew` or not, which is the primary difference from the autoupdate\nmechanism built into `brew`, the latter requiring a user to explicitly run\nany of `brew install`, `brew tap` or `brew upgrade`.\n\nIf you run `brew` commands regularly yourself, you may wish to consider using\nthe built-in autoupdate mechanism, which can be instructed to autoupdate less\noften, or disabled entirely. If you wish to update every 24 hours using the\nbuilt-in autoupdate mechanism set this in your environment:\n\n```sh\nexport HOMEBREW_AUTO_UPDATE_SECS=\"86400\"\n```\n\nor if you wish to disable the built-in autoupdate mechanism entirely:\n\n```sh\nexport HOMEBREW_NO_AUTO_UPDATE=\"1\"\n```\n\nPlease note that Homebrew slightly frowns upon people disabling the built-in\nautoupdate mechanism.\n\n## TO-DO (PRs Welcome)\n\n## History\n\nThis tap was created by [DomT4](https://github.com/DomT4) in April 2015 to\naddress a personal desire for a background updater, before being moved to\nthe Homebrew organisation in April 2021 to become an official part of the\nproject after gaining somewhat widespread usage, something I'm both surprised\nby, but also very appreciative of people finding a small tool I wrote so\nuseful \u0026 contributing their own ideas and time towards.\n\nIt was in late 2023 moved back to DomT4's ownership to reduce the burden on\nthe wider Homebrew leadership team in terms of maintenance/support requests.\n\n## License\n\nCode is under the [BSD 2 Clause (NetBSD) license](https://github.com/DomT4/homebrew-autoupdate/blob/master/LICENSE.txt).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdomt4%2Fhomebrew-autoupdate","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdomt4%2Fhomebrew-autoupdate","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdomt4%2Fhomebrew-autoupdate/lists"}