Releases: northpolesec/santa
Release list
v2026.7
Notes
Security
The Santa codebase has been undergoing dedicated security review by folks with access to frontier AI security models. The issues fixed below were identified through that work, and we recommend updating. This is an ongoing investment to ensure Santa remains your most trusted endpoint security solution.
🔒 Fixed two issues related to Mach-O parsing that could prevent policy from being effectively enforced on specially crafted x86 binaries
🔒 Fixed a heap buffer overflow that could be triggered with certain EventLogType configurations when an execution contained an extremely large number of arguments
🔒 Improved tamper resistance handling to protect against local rule modification
🔒 Fixed a narrow issue with File Access rules where an exception applying to platform binaries only could be erroneously granted to unsigned x86 binaries
🔒 Fixed a narrow issue affecting CEL policies that conditionally returned ALLOWLIST_COMPILER after accessing a non-cacheable field
Full details for each issue are available in the published advisories.
Announcements
🎉 Get the most out of Santa with Workshop! Workshop is North Pole Security's official sync service, built to integrate deeply with Santa. It is fully featured, scalable, and enterprise ready. Learn more at northpole.security.
Fixed
❗ Dock icons no longer stick around when quickly closing stacked UI windows
❗ Fixed issue with file types being unexpectedly handled by Santa
❗ Workshop customers: CEL process ancestor data reliability greatly improved under load
Changed
Added
➕ The block dialog "open" button label can now be configured per-rule
➕ Workshop customers: Santa now supports queued commands that are delivered on the next sync, so commands issued while a host is offline still run
➕ Workshop customers: Signal matches on telemetry now include process tree and responsible process info in uploaded events
➕ Workshop customers: Signals can now be correlated across a time period, requiring a threshold before firing
➕ Workshop customers: Added new package inventory command to support scanning hosts for data about Homebrew, PyPI, Go, NPM, browser extensions, IDE extensions, and much more
The Santa Lite package is rarely the right choice. Install the standard package unless you have a specific reason not to. Workshop customers should not install lite since it omits many features. See the lite package documentation for details. Download at: santa-2026.7-lite.pkg.
Santa documentation can be found at northpole.dev.
What's Changed
- santactl/status: Show filter count under telemetry section by @russellhancox in #1060
- gui: Fix missing caret in TAM justification prompt by @sharvilshah in #1061
- common: improve process tree reliability under load by @mlw in #1062
- metrics: Allow metrics export to https by @russellhancox in #1063
- processtree: use PROC_PIDT_SHORTBSDINFO to look up ppid during backfill by @mlw in #1064
- gui: Delay restoring activation after last window close by @russellhancox in #1065
- common: reduce per-evaluation copies in CEL activations by @mlw in #1066
- build: split legacy grouped targets into one library per file by @mlw in #1067
- gui: notify user when temporary admin session ends by @sharvilshah in #1068
- common: take SantaCache keys by const reference by @mlw in #1071
- Fix uninitialized stat use in SNTFileInfo by @tnek in #1073
- Add ScopedMachPort and use it where task_name_for_pid is used by @russellhancox in #1074
- Fix file writer buffer growth by @tnek in #1070
- docs: Add category indexes by @russellhancox in #1076
- santactl: report SIP status in doctor output by @sharvilshah in #1069
- Protect tamper-resistant paths from clonefile by @tnek in #1075
- Protect tamper-resistant paths from copyfile by @mlw in #1077
- syncv2: report santanetd version by @sharvilshah in #1078
- cel: cache compiled DB CEL plans instead of recompiling per exec by @mlw in #1079
- santad: hold CEL fallback rules in an atomically-swapped batch by @mlw in #1081
- common: use thread-safe
getpwuid_rfor passwd/group lookups by @sharvilshah in #1080 - signals: Update proto import & SignalReport refs, pass persistence path to Sleigh by @russellhancox in #1083
- common: reap process tree removals from a min-heap by @mlw in #1086
- common: take a reader lock in ProcessTree::ReleaseProcess by @mlw in #1088
- common: store process-tree cdhash as raw bytes by @mlw in #1089
- status/sync: Count signal rules by @russellhancox in #1090
- gui: Lower scope of CFBundleDocumentTypes to remove IPSW association by @russellhancox in #1091
- common: reduce per-exec copies and duplicate work in the process tree by @mlw in #1087
- Replace builtin casts with proto-specific casts for protobuf types. by @ClaytonKnittel in #1084
- Reduce locks and copies on the process-tree ingest path by @mlw in #1092
- Tighten and speed up NSString string conversions by @mlw in #1093
- Bump Docusaurus to 3.10.2 and update docs dependencies by @mlw in #1094
- Reduce work on the exec-decision and file-change regex paths by @mlw in #1095
- SantaCache: strength-reduce hashing, avoid false sharing, template callables by @mlw in #1096
- TimedSyncSession: fix lock_ <-> timer-queue deadlock by @sharvilshah in #1082
- Add CLA workflow by @russellhancox in #1098
- Add HTTP Santa commands, drained serially at the end of sync by @tburgin in #1097
- docs: Update several dependencies by @russellhancox in #1100
- santad: leave Temporary Monitor Mode when client mode changes by @sharvilshah in #1099
- gui: Add
event_detail_button_textsupport by @russellhancox in #1101 - santad: make TAM's crash/restart reconciliation safe against directory outages, account deletion, and uid reuse by @sharvilshah in #1085
- santactl: report build metadata from the embed label by @mlw in #1102
- commands: Add package inventory command by @russellhancox in #1103
- Revert "santactl: report build metadata from the embed label" by @mlw in #1105
- workflows: Skip scheduled and deploy jobs outside this repo by @mlw in #1106
- docs: Update deps, move to pnpm 11 by @russellhancox in #1107
- santasyncservice: run binary uploads from the HTTP command queue by @tburgin in #1104
- docs: Document binary_upload and package_inventory commands by @tburgin in #1108
New Contributors
- @tnek made their first (northpolesec) contribution in #1073
- @ClaytonKnittel made their first contribution in #1084
Full Changelog: 2026.6...2026.7
v2026.6
Notes
Tip
See it in action. Watch demo videos and walk through examples of the major features in our release blog post: northpole.security/blog/release-20266.
Announcements
🎉 Get the most out of Santa with Workshop! Workshop is North Pole Security's official sync service, built to integrate deeply with Santa. It is fully featured, scalable, and enterprise ready. Learn more at northpole.security.
Fixed
❗ Fixed regression with compiler rules that could prevent Santa from generating transitive rules
Changed
EventLogType values, when a spool is filled, the oldest files are now evicted instead of dropping the newest events.
Added
➕ Support for new rule policies SILENT_GUI_BLOCKLIST and SILENT_TTY_BLOCKLIST to allow more fine-grained silencing options over the existing SILENT_BLOCKLIST
➕ santactl doctor now checks certificate validity
➕ protobuf telemetry now contains an opaque unique identifier event_id per-message
➕ Workshop customers: On device telemetry scanning, EDR signals
➕ Workshop customers: Network rule support to enable blocking/allowing network activity
➕ Workshop customers: Endpoint Privilege Management (EPM) support to further lock down endpoints by limiting access to admin and sudo privileges
➕ Workshop customers: CEL policies now have access to today() and days(X) functions to support relative time checks
➕ Workshop customers: New sandbox policy placeholder variable support: BINARY_PATH
The Santa Lite package is rarely the right choice. Install the standard package unless you have a specific reason not to. Workshop customers should not install lite since it omits many features. See the lite package documentation for details. Download at: santa-2026.6-lite.pkg.
Santa documentation can be found at northpole.dev.
What's Changed
- Proactively Lockdown permissions on labeler.yml by @pmarkowsky in #998
- santactl/sandbox: Add BINARY_PATH placeholder by @russellhancox in #1000
- santactl: Make doctor print cert validity by @russellhancox in #999
- Remove Polaris by @russellhancox in #997
- santad: Remove stats-state.plist from tamper protection by @russellhancox in #1002
- Bump docs dependency by @mlw in #1004
- Testing/Fuzzing: add KernelCsBlobFuzzer by @mlw in #1003
- Bump docs dependency by @mlw in #1005
- deps: Update esbuild by @russellhancox in #1006
- common: add ProcessID for pid+pidversion process identity by @mlw in #1007
- common: put PassKey in santa namespace by @mlw in #1008
- telemetry: Add event_id to proto schema, populate by @russellhancox in #1010
- Don't clear the compiler PID mark on a pidversion mismatch by @mlw in #1012
- docs: update build deps by @mlw in #1013
- docs: update build deps by @mlw in #1015
- santad: Add
today()anddays()functions to CELv2 context by @russellhancox in #1014 - santad: Add
SILENT_GUI_BLOCKLISTandSILENT_TTY_BLOCKLISTsupport by @russellhancox in #1016 - common: Add AuditTokenFromData and rewrite ProcessID::FromTokenData on top of it by @mlw in #1018
- cel: Update caching of fallback rules, prevent UNSPECIFIED in non-fallback by @russellhancox in #1017
- ci: make labeler job non-blocking by @tburgin in #1021
- test: Significantly speed-up some slower tests by @russellhancox in #1023
- Use
nameas the primary key for network flow rules by @tburgin in #1022 - santad: Evict oldest spool files when full & add spool metrics by @russellhancox in #1020
- santad: Sync detection signals into the rules database; add Sleigh signal-scan-support by @russellhancox in #1024
- Relax FAA rule name validation to allow resource-style names by @tburgin in #1025
- add support for SyncRequest.max_jitter by @tburgin in #1027
- common: Extract SNTStoredProcess from SNTStoredFileAccessEvent by @mlw in #1028
- common: Add SNTStoredNetworkFlowEvent by @mlw in #1029
- santad: Ingest network flow decisions reported by santanetd by @mlw in #1030
- santad: Store signal reports and upload them to the sync server by @russellhancox in #1026
- santasyncservice: Upload network flow events to the sync server by @mlw in #1031
- gui: Add a notification dialog for blocked network flows by @mlw in #1032
- build: scope dSYM generation to release builds; drop dead test code by @mlw in #1033
- common: add Temporary Admin Mode policy, audit events, and config plumbing by @sharvilshah in #1034
- gui: Honor per-rule custom messages and URLs for blocked network flows by @mlw in #1040
- santad: extract shared TimedSyncSession base and refactor TMM onto it by @sharvilshah in #1035
- sync: Temporary Admin Mode policy and upload audit events by @sharvilshah in #1036
- santad: add Temporary Admin Mode by @sharvilshah in #1037
- santad: revoke Temporary Admin Mode on console-session leave by @sharvilshah in #1039
- santad: write network-flow block message to the controlling TTY by @mlw in #1041
- common: add token-validated csops helpers (csops_audittoken) by @mlw in #1043
- santad: fix out-of-bounds read in SleighLauncherTest by @mlw in #1046
- Add remote_hostname field to NetworkActivity.Flow by @mlw in #1047
- santactl: add adminmode command and report user type in status by @sharvilshah in #1044
- santasyncservice: support repeated paths in EventUpload command by @tburgin in #1048
- santad: demote and restore admins with Temporary Admin Mode by @sharvilshah in #1045
- gui: add TMM/TAM separator and User Type line to status menu by @sharvilshah in #1049
- santad: fix BOOL-to-bool narrowing in AdminGroupMembership member list by @sharvilshah in #1051
- Bump dependencies by @russellhancox in #1050
- gui: fix rare status-menu crash by running daemon-pushed timed-mode updates on main thread by @sharvilshah in #1052
- gui: better TAM justification prompt presentation by @sharvilshah in #1053
- sync: Disable telemetry export when config is revoked by @russellhancox in #1054
- Add evaluation decision fields to NetworkActivity.Flow by @mlw in #1055
- deps: Update protos dep by @russellhancox in #1056
- santactl/status: Correctly report telemetry export status by @russellhancox in #1057
- santactl: Report export status via santad by @russellhancox in #1058
- santad: Don't log a warning if Sleigh is missing by @russellhancox in #1059
Full Changelog: 2026.5...2026.6
v2026.5
Notes
Announcements
🎉 Get the most out of Santa with Workshop! Workshop is North Pole Security's official sync service, built to integrate deeply with Santa. It is fully featured, scalable, and enterprise ready. Learn more at northpole.security.
📣 If you’re using telemetry with Workshop, please upgrade to Workshop v2026.5 before rolling out Santa v2026.5 to ensure no gaps in collected data.
Fixed
❗ Fixed a rare issue with sync service rate limiting
❗ Fixed reachability handling so Santa reliably resumes syncing after the network comes back
❗ Workshop customers: The network extension's DNS proxy now rides out transient network changes (e.g. VPN reconnects) instead of dropping queries
❗ Workshop customers: Improved push notification connection reliability
Changed
ALLOW_PLATFORM instead of ALLOW_CERTIFICATE
santactl eventupload command has been renamed to santactl inventory (eventupload still works as an alias)
Added
➕ Workshop customers: New rule policy that confines a binary to a specified sandbox profile (BETA)
➕ Workshop customers: Trigger an on-demand binary upload from an endpoint with a real-time push notification (BETA)
➕ Workshop customers: CEL fallback rules can now be used with platform binaries
➕ Workshop customers: CEL policies can now return AUDIT to generate an event without blocking the operation
➕ New July 20 easter egg in the Santa UI for anyone with the FunFontsOnSpecificDays config key set
The Santa Lite package is rarely the right choice. Install the standard package unless you have a specific reason not to. Workshop customers should not install lite since it omits many features. See the lite package documentation for details. Download at: santa-2026.5-lite.pkg.
Santa documentation can be found at northpole.dev.
What's Changed
- santad: Make CEL fallback rules usable with platform binaries by @russellhancox in #962
- docs: bump pinned transitive deps by @mlw in #966
- gui: Add July 20 special date by @russellhancox in #963
- docs: bump pinned transitive deps by @mlw in #967
- sync: Fix rate limiter semaphore usage, reachability handling, guarded replies by @russellhancox in #970
- sync: Remove debug log that prints CEL fallback expressions by @mlw in #971
- common: add SNTNetworkFlowRule wire model class by @mlw in #965
- santad: persist network flow rules in SNTRuleTable by @mlw in #969
- verifyinghasher: extend ParsedCodeDirectory and VerifyingHasher::Result by @mlw in #972
- santad: extend control XPC for network flow rules by @mlw in #973
- Bump protos import, update SleighLauncher appropriately by @tburgin in #974
- bump protos to pick up NetworkFlowSocketFamily enum rename by @mlw in #975
- santasyncservice: parse, dispatch, and report network flow rules by @mlw in #976
- verifyinghasher: add KernelCsBlob module by @mlw in #978
- santad: push network rules + settings to santanetd via combined XPC by @mlw in #977
- Validate network flow rules from the proto, not a serialized blob by @mlw in #979
- Add reusable string/code-signing helpers; clean up santanetd stub naming by @mlw in #980
- docs: update dependencies by @mlw in #985
- syncservice: Update reachability to avoid retry loop by @russellhancox in #982
- Force Santa to connect to NATS over TLS immediately and up timeouts. by @pmarkowsky in #983
- santad: fix broken and over-firing config KVO watchers by @mlw in #984
- deps: patch nats.c to bound the natsSock_Read no-progress spin by @mlw in #986
- Plumb sync-configured DNS upstream timeout to the network extension by @mlw in #988
- syncservice: fix two NATS push client connection races by @mlw in #989
- revert XPC contract to SNTNetworkExtensionSettings, fold rules in by @mlw in #990
- commands: binary upload via sleigh by @sharvilshah in #987
- santactl: Rename EventUpload -> Inventory by @russellhancox in #992
- santad: Make sandbox executions allow transitive executions of itself by @russellhancox in #981
- santa: source DNS-proxy upstream timeout from MDM, not sync by @mlw in #993
- docs: binary upload by @sharvilshah in #994
- common: ensure AUDIT execution events reach the sync server by @mlw in #995
Full Changelog: 2026.4...2026.5
v2026.4
Notes
Announcements
🎉 Get the most out of Santa with Workshop! Workshop is North Pole Security's official sync service, built to integrate deeply with Santa. It is fully featured, scalable, and enterprise ready. Learn more at northpole.security.
Fixed
❗ EventDetailURL template parameters are now properly percent-encoded
❗ Improved File Access event logging when source data had been lost due to cache evictions
Changed
Cmd+W closes windows, Esc closes panes such as the "More Info" pane.
Added
➕ Blocked device mount notifications can now be silenced
➕ Strengthened anti-tamper protections across additional filesystem operations, signal handling, Endpoint Security data validation, and Santa's own upgrade path.
The Santa Lite package is rarely the right choice. Install the standard package unless you have a specific reason not to. Workshop customers should not install lite since it omits many features. The lite package has moved so automation consuming the previous URL will need updating. See the lite package documentation for details. Download at: santa-2026.4-lite.
Santa documentation can be found at northpole.dev.
What's Changed
- docs: Add lite package page by @russellhancox in #905
- docs: Document new AntiSuspendSigningIDs key by @russellhancox in #908
- Don't retry requests on non-transient errors by @mlw in #909
- Fix latent FD leak in ScopedFile move assignment operator by @mlw in #912
- Remove the printer proxy workaround that is no longer necessary by @mlw in #913
- Percent-encode template values in block message event detail URLs by @mlw in #914
- Track compiler PIDs with pidversion for improved correctness by @mlw in #915
- Use a rule table query that guarantees proper ordering by @mlw in #916
- docs: bump deps by @mlw in #918
- docs: bump deps by @mlw in #919
- Bump docusaurus version by @mlw in #920
- sync: enforce HTTP for loopback addresses only by @sharvilshah in #921
- tamper: subscribe to auth_truncate and auth_link by @sharvilshah in #922
- docs: document
AllowedSantaCommandskey by @sharvilshah in #925 - test: fix ScopedIOObjectRefTest flakiness on hosts without USB devices by @mlw in #926
- ci: disable bazel-internal metrics in continuous, shrink ArenaGrowthTest by @mlw in #928
- docs: refresh pnpm lockfile by @mlw in #931
- detect truncated paths from ES by @sharvilshah in #929
- Add delegated signal handling support by @sharvilshah in #932
- gui: Fix FunFontsOnSpecificDays by @russellhancox in #933
- SNTConfigurator: skip override-file watcher when overrides disabled by @mlw in #936
- cel: skip ArenaGrowthTest under sanitizers by @mlw in #937
- Fix sanitizer build by @mlw in #938
- FAA logging should use ES data as canonical source by @mlw in #939
- Add proper data length length to string conversion by @mlw in #940
- Strip trailing whitespace in santaconfig.ts by @mlw in #943
- Update docs dependencies by @mlw in #945
- gui: Fix keyboard shortcuts for closing windows by @russellhancox in #941
- Eliminate TSAN-only race report in processEnrichedMessage:handler: by @mlw in #946
- Update docs dependencies by @mlw in #948
- Introduce FD-based code-signature verifier by @mlw in #942
- gui: Add ability to silence device notifications by @russellhancox in #947
- docs: Document ancestors by @russellhancox in #950
- verifyinghasher: add per-call skip_page_hash option by @mlw in #951
- Add
santactl sandboxcommand andSEATBELTpolicy handling by @russellhancox in #917 - common: Fix undeclared variable in SNTConfigurator on release builds by @russellhancox in #952
- daemon: creating a staging dir for installs by @sharvilshah in #949
- Extend identity confirmation for unsigned slices by @mlw in #953
- seatbelt: Expand CWD/HOME/TMP placeholders in policies by @russellhancox in #955
- sync: support batched mode for sync state and handle clean sync by @sharvilshah in #944
- FAA: re-derive SNTCachedDecision on cache lookup miss by @mlw in #957
- celv2: expose AUDIT return value, trigger event upload with flag set by @russellhancox in #956
- Allow test GUI to configure username by @statico in #958
- persist pushJWT and pushIssuerJWT by @sharvilshah in #959
- Handle anti-tamper ops asynchronously by @mlw in #960
- Tamper: dispatch denial logs off the ES reader thread by @mlw in #961
Full Changelog: 2026.3...2026.4
v2026.3
Notes
Announcements
🎉 Get the most out of Santa with Workshop! Workshop is North Pole Security's official sync service, designed to deeply integrate with Santa. It is fully featured, scalable, and enterprise ready. Learn more at northpole.security.
📣 There is now a "Santa Lite" package included in the release. It is generally not recommended to use this but we recognize there are users that want reduced packaging. Read the Lite Package docs for more information.
🔒 Security Advisory: For security reasons, we strongly recommend all users update to Santa 2025.12 or newer. On prior versions, an attacker with admin privileges could bypass Santa. A detailed blog post will be published soon with more information.
Fixed
❗ Fixed issue where sync interval settings were not always being correctly applied
❗ Workshop customers: Improved handling of network mount name formats
Changed
Added
➕ Santa can now enforce encryption settings when blocking/remounting removable media (currently APFS only)
➕ Several performance and memory improvements to keep Santa snappy
➕ Santa can be configured with a set of signing IDs to extend pid_suspend protections to other software
➕ santactl fileinfo now has an "expected decision" field that shows if Santa is expected to allow or deny the execution (note: runtime characteristics may still result in a different decision being applied)
➕ CEL policies now have access to path and is_platform_binary properties
➕ santactl doctor now validates FAA configurations
➕ Block reason has been added to the UI/TTY
➕ Added pid_suspend/pid_resume to telemetry
➕ Workshop customers: CEL fallback policies - You can now add CEL expressions that can apply a global policy in the event no specific rule matched
➕ Workshop customers: CEL policies can now access ancestor execution arguments
➕ Workshop customers: CEL policies can now basic access file descriptor information, enabling policies to express how to handle conditions like stdin attached to a pipe or socket
➕ Workshop customers: Added real-time command to trigger hosts to upload installed binaries/bundles
➕ Workshop customers: MDM policies can now define the set of allowed real-time commands
➕ Workshop customers: Santa will now upload metrics directly to Workshop by default, allowing performance monitoring
Santa documentation can be found at northpole.dev.
What's Changed
- docs: Update serialize-javascript dep by @russellhancox in #828
- docs: Update ajv by @russellhancox in #829
- Improve perf related to event metrics by @mlw in #833
- Wrap proc token data in shared_ptr to reduce retains/releases by @mlw in #835
- ci: Ensure that added unit tests are included in the unit_tests rule by @russellhancox in #834
- Protobuf encoding perf improvements by @mlw in #836
- Fix unbounded arena growth in CEL Evaluator by @pmarkowsky in #831
- add missing notification keys by @arubdesu in #832
- docs: Update multiple deps by @russellhancox in #837
- Support ancestor args in CEL policies by @mlw in #840
- Reuse SNTCachedDecision when a non-cacheable CEL policy matched by @mlw in #839
- Add fallback CEL expressions by @russellhancox in #838
- ui: Add block reason to GUI/TTY by @russellhancox in #842
- santactl/fileinfo: Add Expected Decision field by @russellhancox in #843
- config: Persist sync intervals, display in status by @russellhancox in #845
- santad: Flush cache when CEL fallback rules change by @russellhancox in #847
- cel: Add fds field to CELv2 policies by @russellhancox in #846
- pkg: Add lite version by @russellhancox in #841
- device: enforce drive encryption by @sharvilshah in #824
- telemetry: Rename REASON_FALLBACK_CEL -> REASON_CEL_FALLBACK by @russellhancox in #850
- Decouple metrics from ES classes by @mlw in #852
- Move ES library wrappers to Source/common/es/ by @mlw in #853
- Move ES client base classes to Source/common/es/ by @mlw in #854
- Upgrade all actions by @mlw in #855
- Move ProcessTree to Source/common/pt/ and CSOpsHelper to Source/common/ by @mlw in #856
- config: added a configuration key to allowlist Santa commands by @sharvilshah in #849
- config: Use MDM telemetry filter expressions before sync by @russellhancox in #858
- Fix various style inconsistencies by @mlw in #857
- Remove old, unmaintained fuzzing code by @mlw in #859
- Remove now-unnecessary generated proto wrappers by @mlw in #860
- Bump bazel version and deps by @mlw in #862
- i18n(ru): Fix critical translation errors and improve naturalness by @HelysDU in #851
- sync: handle
blockUnencryptedRemovableMediain preflight by @sharvilshah in #864 - cel: Add
path,target.is_platform_binaryandtarget.team_id fieldsby @russellhancox in #863 - Add EventUpload santa command handler by @pmarkowsky in #772
- protos: update hash, sync: set
encryptedfor USBMountEvent by @sharvilshah in #865 - Move to os_unfair_lock to address inversion issues by @mlw in #866
- Update telemetry.md docs to match code defaults by @tikotzky in #861
- Process tree perf improvements by @mlw in #867
- Add remove_if method on SantaCache by @mlw in #868
- Sync the chrome cookies example on the FAA page by @mlw in #871
- Silence cel-cpp repo warnings by @mlw in #875
- Fix returning nil when non-null required by @mlw in #876
- Extract AuditTokenForPid into new impl file by @mlw in #873
- Update docs deps by @mlw in #879
- More docs deps by @mlw in #880
- santactl/doctor: Validate FAA rules in MDM config by @russellhancox in #874
- metrics: Add sync-based export by @russellhancox in #869
- Update clang-format config and apply by @russellhancox in #878
- Document FAA key name constraints by @mlw in #881
- Handle more mount name formats when blocking network mounts by @mlw in #882
- Fix issue with sync intervals by @mlw in #884
- Update docs deps by @mlw in #886
- Add logging support for ES_EVENT_TYPE_NOTIFY_PROC_SUSPEND_RESUME by @pmarkowsky in #883
- Remove unnecessary stub properties/methods by @mlw in #887
- santad: Use format_to instead of NSString stringWithFormat, remove unused param to CreateDefaultString by @russellhancox in #888
- Fix Timer deadlock when destroyed from callback by @mlw in #889
- Use persisted sync intervals as fallback on startup by @mlw in #885
- Avoid unnecessary string copies in Message::PathTarget by @mlw in #890
- Update doc deps by @mlw in #891
- Update doc deps by @mlw in #893
- Add network extension docs by @mlw in #895
- common: Update MOLXPCConnection to use designated requirements by @russellhancox in #894
- chmod santactl by @mlw in #897
- store and...
2026.2
Notes
Announcements
🎉 Santa has a new Workshop! North Pole Security is excited to announce the release of Workshop, an official sync service specifically designed to deeply integrate with Santa. It is fully featured, scalable, and enterprise ready. Come learn more at northpole.security.
📣 The Santa package now includes two new binaries: a network extension daemon (com.northpolesec.santa.netd) and a helper utility for telemetry export (sleigh). Both are intended for use by Workshop customers only.
Fixed
❗ Fixed issue where the Santa UI could appear to open smaller than needed and then "snap" to the correct size
❗ Fixed a rare UI state race condition that could inadvertently cause the About dialog to be displayed when it shouldn't
❗ Terminal prompts are no longer hidden when an application executed from a terminal is blocked and Santa writes information to the TTY
❗ Fixed regression where custom URLs or EventDetailURL values of "null" were not appropriately removing the button from the UI
Changed
santactl doctor feedback around sync availability is now significantly more accurate, with fewer false positives
Added
➕ CEL policies now have access to the executing binary's signing ID during evaluation, enabling capabilities such as wildcard matching
➕ Added support for the FileAccessEventDetailURL and FileAccessEventDetailText configuration keys, used as fallbacks when there is an FAA block and no per-rule URL or text is provided
➕ Execution events sent to the sync server now indicate whether or not the applied rule was a static rule
➕ A CEL playground is now available for testing and validating CEL rules
➕ Added French (France), French (Canada), and Spanish translations
➕ Workshop customers: Removable media block events are now uploaded during sync and viewable in Workshop
➕ Workshop customers: Telemetry filtering expressions allow you to redact/filter telemetry before being exported
➕ Workshop customers: CEL rules can now act upon the process tree when making a decision
➕ Workshop customers: (BETA) Santa can now report network telemetry
Santa documentation can be found at northpole.dev.
What's Changed
- gui: Add notification setup and TMM failure feedback via icon tinting by @russellhancox in #750
- Fix terminal prompt hidden by blocked exec TTY messages by @mlw in #755
- sync: emit events for USB mount blocks by @sharvilshah in #752
- Document rule dictionary structure by @mlw in #757
- Handle network extension enable/disable by @mlw in #753
- santad: Replace syncservice telemetry export with Sleigh by @russellhancox in #756
- build: Add -v flag to notarytool calls by @russellhancox in #758
- sync: add access time to usb network mount events by @sharvilshah in #759
- Fix issues with about dialog re-opening by @mlw in #760
- Fix termination handler placement by @mlw in #761
- Support CLONE events in the compiler controller for transitive rules by @mlw in #762
- santad: Pass files to Sleigh as open FDs by @russellhancox in #763
- Cleanup minor issues on rule download path by @mlw in #768
- Add NetworkActivity to protobuf schema by @mlw in #765
- telemetry: Add TelemetryFilterExpressions, fix waiting for Sleigh by @russellhancox in #770
- Restore jitter for push notifications sent to tags by @pmarkowsky in #766
- Support File Access variants for EventDetailURL and EventDetailText by @mlw in #771
- docs: Add CEL Playground by @russellhancox in #769
- docs: Add shareable link support to CEL playground by @russellhancox in #774
- Restore Known Limitations Page by @pmarkowsky in #775
- docs: Add 'Try in Playground' links to cookbook examples by @russellhancox in #776
- Update FAA cookbook rule for macOS 26.3 by @pmarkowsky in #778
- docs: Fix top-and-bottom CEL Playground editors by @russellhancox in #779
- events: add USB Mount decision matrix and remount args to the event by @sharvilshah in #777
- santactl/doctor: Check sync health via syncservice by @russellhancox in #773
- Clarify docs for entitlement filtering config keys by @mlw in #783
- sync: Add
static_ruleto events acted upon by a static rule by @sharvilshah in #785 - santad: Add Ancestors field to CELv2 rules by @russellhancox in #780
- build: Codesign sleigh as part of build by @russellhancox in #787
- build: Quote codesign_opts by @russellhancox in #788
- build: Always sign sleigh stub by @russellhancox in #791
- docs: force-update qs dependency by @russellhancox in #792
- sync v2: add token enforcement by @tburgin in #786
- Add infra to support network flow logging by @mlw in #781
- Add ThinLTO to Builds by @pmarkowsky in #795
- deps: Update NATS dep to use local_defines by @russellhancox in #796
- Normalize language around removable media by @sharvilshah in #790
- Don't trigger FAA violations from the Santa bundle service by @mlw in #784
- Add hash field to NetworkActivity proto message by @mlw in #797
- santad: Populate new signing_id field in CEL context by @russellhancox in #793
- sync: Add syncing of telemetry_filter_expressions for syncv2 by @russellhancox in #799
- Handle automatic network extension install on reboot by @mlw in #800
- docs: force-update minimatch dependency by @mlw in #803
- Add network extension info to santactl status by @mlw in #805
- Notify network extension when settings change by @mlw in #801
- Add santanetd version info to santactl version by @mlw in #802
- gui: Ensure window size is correct before displaying by @russellhancox in #807
- Strongly type settings for the network extension by @mlw in #806
- misc: remove
openfrom proto by @sharvilshah in #808 - Add class to support reacting to power state changes by @mlw in #809
- Install/upgrade network extension on system wake by @mlw in #810
- Add LLM translations for French and Spanish by @pmarkowsky in #811
- Fix nested flow logging by @mlw in #812
- Add support for null custom_url to remove open button by @pmarkowsky in #813
- gui: Poll TMM countdown less frequently, re-use date formatter by @russellhancox in #815
- santad: Fix flushcache by @russellhancox in #816
- cache: backfill and format signingID as teamId:signingId by @sharvilshah in #817
- Add santanetd to list of critical binaries by @mlw in #818
- Fix TOCTOU in XPC invalidation handler by @mlw in #819
- docs: Add 'ancestors' field to CEL playground by @russellhancox in #820
- pkg: Fix signing ID for sleigh by @russellhancox in https://gith...
v2026.1
Notes
Announcements
🎉 Santa has a new Workshop! North Pole Security is excited to announce the release of Workshop, an official sync service specifically designed to deeply integrate with Santa. It is fully featured, scalable, and enterprise ready. Come learn more at northpole.security.
📣 macOS 13 (Ventura) is no longer supported.
Fixed
❗ Instigating process information is no longer missing for File Access rule violations committed by processes that started before Santa was running
❗ Fixed issue that prevented blocking mounts of certain external media types
❗ Blocked USB mounts are now logged in the telemetry stream
❗ Fixed overzealous caching of blocked execution events if the event was unable to be uploaded immediately due to network issues
❗ Removed unintentional escape codes in santactl fileinfo --json output
Added
➕ Co-branding is now supported, allowing admins to configure their company name or logo to be displayed on Santa UI dialogs
➕ Santa now has a menu item! This has functionality to trigger a sync and reset any silenced block notifications. For Workshop customers, you can also control temporary monitor mode and see how much time is remaining. Users can turn this off or on from the "About" dialog. Admins can configure this to be off by default by setting the EnableMenuItem configuration key to false.
➕ The santactl fileinfo command now supports a --verify flag to display code signature validation result for each slice of the binary as well as a security assessment via spctl
➕ Workshop customers: Network shares can now be blocked from mounting and exception lists can be configured (macOS 15+)
➕ Workshop customers: Push command support to terminate arbitrary processes
➕ Workshop customers: You can now use CEL rules to require that a user performs TouchID
Santa documentation can be found at northpole.dev.
What's Changed
- Block network mounts pt1 by @mlw in #704
- Add CEL rule to stop users from taking and mounting time machine snapshots by @pmarkowsky in #706
- Data structures for blocking network mounts by @mlw in #705
- Kill command impl by @mlw in #702
- Remove stored events from the backoff cache when event upload fails by @mlw in #709
- ci: Fix localization.py to exit with a code by @russellhancox in #710
- santad: Add REQUIRE_TOUCHID option to CELv2 by @russellhancox in #707
- UI support for blocking network share mounts by @mlw in #708
- Backfill decision cache on startup by @mlw in #712
- Telemetry for blocked USB and Network mounts by @mlw in #711
- Update docs deps by @mlw in #714
- Drop macOS 13 support by @mlw in #716
- Fix: Remove the unintentional inclusion of tty control codes in santactl fileinfo --json output by @pmarkowsky in #717
- Santa command HMAC verification by @mlw in #715
- Use appropriate CEL v1/v2 evaluator by @mlw in #718
- Restrict network mount blocking to macOS 15+ by @mlw in #720
- Remove APNS support by @russellhancox in #721
- Upload stored network mount events by @mlw in #713
- Fix issue #719 by @pmarkowsky in #723
- gui: Add menu item by @russellhancox in #722
- Allow external repos to depend on Santa by @mlw in #726
- build: Disable signing timestamps in bazel by @russellhancox in #725
- gui: Allow users to show/hide menu item by @russellhancox in #727
- Stub module to allow build time injection of network capabilities by @mlw in #728
- Change version target visibility by @mlw in #729
- sync: Fix populating timestamp field for TMM audit events by @russellhancox in #732
- Support manual installation of santanetd by @mlw in #731
- santad: Add telemetry for TouchID/hold-and-ask execution events by @russellhancox in #730
- Add network mount block config to santactl status by @mlw in #734
- Support detecting first launch after boot by @mlw in #733
- Cobranding support by @mlw in #735
- Add 'Reset Silenced Notifications' menu option by @russellhancox in #737
- santad: Add REQUIRE_TOUCHID_SILENT to CELv2 by @russellhancox in #738
- Handle network extension settings from sync server by @mlw in #736
- docs: Force-update lodash by @russellhancox in #739
- santad: Drop pre-Monterey printer proxy support by @russellhancox in #740
- Content filter and XPC channel with network extension setup/configuration by @mlw in #741
- Rename SNTNetworkExtensionSettings by @mlw in #743
- celv2: Add require_touchid{,_only}_with_cooldown_minutes functions by @russellhancox in #742
- Add more NATS error logging by @pmarkowsky in #744
- Optional code signature verification support in
santactl fileinfoby @mlw in #745 - santactl/doctor: Handle no user being logged in, log machine ID/owner by @russellhancox in #746
- Fix menu item UI edge cases by @mlw in #747
- Add lefthook config by @russellhancox in #748
- gui: deny execution of hold&ask events immediately if unavailable by @russellhancox in #749
Full Changelog: 2025.12...2026.1
v2025.12
Notes
Announcements
🎉 Santa has a new Workshop! North Pole Security is excited to announce the release of Workshop, an official sync service specifically designed to deeply integrate with Santa. It is fully featured, scalable, and enterprise ready. Come learn more at northpole.security.
📣 Santa will be ending support for macOS 13 (Ventura) in January 2026.
Fixed
❗ Rules received from a sync server with CEL policies using features not supported by the current version of Santa will no longer cause syncing to fail.
❗ Addressed a memory leak in the santasyncservice process.
❗ Window icons are no longer blurry
Changed
EnableForkAndExitLogging configuration key has been removed and configurations should migrate to using the Telemetry key.
target field in FileAccess telemetry messages emitted by FAA rule violations was switched to be a FileInfo type. This is a wire-, forward-, and backward-compatible protobuf change that now allows consumers to see stat(2) info.
Added
➕ [Workshop Customers] On-Demand Monitor Mode! Admins can configure policies for hosts that allow users to temporarily enter Monitor Mode as needed for a defined period of time. Hosts will automatically revert to Lockdown Mode once the time expires. This enables a much smoother experience for users like developers that need to constantly build & run new binaries without having machines carry permissions for longer than necessary.
➕ CEL policies have access to two new fields which allow for more dynamic and flexible rules: the effective user ID (euid) and current working directory (cwd).
➕ EventDetailURL and EventDetailText can now be set by the sync server.
➕ santactl rule can now be used to check if a given path is covered by a Data FAA rule.
➕ santactl status now displays the current sync interval.
➕ More comprehensive anti-tamper protections.
If you're migrating from Google Santa, please see the Migration Guide for details on how to upgrade.
Santa documentation can be found at northpole.dev.
What's Changed
- ci: Stop running on macos-13, fix lint.sh by @russellhancox in #634
- Adopt mode transition sync protocol changes by @mlw in #626
- Remove unnecessary legacy wrapper to get the IO main port by @mlw in #636
- ObjC timer wrapper. Allow controlling timer restarts. by @mlw in #635
- Some minor cleanup in santactl headers by @mlw in #637
- santactl command to temporarily enter Monitor Mode if eligible by @mlw in #638
- Reenter temporary Monitor Mode on startup if time remaining by @mlw in #639
- build(deps): bump js-yaml from 3.14.1 to 3.14.2 in /docs in the npm_and_yarn group across 1 directory by @dependabot[bot] in #641
- Rename EnableNATS to EnablePushNotifications by @pmarkowsky in #632
- Move pinning code to common where it belongs by @mlw in #643
- santactl status now displays temporary Monitor Mode time remaining by @mlw in #640
- Support EventDetailURL and EventDetailText in the sync protocol by @mlw in #642
- Add localization for authorizing temporary monitor mode by @mlw in #644
- disable v2 check for dev builds by @tburgin in #645
- Fix issue with bundle hash event URLs by @mlw in #646
- Improved checks on mode transition policies by @mlw in #647
- Replace use of internal FieldDescriptorLite type with the public FieldDescriptor. by @dzonder in #648
- Support exporting FAA rules in debug builds by @mlw in #650
- Add sync intervals to santactl status with a human-readable output by @pmarkowsky in #649
- Fix santactl push notification status with NPS Push Service by @pmarkowsky in #652
- docs: Add FAA configuration docs by @russellhancox in #651
- Add CEL rules to prevent enabling SSH and Remote Apple Events by @pmarkowsky in #653
- Simplify the cookbook rules for systemsetup by @pmarkowsky in #654
- docs: Switch CEL cookbook to use AddedBadge by @russellhancox in #655
- Support checking if path is covered by a Data FAA rule by @mlw in #656
- docs: Update js-yaml dep by @russellhancox in #657
- deps: Update several bazel dependencies by @russellhancox in #659
- Add santa command handler by @pmarkowsky in #631
- Set a more readable name for the FDA pane by @mlw in #661
- Refactor temporary monitor mode logic by @mlw in #660
- docs: Update dependencies by @russellhancox in #663
- docs: Delete unused package-lock.json by @russellhancox in #665
- Add rules to lockdown Docker. by @pmarkowsky in #666
- santactl/status: Move sync interval field under current sync times by @russellhancox in #664
- Add stored event types for TMM audit events by @mlw in #662
- Remove the .png from the docker example by @pmarkowsky in #667
- Make Timer thread safe and synchronize TemporaryMonitorMode ops by @mlw in #669
- Adopt flags to reduce Bazel memory footprint in continuous builds by @mlw in #670
- Split continuous testing action runs by @mlw in #671
- build(deps): bump node-forge from 1.3.1 to 1.3.2 in /docs in the npm_and_yarn group across 1 directory by @dependabot[bot] in #673
- Emit audit events from TemporaryMonitorMode by @mlw in #672
- Fix: Switch to using EnableForkAndExitLogging by @pmarkowsky in #674
- Add support for time duration strings. by @pmarkowsky in #675
- Temporary Monitor Mode audit events in sync protocol by @mlw in #676
- santad: Add cwd and euid to CEL context by @russellhancox in #678
- docs: Update CEL docs to mention euid/cwd fields by @russellhancox in #679
- Switch target field in FileAccess messages to be FileInfo type by @mlw in #680
- docs: Remove webpack-dev-server override by @russellhancox in #681
- Fix some memory leaks in the sync service by @mlw in #683
- Fix issue in FAA logging that could cause a crash (unreleased) by @mlw in #684
- santactl/doctor: Improve checking of sync availability by @russellhancox in #682
- Fix blurry window icons. by @mlw in #685
- Improved multi monitor support by @mlw in #686
- Placeholder to handle kill command push notification by @mlw in #688
- Add support for proc suspend/resume events by @mlw in #690
- On by default - suspend/resume by @mlw in #691
- sync: Clear RepeatedPtrFields in EventUpload instead of replacing by @russellhancox in #689
- santasyncservice: fix crash during telemetry upload by @tburgin in #687
- Remove message copies during Event Upload message creation by @mlw in #692
- Helper code sign identifier utilities by @mlw in #693
- Add classes to support kill command by @mlw in #694
- Fix rule download issue where success/failure was improperly determined by @mlw in #695
- Adopt layered errors for Santa Commands by @mlw in #696
- Decode kill command and encode response by @mlw in #697
- Add santactl command command by @mlw in #698
- Remove deprecated EnableForkAndExitLogging config key by @mlw in #699
- Fix build issue when DEBUG isn't defined by @...
v2025.11
Notes
Announcements
🎉 Santa has a new Workshop! North Pole Security is excited to announce the release of Workshop, an official sync service specifically designed to deeply integrate with Santa. It is fully featured, scalable, and enterprise ready. Come learn more at northpole.security.
📣 Ready for Tahoe. This version has been validated on macOS Tahoe 26.0.
📣 Santa will be ending support for macOS Ventura in January 2026.
Fixed
❗ Changes to push notification sync intervals now take effect immediately instead of waiting until the next cycle.
Changed
If you're migrating from Google Santa, please see the Migration Guide for details on how to upgrade.
Santa documentation has undergone a complete overhaul and can be found at northpole.dev.
What's Changed
- New type for handling on demand monitor mode configuration by @mlw in #624
- NATS based push notifications for Sync V2 by @pmarkowsky in #620
- Make sync interval changes apply immediately by @pmarkowsky in #625
- Fix sync timing params by @mlw in #627
- Improved rescheduling on sync failures by @mlw in #629
- Bounce sync service when push notification config changes by @mlw in #630
Full Changelog: 2025.10...2025.11
v2025.10
Notes
Announcements
🎉 Santa has a new Workshop! North Pole Security is excited to announce the release of Workshop, an official sync service specifically designed to deeply integrate with Santa. It is fully featured, scalable, and enterprise ready. Come learn more at northpole.security.
📣 Ready for Tahoe. This version has been validated on macOS Tahoe 26.0.
📣 Santa will be ending support for macOS Ventura in January 2026.
📣 This release introduces a new private sync protocol that includes a limited set of features that can only be used by Workshop customers. The private protocol allows us to iterate more rapidly on certain features without the constraint of maintaining backward compatibility across all existing sync servers. This flexibility will help us deliver improvements faster and respond more quickly to customer needs.
We remain committed to the public sync protocol and will continue maintaining and improving it. Many new features will still be developed in the public protocol, and where feasible, we plan to migrate features from the private protocol back to the public one over time. Read more about this on the North Pole Security blog.
Fixed
❗ Loading an FAA policy with one or more invalid rules no longer causes the entire policy to fail to load
Changed
TeamID:SigningID syntax for SigningID keys that is supported by the SIGNINGID rule type in execution rules.
Added
➕ Workshop customers: FAA rules can now be managed via the sync protocol.
If you're migrating from Google Santa, please see the Migration Guide for details on how to upgrade.
Santa documentation has undergone a complete overhaul and can be found at northpole.dev.
What's Changed
- docs: Add OS support matrix by @russellhancox in #596
- Support FAA rules with TID:SID notation by @mlw in #597
- Add FAA rule counts and rule hashes to sync protocol by @mlw in #598
- build: Split non-bazel deps into separate BUILD files by @russellhancox in #599
- Handle FAA rule data source transitions. Cleanup status output. by @mlw in #600
- BETA FAA rule download by @mlw in #603
- Allow loading FAA policies that are partially invalid by @mlw in #602
- Inject dates in monarch json tests in order to remove mocks by @mlw in #604
- Add FAA rule for protecting Chrome extensions to the cookbook by @pmarkowsky in #601
- Add a rule to stop obvious timestomping of launch daemons and agents by @pmarkowsky in #605
- docs: Update screenshots with updated logo by @russellhancox in #606
- feat: Add Google Analytics and Plausible tracking scripts by @statico in #607
- Add Cookbook rule for stopping osascript asking for passwords. by @pmarkowsky in #608
- pkg: Add version number to pkg by @russellhancox in #609
- Migrate stats state plist to be more generic by @mlw in #610
- docs: Split cookbook CEL into multiline by @russellhancox in #612
- Support timer restarts, change how startup delay works by @mlw in #611
- GitHub issue templates by @mlw in #473
- Pin NPS domains and cert PEMs by @mlw in #613
- Bump bazel and dep versions by @mlw in #615
- Handle v1 and v2 sync protocols by @mlw in #616
- Simplify templates using non-type parameters by @mlw in #617
- Silence deprecation warnings within protobuf dependency by @mlw in #618
- Support aliases and hyphens/underscores for santactl commands by @mlw in #619
- Improved error handling/logging for received rules and StaticRules by @mlw in #621
- Fix FAA rule counts by @mlw in #622
- Add a backoff cache for unactionable stored events by @mlw in #623
Full Changelog: 2025.9...2025.10