Module for creating and displaying macOS system notifications.
macOS notifications require user permission before they will appear. Request it once
(typically at startup) via hs.permissions.requestNotifications() and it will be
hs.permissions.requestNotifications().then(granted=> { if (granted) hs.notify.show("Hammerspoon", "Notifications are enabled!") })
Quick notification
// Fire and forget hs.notify.show("Build complete", "Your project compiled successfully.")
// With a callback invoked when the user interacts hs.notify.show("Build complete", "Click to view the log.", (response) => { console.log("User tapped:", response.actionIdentifier) })
"DEFAULT" when the user tapped the notification body; "DISMISS" when dismissed (if .customDismissAction is set); otherwise the action's identifier string
userText
string?
Text entered in a textInput action; only present when applicable
userInfo
object
The userInfo object originally passed to create(), if any
notificationId
string
The notification's unique identifier
Options for create()
Key
Type
Default
Description
title
string
(required)
The bold heading line
subtitle
string
—
A second line shown beneath the title
body
string
—
The main message body
sound
boolean | string
true
true = default sound, false = no sound, string = named .aiff file
badge
number
—
Value to show on the app icon badge
threadIdentifier
string
—
Groups related notifications visually in Notification Center
userInfo
object
{}
Arbitrary payload passed back to the callback
interruptionLevel
string
"active"
"passive", "active", or "timeSensitive" — controls Focus/DND behaviour (macOS 12+)
trigger
object
—
When to deliver the notification (see below). Omit for immediate delivery.
actions
array
—
Action buttons (see below)
callback
function
—
Invoked when the user interacts with the notification
Triggers
Pass a trigger object in create()'s options to schedule the notification instead of delivering it
trigger: { type: "timeInterval", interval: 300 }
Calendar* — deliver at a specific date/time. Provide either a JS Date object or individual
// At a specific moment trigger: { type: "calendar", date: newDate("2026-06-01T09:00:00") }
// At 09:00 on the next day that matches (e.g. next Monday, weekday 2) trigger: { type: "calendar", weekday: 2, hour: 9, minute: 0 }
Module for creating and displaying macOS system notifications. macOS notifications require user permission before they will appear. Request it once (typically at startup) via
hs.permissions.requestNotifications()and it will beQuick notification
Rich notification
Callback response object
actionIdentifier"DEFAULT"when the user tapped the notification body;"DISMISS"when dismissed (if.customDismissActionis set); otherwise the action'sidentifierstringuserTexttextInputaction; only present when applicableuserInfouserInfoobject originally passed tocreate(), if anynotificationIdOptions for
create()titlesubtitlebodysoundtruetrue= default sound,false= no sound, string = named.aifffilebadgethreadIdentifieruserInfo{}interruptionLevel"active""passive","active", or"timeSensitive"— controls Focus/DND behaviour (macOS 12+)triggeractionscallbackTriggers
Pass a
triggerobject increate()'s options to schedule the notification instead of delivering itCalendar* — deliver at a specific date/time. Provide either a JS
Dateobject or individualSupported component keys:
year,month,day,hour,minute,second,weekday.Action objects
identifiertitledestructivefalseforegroundfalsetextInputfalsetextInputButtonTitle"Send"textInput: true)textInputPlaceholder""textInput: true)