This is a collection of resources for macOS automation technologies. The resources have been organized by type, but there is otherwise no specific order to them. I recommend using Command+F to find materials relevant to your needs.
For each resource, links are provided for both the live website, where possible, and a Wayback Machine archive, where reasonable.
- π AppleScript Resources
- βοΈ AppScript Resources
- π€ Automator Resources
- π¨ Hammerspoon Resources
- βοΈ JXA Resources
- π PyObjC Resources
- β¬’ Raycast Resources
- π² Shortcuts Resources
- π¦ SwiftAutomation Resources
- π URL Scheme Resources
- Other Resources
Resource | Author/Owner | Type | Topics | Live Link | Archive Link |
---|---|---|---|---|---|
Getting Started with Alfred Workflows | Alfred App | Official Document | Tutorials, Examples | https://www.alfredapp.com/help/workflows/getting-started/ | Archive |
Alfred Forum | N/A | Forum | General Discussion, Tutorials, Examples, Bug Reports | https://www.alfredforum.com | Archive |
Alfred Workflows for Beginners | Richard Guay | Blog Post | Tutorial | https://computers.tutsplus.com/alfred-workflows-for-beginners--mac-55446t | Archive |
Alfred-Workflow for Python | deanishe | Developer Tool | N/A | https://www.deanishe.net/alfred-workflow/ | Archive |
- Alfred Gallery (Live Link)
- Awesome Alfred Workflows (Live Link)
- AlfredWorkflows.store
- Pacmax (Live Link)
- Packal (Live Link)
- vitorgalvao's Alfred Workflows (Live Link)
- ctwise's Alfred Workflows (Live Link)
- zenorocha's Alfred Workflows (Live Link)
- Alfred Workflows - learn-anything (Live Link)
- willfarrell's Alfred Workflows for Developers (Live Link)
- msoedov's Collection of Alfred3 Workflows
- AppleScript Overview - 2006
- AppleScript Language Guide Website
- AppleScript Language Guide PDF
- Mac Automation Scripting Guide
- AppleScript Release Notes
- AppleScript for Absolute Starters - Bert Altenburg (Borrow)
- AppleScript Programming - Wikibooks (Live Link)
- AppleScript: The Definitive Guide (Live Link)
- AppleScript Programming for the Absolute Beginner - Jerry Lee Ford Jr. (Paid, Live Link)
- AppleScript: The Comprehensive Guide to Scripting and Automation on Mac OS X - Hanaan Rosenthal (Paid, Live Link)
- Everyday AppleScriptObjC, Third Edition - Shane Stanley (Paid, Live Link)
- Sams teach yourself Applescript in 24 hours - Jesse Feiler (Borrow)
- AppleScript for the Internet - Ethan Wilde (Borrow)
- AppleScript : the missing manual - Adam Goldstein (Borrow)
- Danny Goodman's AppleScript Handbook (Borrow)
- Learn AppleScript - The Most Comprehensive Guide to Scripting and Automation on Mac OS X - Hamish Sanderson & Hanaan Rosenthal
- Basics of AppleScript - Nayan Seth
- APPLESCRIPT BASICS - Jerry Stratton
- A Beginner's Guide to AppleScript - Guy Hart-Davis
- The Tao of AppleScript - Derrick Schneider
- An introduction to Apple Script for Noobs - Tim Sullivan (Live Link)
- Complete overview of AppleScript - JoshsAppleTechHelper (Live Link)
- Apple WWDC 2001 Session 133 - AppleScript Overview
- Apple WWDC 2004 Session 723 - A Powerful Combination: AppleScript and QuickTime
- Mac OS X Automation Workshop (2 of 2) - Ben Waldie (Live Link)
- Giving your AppleScripts a Face Lift with AppleScriptObjC - Ben Waldie
- AppleScript Users Mailing List (Live Link)
- [email protected] (Live Link)
- Doug's AppleScripts (Live Link)
- The Robservatory (Live Link)
- iTunes AppleScript examples (command examples) - Alvin Alexander
- An AppleScript βcurrent timeβ example - Alvin Alexander
- Script a program that isn't scriptable - Alvin Alexander
- How to open a MacOS Terminal in the current Finder folder - Alvin Alexander
- How to customize AppleScript dialogs (dialog boxes buttons and icons) - Alvin Alexander
- Get the title of the current active Window/Document in Mac OS X - StackOverflow
- Resize frontmost two windows to fill screen - Mac OS X Hints - Window bounds, tiling, etc.
- Scripting the International preference pane - Mac OS X Hints
- Posting to a Discourse forum from AppleScript - alldritt
- Example of passing parameters from AppleScript to a Shortcut and getting the return - Dirk
- How can I copy the text displayed in a web page (not the HTML code)?
- How can I search for specific items in a folder?
- How do I change permissions of a file/folder?
- How can I check if a particular application is installed in the system?
- How can I check if a particular application is running?
- How can I tell the Finder to arrange all items in a folder by name?
- How do I rename a file, or a group of files?
- How can I move files in Folder A to the trash, except for Folder B?
- How can I use a command, but not wait for it to be finished?
- How can I configure a script to launch at startup?
- Introduction to AppleScript - Stephen Swift
- What is a folder action and how do I use one?
- How to automate your keyboard in Mac OS X with AppleScript - Christopher Kielty
- A simple Numbers workflow - Dr. Dang
- Cleaning out old Reminders - Dr. Dang
- How to duplicate an iTerm tab using AppleScript - Genba's Tech Thoughts
- APPLESCRIPT CONTROL OF LOGIN ITEMS - sepdek
- Adding and deleting login items using AppleScript - Mac Stuff
- Viewing or hiding hidden files in the Finder using AppleScript - Mac Stuff
- Automation for OS X: the JavaScript way - HackMag
- Get Started With AppleScript β Basics - Ben Liddle
- Get Started With AppleScript β Scripting Selections - Ben Liddle
- Get Started With AppleScript β Conditional Processing pt1 - Ben Liddle
- How to display the size of an appβs frontmost window - Rob Griffiths
- Show albums a given Photosβ photo has been added to - Rob Griffiths
- Assign a photoβs Title field based on its filename in Photos - Rob Griffiths
- Search the iTunes Store from anywhere - Rob Griffiths
- Doing Business With Transactions - Bill Cheeseman
- Scripting iTerm with AppleScript - Rob Peck
- Use AppleScript to Automate with iTerm - TJ Fogarty
- If and If Else: AppleScript Conditional Statements - Josh Johnson
- Save Time and Effort with AppleScript Repeat Loops - Josh Johnson
- Schedule a Weekly Reminder Email with AppleScript - Josh Johnson
- AppleScript Essentials - Introduction to Database Events - Benjamin S. Waldie
- AppleScript Snippets - wik
- Whose in AppleScript - Dr. Dang
- A Strategy for UI Scripting in AppleScript - n8henrie
- Make DMGs from folders - pudquick
- OSX Window Sizing - Tim Sullivan
- Apple-Scripting Repo - Tim Sullivan (Live Link)
- AppleScript Libraries - Mark Alldritt (Live Link)
- Set Evernote Mac Font and Text Size using AppleScript.AppleScript - JMichaelTX
- Convert a Pages document into Keynote - Alex Hokanson
- Set sound output device - alphabt
- macOS Automation Scripts - temochka (Live Link)
- AppleScript Repository - Alvin Charity
- gianzellweger's Math Library (Live Link)
- hhas' AppleScript stdlib (Live Link)
- Jon Pugh's SmartString Library
- Script factory Libraries (Live Link)
- Resources for AppleScriptObjC - Shane Stanley (Live Link)
- Complete list of AppleScript key codes - Christopher Kielty
- AppleScript Error Codes
- AppleScriptObjC: Good News for Objective-C Coders, too - Shane Stanley
- iTerm2 AppleScript Documentation
- NotePlan AppleScript Documentation
- Fantastical Integration With Other Apps Help
- CardHop Integration With Other Apps Help
- Scripting with Tyme
- Controlling Tunnelblick with AppleScript
- Creating Scripts for Bike
- AppleScript Support in Skim
- AppleScript - Scripting Merlin Project
- Things AppleScript Guide
- A small script to update the currently selected iTunes tracks with various criteria - arkarkark
- Sort a given iTunes playlist according to the least played tracks in each album - scoffey
- A simple Python script to find and start playing a track on a connected iPod - uniquelogin
- Make a FaceTime call using Python - shreyansb
- Set the desktop wallpaper for each desktop - ghballiet
- Extracting polygons from an Illustrator sketch - ptone
- Automator User Guide for macoS Monterey
- Automator Programming Guide - 2006
- Automator Programming Guide - 2007 (Live Link)
- Mac OS X Automation Workshop (1 of 2) - Ben Waldie (Live Link)
- Automator and Mac Scripting Tutorials (Playlist) (Live Link)
- Learning Hammerspoon - Diego Zamboni (Paid, Live Link)
- Hammerspoon - How to Automate Routine-Tasks - Alfred Schilken
- Learning Hammerspoon: Getting Started - Diego Zamboni (Live Link)
- Hands on - macOS Automation with Hammerspoon - Chris Chinchilla (Link Link)
- Official Hammerspoon IRC (Live Link)
- Official Hammerspoon Mailing List (Live Link)
- Hammerspoon: Handling Windows and Layouts - Evan Travers
- Automate everything: Getting started with Hammerspoon and Lua - Jessica Thornsby
- Getting Started With Hammerspoon - Diego Zamboni
- Just Enough Lua to Be Productive in Hammerspoon, Part 1 - Diego Zamboni
- Just Enough Lua to Be Productive in Hammerspoon, Part 2 - Diego Zamboni
- Using Spoons in Hammerspoon - Diego Zamboni
- Useful Hammerspoon Tips - Nikhil Marathe
- Making the Runtime, Funtime with Hammerspoon - Braden Marshall
- Configuring your mac to display the wifi name on the menu bar - Matt Crowder
- MacOS Power Management with Hammerspoon - Michael Heap
- Powerful Hammerspoon - Teddy Ma
- Creating A Productive Osx Environment - Hammerspoon - Alexander Reelsen
- Bear Notes and Hammerspoon - dcreemer
- Automatic notes backup on macOS with hammerspoon - Shantanu Goel
- Create custom macOS menu bar apps using Hammerspoon - Chris Zarate
- MacOS automation and shortcuts with Hammerspoon - Hao Liu
- Setup a Mute Indicator Light for Zoom with Hammerspoon - JoΓ«l Franusic
- Automating Complicated Text Inserts - macmost (Live Link)
- JXA Introduction - Sal Soghoian
- JavaScript for Automation WWDC2014 - Sal Soghoian
- How I Navigate Hundreds of Tabs on Chrome with JXA and Alfred - Renan Cakirerk
- macOS JavaScript for Automation (JXA) Notes - galvanist
- Automating iTerm with JXA (JavaScript Application Scripting) - Steve Barbera
- Automating Chrome with JXA (Javascript Application Scripting) - Steve Barbera
- How I Navigate Hundreds of Tabs on Chrome with JXA and Alfred - Renan Cakirerk (Live Link)
- Scripting macOS with Javascript Automation - Mike Bianco
- chrome-control/chrome.js
- JXA Examples (Live Link)
- Copy & Get Selection to Clipboard JXA.js - JMichaelTX
- Transform String on Clipboard to Title Case JXA.js - JMichaelTX
- Toggle dock position - Carlos Daniel
- macOS Automation Scripts - temochka (Live Link)
- JXA - Apple Photos script for organising photos into albums - companje
- JXA script for updating the 'date' of mediaItems in Photos - companje
- JXA DoShellScript - uchcode
- Statusbar App in JXA - uchcode
- Japanese Examples of JXA
- JavaScript for Automation Cookbook (Live Link)
- Scripting with JXA - Christian Kirsch
- JXA Examples - akjems
- Apple Developer Documentation (Live Link)
- Using Scripting Bridge in PyObjC and RubyCocoa Code
- Cocoa Fundamentals Guide - Apple Archive
- Cocoa Fundamentals Guide - PDF
- Working with System Frameworks in Python and Objective-C - James Barclay (Live Link)
- Turbocharge your Scripting with PyObjC - Greg Neagle (Live Link)
- An Introduction to PyObjC - Greg Neagle (Live Link)
- MTC2017 pyobjc the frogor - Michael Lynn (Live Link)
- GeekTools - Nikolai Obedin - AppHelper, NSDistributedNotificationCenter
- Play mp3 from python on Mac - Kyle Crawford - NSSound
- Check iTunes library for inexistent files and broken links with Python and PyObjC - STEFAAN LIPPENS - NSDictionary, NSURL
- Writing to Application Support in PyObjC - Will Larson - NSSearchPathForDirectoriesInDomains
- Native Restart and Logout Dialogs with PyObjC - Nathaniel Strauss - NSAppleEventDescriptor, AESendMessage
- HOW TO SET THE ICON FOR A FOLDER OR FILE WITH A LITTLE BIT OF PYOBJC - babodee - NSWorkSpace
- COMMAND-LINE TOOLS VIA PYTHON AND COCOA - Greg Neagle - CFPreferences, CGDisplay, Quartz
- NSSpeechSynthesizer from AppKit
- macOS Wifi Scanning - Clayton Burlison - CoreWLAN, CWInterface, CWNetwork
- The fastest way to resize images with Panther - Andrew Shearer - CoreGraphics, CGImageCreateWithJPEGDataProvider, CGDataProviderCreateWithFilename, CGColorSpaceCreateDeviceRGB, CGBitmapContextCreateWithColor, CGRectMake
- Reading URLs from OS X clipboard with PyObjC - NSPasteboard
- Screenshot in Cocoa (Python) - NSScreen, NSImage, NSWindow, NSView
- How to use CGEventCreateKeyboardEvent - StackOverflow - Quartz
- PYOBJC NSSTATUSBAR SAMPLE - Rui Carmo
- How to Use Apple Vision Framework via PyObjC for Text Recognition - Yasoob Khalid Live Link Archive
- keynote-export.py by jomkz - ScriptingBridge, Keynote
- computer_icon.py by pudquick - NSImage, NSGraphicsContext, NSMakeRect, NSMakeSize, NSBitmapImageRep
- imagefromurl.py by WardsParadox - NSData, NSImage, NSBundle
- define.py by lambdamusic - DictionaryServices, DCSCopyTextDefinition
- Using PyObjC and NSWorkspace to set the desktop picture - Greg Neagle - NSWorkspace, NSScreen, NSUR
- mount_shares_better.py - pudquick - CFURLCreateWithString, NetFS - Live Link
- Getting the list of visible apps - pudquick - NSBundle, CoreServices
- python/pyobjc method for accessing location on an OS X device - pudquick - CLLocationManager, NSRunLoop, NSDate
- mkdir with ScriptingBridge - tgck - SBApplication, Make/push new folder
- Walk through mailbox and tally message sizes, flagged and unread status - rcarmo - ScriptingBridge, SBApplication, Mail
- Run Spotlight queries from console - jdp - NSMetaDataQuery, NSNotificationCenter, NSPredicate
- Get Mac's serial number, hardware UUID, and board-id - pudquick - IOKit, IOService, NSBundle
- PyObjC sample code for 2015 PSU MacAdmins Conference - James Barclay - CFPreferences, NSApplication, NSWorkspace, Quartz
- Routines for manipulating the Dock - Greg Neagle - NSURL, CFPreferencesAppSynchronize, CFPreferencesCopyAppValue, CFPreferencesSetAppValue
- move_mouse.py - jquast - Quartz, CoreGraphics, CGEventCreateMouseEvent, CGEventPost, NSScreen
- Check status of display mirroring and Do Not Disturb settings - Greg Neagle - Quartz, CGGetActiveDisplayList, CGGetOnlineDisplayList, CFPreferencesCopyAppValue
- Accessing battery details - pudquick - NSBundle, IOKit, IOService
- Speak text - moriyoshi - NSSpeechSynthesizer
- Find the frontmost/active window - ljos - NSWorkspace, CGWindowListCopyWindowInfo, NSApp, AppHelper
- Enumerate and inspect input sources (keyboard layouts, input modes) - pudquick - NSBundle, HIToolbox, TISCreateInputSourceList, TISGetInputSourceProperty
- PyObjC Examples - michielkauwatjoe -
- PDFsuite - benwiggy (Live Link)
- Access images from Apple Photos and associated metadata. Uses PyObjC to call native PhotoKit framekwork to access the user's Photos library - PHPhotoLibrary, PHAsset, PHFetchOptions, PHAssetResource
- Example Python Alert Dialogs using PyObjC - corbinbs - NSAlert, NSTimer
- Resize an image using appkit/pyobjc - atr000 - NSImage, NSBitmapImageRep
- Ejecting USB disks using PyObjC & DiskArbitration - danchr - AppHelper, DisArbitration
- NSRunLoop in python - Apple Developer Forums - NSRunLoop, NSSpeechRecognizer
- www.nodebox.net - NSSound, NSSpeechSynthesizer, & more
- Introduction to PyObjC - Bob Ippolito, PyCon 2005
- Building Raycast extensions with Thomas Paul Mann (CEO & Co-Founder) - Lee Robinson (Live Link)
- Build a Raycast Extension with TypeScript & React - Darin Doria (Live Link)
- Raycast Dev Tip #1 - New Grid API - Raycast (Live Link)
- Hands on - Creating a Trello extension for Raycast - Chris Chinchilla (Live Link)
- How to build a simple Raycast extension - Patrick GΓΆler von Ravensburg
- Build an Apple Music to Spotify Converter for Raycast - Jonathan Chaffer
- Shortcuts Users Guide (Live Link)
- Import Automator workflows into Shortcuts (Live Link)
- Run a shortcut using a URL scheme on Mac
- Use another appβs URL scheme in Shortcuts on Mac
- Hey Siri, Drive My Tesla (How To Use iPhone's New Shortcuts)! - Snazzy Labs (Live Link)
- Capture Text From Your Screen - macmostvideo (Live Link)
- Add a watermark to an image - macmostvideo (Live Link)
- Setting Reminders Using Shortcuts On a Mac - macmostvideo (Link Link)
- Inserting and Replacing Text With Shortcuts - macmostvideo (Link Link)
- Using Shortcuts To Add Data To a Numbers Spreadsheet - macmostvideo (Link Link)
- Creating Shortcuts That Accept Voice Input - macmostvideo (Link Link)
- Building a Mac Shortcut To Add a Border And Caption To a Photo - macmostvideo (Live Link)
- Intro to Siri Shortcuts Part 1: The New Workflow App - Christopher Lawley
- Learn Siri Shortcuts Part 2: See Your Day in One Tap + Alexa Support - Christopher Lawley
- Learn Siri Shortcuts Part 3: Magic Variables, Menu Action, and More! - Christopher Lawley
- Siri Shortcuts Tutorial: Good Morning! - HeyTechi
- How to Use Siri Shortcuts in iOS, Part 1: The Basics - AppleVis (Live Link)
- How to Use Siri Shortcuts Part 2: The Gallery - AppleVis (Live Link)
- How to Use Siri Shortcuts Part 3: The Library - AppleVis (Live Link)
- Posting to a Discourse forum from iOS Shortcuts - alldritt
- [Tutorial] Using Dictionaries and Lists - JoeReally
- Automating iOS: A Comprehensive Guide to URL Schemes and Drafts Actions - Alex Guyot
- Shortcuts and Focus Modes - Evan Travers
- Running Other Apps' Siri Shortcuts
- Creating visually appealing menus - u/keveridge
- AUTOMATE TASKS ON A SCHEDULE IN IOS WITH THE SHORTCUTS APP - EDTECHCHRIS
- Regex Cookbook for Shortcuts - Reusable Regex to use in your Shortcuts- u/enteeMcr
- How to add rows to Google Sheets from a Shortcut - u/senatorforlife
- iOS 12 Shortcuts for the Beginner - Deborah Armstrong
- Sharecuts (Live Link)
- ShareShortcuts (Live Link)
- ShortcutsGallery (Live Link)
- Shortcut Directory (Live Link)
- Showcuts Gallery (Live Link)
- MacStories Shortcuts Archive (Live Link)
- Shortcuts Gallery (Live Link)
- The Siri Shortcuts Collection- ITE (Live Link)
- Matthew Cassinelli's Shortcuts Library (Live Link)
- Shortcuts for Tesla - Jordan Merrick (Live Link)
- 50+ Coolest Siri Shortcuts for your Mac running macOS Monterey - the8-bit (Live Link)
- Bruce's iOS Shortcut Catalog - Bruce Bentley (Live Link)
- Siri Shortcuts Collection - Jens Brehmen (Live Link)
- iOS Shortcuts - Daniel Demby (Live Link)
- Siri Shortcut Collection - hanstzou (Live Link)
- ThoughtAsylum Shortcuts Library
- Shortcuts File Format Reference - sebj (Live Link)
- Running list of apps supporting Siri Shortcuts - Airtable - (Live Link)
- Fantastical App Shortcuts Help