Releases: northpolesec/santa
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
v2025.9
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
❗ Fixed issue when using protobuf logging where the very first batch of messages on startup might be missing the type_url, which could affect parsing
Changed
Rule output for santactl fileinfo is more helpful, will now state if a rule would have matched but was ignored because the binary being evaluated was signed with a development certificate
FileAccessPolicyUpdateIntervalSec configuration is now changeable without a restart
Added
➕ FAA block events are now uploaded as part of the sync protocol, similar to execution events.
➕ FAA log rate limiting parameters are now configurable
➕ Signing time information has been added to telemetry logs
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
- Add a make target for making dev releases by @pmarkowsky in #561
- docs: Add PayloadUUID to generated payload by @russellhancox in #564
- docs: Add note about non removable system extensions by @russellhancox in #567
- sync: Add logging when private key is inaccessible by @russellhancox in #568
- Support FAA block events in the sync EventUpload phase by @mlw in #569
- Fix unset type url for the Any protobuf message in the first batch by @mlw in #571
- Add FAA decision to event upload requests by @mlw in #572
- Upload FAA blocks to sync server immediately by @mlw in #573
- Add signing time info to telemetry by @mlw in #575
- docs: Update docs dependencies by @russellhancox in #576
- Add macos-26 runners to matrix by @pmarkowsky in #577
- Fix version issue with last events table upgrade by @mlw in #578
- Move WatchItems types to common by @mlw in #579
- Document CEL a little more in the CEL Cookbook by @statico in #580
- Parse FAA rules in rule download phase by @mlw in #581
- Support sending FAA rules over XPC from sync service to daemon by @mlw in #583
- Add FAA rules received and processed counts by @mlw in #584
- Support changing FAA rate limiting variables via configuration by @mlw in #585
- Add new table to the rules database for file access rules by @mlw in #586
- Validate FAA rules on when received via sync server by @mlw in #588
- Load FAA rules from database at startup by @mlw in #589
- Attempt to repair corrupted databases on startup by @mlw in #590
- Fix telemetry export settings name, make them changeable at runtime by @mlw in #591
- event update: use repeated process for faa events by @tburgin in #587
- Stop copying data unnecessarily when iterating DB results by @mlw in #593
- Make fileinfo output helpful when rule was ignored due to dev signed code by @mlw in #594
- Timer improvements, allow FileAccessPolicyUpdateIntervalSec to be updated dynamically by @mlw in #592
Full Changelog: 2025.8...2025.9
v2025.8
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 the latest macOS Tahoe beta (beta 8).
Fixed
❗ A very rare crash that could occur when creating a transitive rule for a new file
Changed
santactl fileinfo timestamps are now displayed in ISO8601 format, making them suitable to copy/paste into CEL expressions
Added
➕ Support for CEL string extensions
➕ The File Access Authorization dialogs now have a "Copy Details" button
➕ (BETA) Workshop, our official sync server for Santa, can now enable Santa telemetry export to the cloud (AWS S3 or GCP GCS) and provides an easy to use interface to query Santa’s full set of EDR telemetry.
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
- Clean up citation and add extra location for Spotlight importers by @pmarkowsky in #511
- project: Check-in git pre-push hook to lint before pushing by @russellhancox in #510
- docs: Add Slack Cookies FAA policy by @russellhancox in #512
- sync: Ensure validateBlock is correctly used in sync test by @russellhancox in #505
- build: Update several bazel modules by @russellhancox in #507
- Make Spool a template class on type of batcher member by @mlw in #513
- santad: Stop logging failure to create signing ID for adhoc binaries by @russellhancox in #514
- Add note to docs about rule requirements for dev signed code by @mlw in #516
- docs: Fix anchor links, increase h4 font size by @russellhancox in #518
- docs: Add rule layering section back to the docs by @pmarkowsky in #517
- santad: Don't block 0 signal, log what signal is sent by @russellhancox in #520
- Support XXH3 64bit by @mlw in #522
- Support a new streaming protobuf format by @mlw in #519
- Remove unnecessary build macro by @mlw in #523
- Cleanup spool tmp dir on fsspool construction by @mlw in #525
- Update
santactl printlogto support protobufstream formatted logs by @mlw in #526 - Add binary digest method to SNTXxhash by @mlw in #527
- telemetry export: prepare for signed URL export by @tburgin in #521
- Add string extensions to CEL evaluator by @pmarkowsky in #524
- Add digest to protostream encoding by @mlw in #529
- docs: Add trailingSlash config by @russellhancox in #532
- docs: Add llms.txt by @statico in #531
- telemetry export: post to cloud bucket by @tburgin in #528
- ci: Merge test and build phases by @russellhancox in #533
- ci: Move flaky test workflow to 3am EST by @russellhancox in #535
- ci: Add remote cache by @russellhancox in #537
- telemetry: stream multiple files by @tburgin in #536
- santad: Add sending process to tamper resistance logs by @russellhancox in #538
- docs: Temporarily use NPS docusaurus-plugin-llms plugin by @statico in #539
- Pin all actions in workflows by @russellhancox in #540
- Compressed protostream support by @mlw in #541
- NSData Gzip Decompression, stream compression verification by @mlw in #542
- Move TemporaryFile class to a standalone ScopedFile class by @mlw in #543
- tel export: fix http status log by @tburgin in #545
- santactl/fileinfo: Change timestamps to ISO8601 by @russellhancox in #546
- Support compressed stream in santactl printlog by @mlw in #544
- santad: Handle rare compiler controller crash by @russellhancox in #547
- Add Single Shot mode to Timer mixin class by @mlw in #548
- build(deps): bump mermaid from 11.6.0 to 11.10.0 in /docs in the npm_and_yarn group across 1 directory by @dependabot[bot] in #549
- Support export batches by @mlw in #550
- Expose config to enable telemetry export by @mlw in #552
- Add Copy Details button to the FAA block dialog by @mlw in #554
- Cookbook: Update slack rules to better handle helper binaries by @pmarkowsky in #553
- telemetry export: remove extra dot from file extension by @tburgin in #557
- telemetry: fix content type by @tburgin in #559
- Ensure to ack files even when all spool files are unsupported by @mlw in #558
- Add additional prod cert OID by @mlw in #560
Full Changelog: 2025.7...2025.8
v2025.7
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.
📣 Ready for Tahoe. This version has been validated on the latest Tahoe beta (beta 4) and includes some small fixes to keep things running smoothly on the upcoming macOS Tahoe release.
Fixed
❗ A minor memory leak could occur when evaluating executions of binaries that were not validly signed
❗ Unable to immediately block a binary that was previously executed and allowed on due to cache (issue on macOS Tahoe only)
❗ Execution telemetry could, on very rare occasions, have an improper reason code logged
Changed
santactl fileinfo has been updated with better detection of binaries signed with development certs so that rule information returned more accurately matches what would be selected at runtime
Added
➕ The sync protocol now contains information in preflight and postflight stages that allows sync servers to detect rule drift, allowing them to take corrective action
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
- build: Fix make build by @russellhancox in #479
- Support dynamic APNS registration by @mlw in #475
- docs: Add beginning of cookbook by @russellhancox in #482
- Adopt scoped type to fix leak by @mlw in #483
- Ignore static rules in SNTRuleTableTest's implicit ordering test by @mlw in #485
- santactl/fileinfo: Better detect dev-signed binaries by @russellhancox in #484
- santactl/doctor: Stop complaining about standard profile keys by @russellhancox in #486
- docs: Update config profile format by @russellhancox in #487
- santactl/fileinfo: Fix mismatched signature error matching by @russellhancox in #488
- ObjC++ all the things by @mlw in #490
- santad: Add more info in tamper protection logging by @russellhancox in #489
- build: Update cel-cpp version by @russellhancox in #492
- Initial adoption of rednose macro by @mlw in #493
- sync: ignore app name if the rule is remove by @tburgin in #495
- Fix reason values in exec logs by @mlw in #499
- Rework SNTStoredEvent by @mlw in #498
- sync: If sync state is empty, request clean sync by @russellhancox in #501
- sync: Send a hash of all database rules at beginning and end of sync by @russellhancox in #502
- Cookbook: Add CEL rule to prevent users from disabling gatekeeper by @pmarkowsky in #503
- Add new icons for 2025-07 by @statico in #462
- Make sure clear cache operations have a connected ES client by @mlw in #504
- Add rule to lockdown spotlight importers by @pmarkowsky in #506
- docs: Update logo, add announcement, theming by @russellhancox in #508
- Add nullability to stored events. Fix unwrap of missing data. by @mlw in #509
Full Changelog: 2025.6...2025.7
v2025.6
Notes
Important
The binaries initially uploaded for this release only contained the arm64 slice. We have updated the binaries to be universal and also include the x86_64 slice as well. You may need to re-download the latest binaries if deploying to Intel Macs.
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.
Announcements
📣 (BETA) Common Expression Language (CEL) has been added as a supported policy type! This is a powerful new feature that expands what can be expressed in a rule. Please see our CEL documentation for more details and examples, as well as the Rule schema for information on how to populate the expression.
- North Pole Security Workshop customers have access to a fully integrated CEL evaluator and playground in the rule editor.
📣 We've created a Config Generator to help admins craft Santa configuration!
Fixed
❗ Overzealous caching of executables matching compiler rules could cause transitively created executables to not have rules automatically created
❗ On rare occasions, and only when transitive rules or standalone mode were enabled, Santa could potentially exclude some events from the EventUpload phase of syncing
❗ A very rare crash could occur if an XPC connection went invalid before it finished being established
❗ FAA rules with paths that contained glob characters could cause a memory leak
Changed
santactl status output, including JSON output via the --json flag, has been slightly changed to provide better data grouping and more consistent output across the groups
EnableDebugLogging configuration key is no longer needed. Debug logs can be viewed along with other log messages using appropriate arguments with the log(1) command.
santactl fileinfo now default to UTC. This can be changed to use the local system timezone by using the --localtz flag.
santactl fileinfo and santactl rule now shows the matched rule, not the decision, since this is often heavily influenced by runtime information that isn't available during a static check
UnknownBlockMessage and BannedBlockMessage configuration keys that are displayed when an execution is blocked are now clickable
Added
➕ (BETA) Rules can now include CEL policies! See our CEL documentation for more details and examples.
➕ Santa now emits distributed notifications when FAA policy violations occur, similar to the notifications that are sent when executions are blocked.
➕ A clean sync can now be initiated from the "About" UI dialog by holding the Option key when clicking the "Sync" button
➕ Executable signing timestamps were added to sync preflight messages and santactl fileinfo output
➕ Paths for Proc FAA rules now also support glob characters in the same way as Data FAA rules.
➕ New checks were added to santactl doctor to look for potential sync server certificate and communication issues
➕ Primary user groups can now be defined by the MachineOwnerGroups or MachineOwnerGroupsKey configuration key. This value is included in preflight requests to allow sync servers to improve rule targeting.
What's Changed
- docs: add back troubleshooting.md by @tburgin in #422
- Initial plumbing for export configuration by @mlw in #416
- Remove
EnableDebugLoggingconfig key. Supportsantactl sync --debugby @mlw in #423 - gui: Allow clean syncing by holding Option by @russellhancox in #420
- Keychain wrapper implementation by @mlw in #425
- Update bazel-contrib by @mlw in #426
- santactl,sync: Add signing timestamps by @russellhancox in #428
- santactl/fileinfo: Add --localtz flag, default to UTC by @russellhancox in #429
- Store export config and send back to sync service by @mlw in #427
- Do not cache allows for compiler processes at the ES layer by @mlw in #430
- Renaming signing timestamp fields by @mlw in #431
- sync: Fix rare issue causing event upload to skip by @russellhancox in #432
- common: Add CEL evaluator by @russellhancox in #424
- Fix rare crash when XPC connections go invalid before completion by @mlw in #433
- santad: Integrate CEL rule processing into execution path by @russellhancox in #434
- Adopt latest AWS export config by @mlw in #435
- cel: Migrate to cel.proto from protos repo by @russellhancox in #437
- santad: Add sync-state.plist to protected files, protect reads by @russellhancox in #438
- santad: If CEL rules fail and FailClosed is true, fail closed. by @russellhancox in #439
- santactl/fileinfo: Change how Rule field is populated by @russellhancox in #436
- Rework how files being exported are tracked by @mlw in #440
- Fix mem leak related to FAA paths with globs by @mlw in #443
- docs: Add info about rule policies by @russellhancox in #446
- gui: Add distributed notifications for FAA blocks by @russellhancox in #447
- docs: Upgrade docusaurus to 3.8.1 by @russellhancox in #449
- build(deps): bump brace-expansion from 1.1.11 to 1.1.12 in /docs in the npm_and_yarn group across 1 directory by @dependabot in #450
- Add glob support to paths for Proc FAA rules by @mlw in #444
- santactl/doctor: Add checks for syncing, update MOLAuth logs by @russellhancox in #448
- Adopt rednose. Basic support for exporting telemetry to S3 by @mlw in #451
- sync: add support for primary user groups by @tburgin in #454
- gui: Make links in custom messages clickable by @russellhancox in #455
- santactl/sync: Add ability to ingest CEL rules. by @russellhancox in #453
- docs: Add basic docs for CEL policy by @russellhancox in #456
- docs: Add missing AddedBadge to CEL policy by @russellhancox in #457
- Support GCP export via Rednose by @mlw in #458
- santactl/fileinfo: Identify static rules by @russellhancox in #459
- Configure rust toolchain for dependencies by @mlw in #460
- Support multi-arch builds by @mlw in #461
- santactl/status: Show status for disabled features by @russellhancox in #465
- santactl/status: Add some new fields, change output groupings, rework JSON output. by @mlw in #467
- santad: Flush cache when CEL rules change by @russellhancox in #468
- santad: Check CEL expression validity before adding to DB by @russellhancox in #469
- santad: Move StaticRule processing into SNTRuleTable. by @russellhancox in #470
- readme: Update shields by @russellhancox in #471
- docs: add owner groups by @tburgin in #472
- gui: Fix minor UI issue when an app sets empty bundle name by @mlw in #474
- build: Fix multi-arch builds for rust by @russellhancox in #478
- build: Check release builds contain both archs by @russellhancox in #477
Full Changelog: 2025.5...2025.6
v2025.5
Notes
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.
Announcements
📣 macOS 12 is no longer supported
📣 We've created a Config Generator to help admins craft Santa configuration!
📣 Santa can now collect basic, non-identifying stats on an opt-in basis by setting the EnableStatsCollection configuration key to true. See our Stats documentation for complete details. Please consider opting in your organization to help us better maintain Santa for the whole community!
Fixed
❗ ClientMode change user notifications had empty messages
❗ Rule comments were being dropped when importing rules via santactl rule --import
❗ Bundle hashing could occur in the background even if not configured by the sync server
Changed
EnableBundles setting is now stored with other sync variables so that the setting is maintained across daemon/system restarts and applied before the first Santa sync
Added
➕ The machine's SIP status has been added to the sync protocol's preflight requests
➕ Santa's "About" dialog has been redesigned and made more useful. Users can now trigger a sync or drag-and-drop an application to capture file info without having to interact with the command line. Drag and drop is also supported on the Dock icon if it is currently showing.
➕ Added the eventupload command to santactl to capture event details for a given application and send to the configured sync server. This is primarily useful for admins that want to ensure full application details exist on the server for applications that don't have an associated block rule and would not otherwise capture this information automatically.
What's Changed
- docs: Replace docs with new docusaurus-based site by @russellhancox in #375
- build(deps): bump the npm_and_yarn group across 1 directory with 3 updates by @dependabot in #376
- Fixed up background apps plist example by @sysophost in #378
- docs: Add algolia config by @russellhancox in #382
- docs: highlight santa profile content, update sizing by @russellhancox in #381
- docs: Add simple README by @russellhancox in #383
- gui: Update about window with new design and default text by @russellhancox in #374
- gui: Fix mode change notifications by @russellhancox in #380
- Apply Machine ID config updates in real time by @mlw in #377
- docs: update UUIDs in example profiles to be different than the old Google Santa profiles by @pmarkowsky in #384
- Bump builds to C++20 by @mlw in #386
- Address build issues with C++20 on older OS versions by @mlw in #387
- sync: Populate sip_status field in Preflight by @russellhancox in #385
- sync: Handle 'global' push notifications by @russellhancox in #390
- Add Timer mixin, adopt in Logger class. by @mlw in #388
- gui: Add 'sync' button to About window by @russellhancox in #389
- Respect rule comments on import by @mlw in #391
- build: Disable codesign timestamp for dev builds by @russellhancox in #392
- Bump Bazel and module versions by @mlw in #396
- Collect, open, and send telemetry files to sync service for processing by @mlw in #395
- gui: allow drag & drop on about window or dock icon to get app details by @russellhancox in #398
- build: Bump minimum macOS version to 13, document the policy by @russellhancox in #399
- Remove run time and compile time checks for macOS 13 by @mlw in #400
- Update how MOLXPCConnection tracks connections, vends proxy objects by @mlw in #401
- FAA glob expansion enhancements by @mlw in #394
- Standardize bazel module dependency naming style by @mlw in #403
- gui: change button behavior during hashing by @russellhancox in #404
- gui: Simplify display of bundle hash progress, animate disappearing by @russellhancox in #405
- gui: don't show bundle hash view if bundle hashing is not needed by @russellhancox in #407
- Update telemetry keys in docs by @mlw in #408
- ci: Stop running on all branches by @russellhancox in #409
- build(deps): bump estree-util-value-to-estree from 3.3.3 to 3.4.0 in /docs in the npm_and_yarn group across 1 directory by @dependabot in #411
- docs: Add the beginning of the config generator by @russellhancox in #412
- santactl: Fix misleading message from errSecCSInfoPlistFailed by @russellhancox in #413
- Add EnableBundle sync config to sync state plist by @mlw in #414
- santactl: add eventupload command by @tburgin in #410
- bundle service: Adaptive priority by @tburgin in #415
- gui: Fix and prevent crash formatting signing IDs by @russellhancox in #417
- gui: Fix accessory/hide handling with multiple windows by @russellhancox in #418
- gui: Move all activationPolicy changes into AppDelegate by @russellhancox in #419
New Contributors
- @dependabot made their first contribution in #376
- @sysophost made their first contribution in #378
Full Changelog: 2025.4...2025.5