Back to blog
2026-05-30 Thijs Creemers

Release: v1.0.1-alpha-26

A feature release. Two new libraries join the suite — boundary-audience for rule-based segmentation and boundary-push for mobile push notifications — alongside a new boundary-realtime connection hook and a cache eviction fix.

Added: boundary-audience

A new audience segmentation library (libs/audience/) with declarative, rule-based segment definitions.

  • defaudience macro for code-defined segments with seven built-in filter types: demographics, location, role, account-tenure, last-active, behavior, and feature-usage.

  • Hybrid SQL + predicate evaluation pipeline — SQL-eligible filters are pushed to the database, remaining filters run as Clojure predicates over the candidate set.

  • AND/OR/NOT segment composition with circular-reference detection.

  • Dynamic (DB-persisted) segments via JSON, with schema validation that rejects fn-typed values.

  • Cached membership results in an audience_memberships table with configurable per-segment TTL.

  • Builder UI served via HTMX with Replicant widget mount points for the filter panel and composition builder.

  • REST + web endpoints: CRUD, preview with count + sample, evaluate + cache, member listing.

  • Custom filter type extensibility via filter→sql and filter→predicate multimethods.

  • Integrant wiring with IAudienceResolver, IAudienceRepository, and IAudienceCache components.

Added: boundary-push

A new push notification library (libs/push/) with multi-platform delivery via FCM (Firebase Cloud Messaging) and APNs (Apple Push Notification service).

  • defpush macro for declarative notification definitions with i18n locale maps, deep links, priority, TTL, collapse keys, and retry configuration.

  • Platform-specific provider protocols (IFCMProvider, IAPNsProvider) behind a unified IPushService orchestrator.

  • Device token management — registration, rotation, soft-deactivation, and stale token cleanup.

  • HMAC-secured analytics callback endpoint for client-reported delivery/open tracking.

  • Error classification (retryable / permanent / token-invalid / rate-limited) for intelligent retry decisions.

  • Async parallel delivery via sendAsync + CompletableFuture for both FCM and APNs.

  • Job-based reliable delivery via a hard dependency on boundary-jobs.

  • REST endpoints: device CRUD (/api/push/devices), callback (/api/push/callback), stats (/api/push/stats/:id).

  • Database migrations for push_device_tokens, push_send_log, and push_analytics_events with multi-tenant support.

  • Mock providers for dev/test and Integrant wiring for all components.

  • 41 tests, 118 assertions covering unit, integration, and contract layers.

Added: realtime on-open callback

boundary-realtime’s `websocket-handler now accepts an optional :on-open callback — (fn [connection-id]) invoked after a successful connect. Use it to subscribe connections to topics based on the authenticated user’s roles. Exceptions thrown by the callback are logged and swallowed, so they do not abort the connection.

Fixed: deterministic cache eviction

boundary-cache LRU eviction now uses a monotonic access counter instead of timestamps, fixing non-deterministic eviction when entries are created within the same millisecond.

Version alignment

All 24 libraries bumped to v1.0.1-alpha-26 to maintain lockstep versioning.

Upgrade

Re-run the installer to pick up the latest release:

curl -fsSL https://get.boundary-app.org | bash

No breaking changes. The new libraries are opt-in — add boundary-audience or boundary-push to your deps to use them.