Patcher

A Python package and CLI for patch analysis and reporting on macOS fleets managed by Jamf Pro.


Key Features

Analysis

Cross-reference Jamf Pro’s patch-management view of your fleet against Installomator, Homebrew, AutoPkg, and Jamf App Installers.

CLI
Reporting

Export customizable reports into PDF, Excel, HTML and JSON formats tailored to a tracked Jamf Pro instance.

CLI
Catalog API

A community-facing API stitching upstream application sources into a single queryable surface.

Endpoints
Library & CLI

Use as patcherctl or import as a Python library; same operations either way.

Usage
Unattended Runs

Set it and forget it; recipes for automating Patcher with launchd and GitHub Actions support.

Automating Patcher
Custom branding

PDF and HTML reports take your header text, footer, fonts, logo and accent color to bring reports to life.

Customization

Quick Start

$ patcherctl export --path ./reports

First run launches the interactive setup wizard for your Jamf URL, API client ID, and secret. SSO instance? See Setup for the manual API-client path.

import asyncio
from patcher import PatcherClient

async def main():
    async with PatcherClient(
        client_id="...",
        client_secret="...",
        server="https://yourorg.jamfcloud.com",
    ) as patcher:
        titles = await patcher.fetch_patches()
        await patcher.export(titles, output_dir="./reports", formats={"pdf"})

asyncio.run(main())

If you’ve already run setup on this Mac, swap to PatcherClient.from_state() to pick up existing configurations.

Getting Help

MacAdmins Slack

Join the #patcher channel and say hi.

https://macadmins.slack.com/archives/C07EH1R7LB0
GitHub Issues

Report bugs or submit feedback and feature requests.

https://github.com/liquidz00/Patcher/issues/new?template=bug_report.yml

License

Patcher is licensed under the Apache License 2.0. See the LICENSE file for details.


Built with 💙 for the MacAdmins community