Skip to content
Graham Pugh edited this page Oct 18, 2026 · 39 revisions

JamfUploader

Introduction

JamfUploader is the name given to a set of AutoPkg Processors designed to interact with Jamf Pro. Most (but not all) of these processors are concerned with uploading things to a Jamf Pro Server. The Jamf Pro, Classic, and Platform APIs are supported. For a full list of processors, see the Processors section.

These may be added to AutoPkg recipes in sequence, to perform simple or complex workflows involving the Jamf Pro API.

For an introduction into JamfUploader, watch the 2021 JNUC presentation Making package uploading and deployment easier with JamfUploader by Graham Pugh and Anthony Reimer.

Note

This repo contains the latest version of the JamfUploader processors.

Stable versions of the processors are hosted in the autopkg/grahampugh-recipes repo, in the JamfUploaderProcessors folder).

Using the processors

To use the processors, you need to add the grahampugh-recipes repo to your AutoPkg preferences:

autopkg repo-add grahampugh-recipes

Or, if you want the bleeding-edge development versions, add the Jamf-upload repo:

autopkg repo-add grahampugh/jamf-upload

Note that if you add both, the first one in the search hierarchy will win. So typically you'll want to ensure that the jamf-upload repo is higher up the list.

In a recipe in plist format, you call the processor as follows (in this example we are calling JamfPackageUploader):

<dict>
    <key>Processor</key>
    <string>com.github.grahampugh.jamf-upload.processors/JamfPackageUploader</string>
</dict>

In a recipe in yaml format, this would look like:

Processor: com.github.grahampugh.jamf-upload.processors/JamfPackageUploader

jamf-upload.sh Script

The jamf-upload.sh script provides a way of utilising the framework provided by the JamfUploader processors, without writing recipes. This is most useful for simple, one-off tasks such as uploading a script or package, or deleting an object. It is designed to be run using command line flags, which means it can be called as part of wrapper scripts that may perform repetitive identifiable tasks, reducing the need for writing bespoke API scripts or commands, or using tools like Postman.

For more information and usage instructions, please go to the jamf-upload.sh wiki page.


Resources

The JamfUploader project has been mentioned in various blog posts and presentations. Here are some I found, please feel free to send me any missing links:


Acknowledgements

The following people have contributed especially significantly to this project:

  • @zackn9ne - early contributions to the python project.
  • @MLBZ521 - various functionality improvements and bug fixes.
  • @Marschelloss - contributed the JamfPatchUploader and JamfDockItemUploader processors.
  • @jc0b - contributed the JamfUploaderTeamsNotifier processor.
  • @everettallen - provided additional help with Notifier processors.
  • @novaksam - helped provide code to support multiple package distribution points for JamfPackageUploader.
  • @mosen and @rodgerramjet - provided the logic for jcds_mode (now deprecated).
  • @cr3ation - contributed the JamfPackageCleaner processor.
  • @neilmartin83 - contributed the JamfScopeAdjuster and JamfExtensionAttributePopupChoiceAdjuster processors.
  • @jazzace - has contributed to the project's documentation and knowledge sharing in many ways
  • @mpanighetti - also helped with documentation

Many other people have also made contributions to this project, be that via GitHub PRs, Issues, or feedback in the MacAdmins Slack. Thank you all!


Additional Resources

JamfCLIRunner

JamfCLIRunner is a sister processor to JamfUploader. JamfCLIRunner uses the jamf-cli tool as the API engine. This allows AutoPkg recipes to be constructed not only for Jamf Pro/Classic API endpoints, but also for Jamf Platform, Protect, and School API endpoints.

Jamf-API-Tool

The Jamf-API-Tool uses the Jamf Pro/Classic API endpoints to perform discovery tasks, such as finding unused packages. Please go to Jamf API Tool

Clone this wiki locally