Changelog History
Page 1
-
v5.2.3 Changes
June 10, 2026What's Changed
- ๐ fix: use opaque graphics context when resizing the app icon by @tsushanth in #371
- ๐ fix: RichTextView share/copy produces empty content when textView is nil by @mehmetozkn in #369
๐ New Contributors
- @tsushanth made their first contribution in #371
- @mehmetozkn made their first contribution in #369
Full Changelog : 5.2.2...5.2.3
-
v5.2.2 Changes
May 17, 2026What's Changed
- ๐ Fix SIGTRAP in NetworkTaskEntity.state(in:) when session UUID is NULL by @bdolewski in #368
- Speed up text search in NetworkInspector for large response bodies by @rusik in #367
- Recreate blobs directory after store schema migration by @rusik in #366
- ๐ Improve Liquid Glass support
๐ New Contributors
- @bdolewski made their first contribution in #368
- @rusik made their first contribution in #367
Full Changelog : 5.2.1...5.2.2
-
v5.2.1 Changes
April 20, 2026- ๐ Fix a crash on iOS 26 Simulator where
UIImage(named:)raisesNSInternalInconsistencyException("Need an imageRef") for app icon assets that can't be rasterized for the current trait (#364)
- ๐ Fix a crash on iOS 26 Simulator where
-
v5.2 Changes
April 19, 2026๐ This release introduces improvements to search, filters, session management, performance, and more. See them in action in the recording.
Distribution
- โ Remove CocoaPods support
- โ Remove pre-built binaries (subject to change if there is a strong demand)
Search
- โก๏ธ Rewrite the console search engine around a new
ConsoleSearchSessionthat owns a private-queue Core Data context and runs fetching, matching, and live-update observation entirely off the main thread. Results are incremental, cancelable, and batched through a short flush interval, so the UI no longer hitches on large stores โ tested end-to-end on stores with 1M+ messages - Preserve grouping while searching the console: search results are now rendered under the same section headers as the main list and share collapse state, so switching into and out of search no longer flattens the view
- Bring the full search suggestions experience to PulseUI: the search bar now surfaces both recent searches and filter suggestions (domains, paths, status codes, methods) sourced from the store index, and tapping a suggested filter applies it directly to the active criteria. Previously this was only available in Rift, and PulseUI showed recent searches only
- โ Add simplified search tokens so you can quickly filter by domain, path, status code, and HTTP method (work-in-progress)
- โ Add a separate "Query" search scope so you can search URL query strings independently of the path
- ๐ Merge "Original Request Headers" and "Current Request Headers" into a single "Request Headers" scope
- ๐ Change the default network search scopes to include the response body alongside the URL โ searching for a JSON value now works out of the box
- ๐ Redesign the search scopes picker: it's now sectioned by Logs and Network, with per-section "All / None" toggles and a "Reset to Defaults" action
- 0๏ธโฃ Scope changes within a search session are temporary. Use the new "Save as Default" action in the scopes picker to persist your preferred selection across app launches
- Stop resetting scopes and string search options when the search sheet is dismissed
- ๐ The scopes pill now shows a meaningful label ("All", "Logs", "Network", the scope title, โฆ) instead of just a count
- Extend
StringSearchOptions: add a new "Multiple Words" kind that matches strings containing every space-separated word, and "Matching" / "Matching Word" matching rules for exact and word-boundary matches. Reword the existing rules for consistency ("Containing", "Starting With", "Ending With"). Applied uniformly across every search surface - ๐ Fix a bug where the URL scope silently stripped the query string before searching
Filters
- Bring the advanced filters into the main console: every network and message predicate is now available
- โ Add "Status Code", "Content Type", "Duration", "Request Body Size", and "Request State" to the built-in network filters, organised into Response, Request, and Advanced sections
- โ Add "Path" to the "Field" options in custom network filters, backed by a new stored attribute on
NetworkTaskEntity, and organize the field picker into groups with section headers for easier navigation - โ Add "Error Domain" and "Task Description" to the "Field" options in custom filters
- Auto-save recent filters: the last-used filter combinations are now remembered and shown in a dedicated "Recent Filters" section, letting you re-apply previous criteria in one tap
- ๐ Improve filters on watchOS: replace the Status Code range picker with a standard Picker offering predefined options (Any, Success 2xx, Redirects 3xx, Client Errors 4xx, Server Errors 5xx, All Errors), and remove Duration, Response Body Size, and Request Body Size filters that didn't fit the small screen. The available network filters on watchOS are now: Status Code, Content Type, HTTP Method, Custom Filters, Hosts, Task Type, Request State, Response Source, and Redirect. Message filters: Custom Filters, Levels, and Labels.
Sessions
- โ Add a "Sessions" shortcut to the console toolbar for quick access to the sessions picker. When a non-current session is selected, the icon is highlighted as a reminder
- โ Add a "Show Previous Session" footer to the console list: appears at the bottom of the list and loads the next older session on tap
- Redesign session cells: session numbering, a "Current" badge for the active session, message counts, and relative timestamps for today's sessions (e.g. "5 min ago")
- โ Add a context menu to session cells with a preview showing the session date, app version, and UUID
- โ Add a "Remove Logs" swipe action and context-menu item for the current session that clears its logs without deleting the session itself
- ๐ Move the Share swipe action to the leading edge and Delete to the trailing edge in the session list
- โ Add "Select" mode to the session list. Each date-grouped section now shows a "Select All" / "Deselect All" button in Select mode, so you can grab every session for a given day in one tap. The selection count is shown in the navigation title and actions live on the bottom bar โ which now also appears correctly in read-only stores
- Bring the full sessions picker to watchOS and tvOS โ previously these platforms only showed a truncated list
Console list & toolbar
- ๐ Redesign the console heading: the navigation title is now inline and doubles as a menu for switching between "All", "Logs", and "Network", with a subtitle showing the current count (e.g. "21 Tasks"). While searching, the title reflects the search state
- โ Add "Select" mode to the console list: enter via the context menu or a two-finger swipe gesture, pick multiple log entries, and share them using the toolbar at the bottom. Selection works in search mode too
- Consolidate the regular and search toolbars into a single
ConsoleToolbarView. Filters and the "Only Errors" toggle now live on the leading edge in both modes; the search scopes pill and string-options menu appear on the trailing edge only while searching - โ Add "Sort By" and "Group By" pills to the console toolbar (non-search mode). Sort By exposes the field and ascending/descending order; Group By is wired all the way through
ConsoleDataSourceso the list is now rendered as proper sections in PulseUI on iOS for the first time. Both menus remain available from the "More" menu - โ Add a quick-reset
xmark.circleto the Filters, Sort By, and Group By pills: when non-default, tap to reset in one tap - ๐ Make grouped sections in the console list collapsible: tap a section header to toggle expansion, with a chevron indicating the current state. The group name is followed by the item count
- Persist manually collapsed console sections across launches, scoped to the current
(mode, groupBy). "Collapse All" / "Expand All" stay in-memory only - ๐ Move "Filters" out of the inline navigation bar items and into the "More" menu
- ๐ Unify all console toolbar pills (Filters, Only Errors, Sort By, Group By, search scopes/options) on a shared layout so they share the same height and visual style
Customisation API (
ConsoleDelegate)- โ Add
ConsoleDelegateprotocol for per-task customization ofConsoleView.ConsoleView.initnow accepts an optionaldelegatethat can return a differentConsoleListDisplaySettingsfor each task. The protocol is@MainActorand usesUserSettings.shared.listDisplayOptionsas the default - โ Add
ConsoleDelegate.console(contentViewFor:)to replace the task cell's main content area (method + URL) with a caller-supplied SwiftUI view. When non-nil, it supersedesConsoleListDisplaySettings.ContentSettingsentirely; the header and footer still render from settings as usual - โ Add
ConsoleDelegate.console(responseBodyViewFor:)to replace the built-in response body viewer with a caller-supplied SwiftUI view. Use it to plug in a protobuf decoder (via the integrator's ownSwiftProtobuftypes) or any other format the defaultFileViewerdoesn't understand - โ Add
ConsoleDelegate.console(inspectorViewFor:)to inject a custom SwiftUI section into the network inspector (e.g. decoded GraphQL variables, parsed protobuf). Rendered after the built-in response/metrics sections - โ Add
ConsoleDelegate.console(contextMenuFor:)to inject app-specific items (e.g. "Replay", "Open in admin panel") into the task cell's context menu and into the network inspector's "More" menu - โ Add
ConsoleDelegate.console(redact:field:for:)for masking sensitive strings (auth tokens, PII) before they are rendered. Applied to URL, host, header, task-description, and caller-supplied strings in the task cell as well as the inspector's navigation title. A newConsoleRedactionFieldenum identifies which field is about to be rendered - ๐ Make
RichTextViewandRichTextViewModelpublic so integrators building customresponseBodyViewFor:views can reuse the standard text-viewer chrome (search, line numbers, link detection, share). Construct aRichTextViewModel(string:contentType:)from anNSAttributedString(optionally produced by the existing attributed-string helpers) and wrap it inRichTextView - โ Add
ConsoleListDisplaySettings.ContentSettings.customTextto render a caller-supplied string verbatim in place of the default method + URL content (e.g. a GraphQL operation name). When set,showMethodandcomponentsare ignored - โ Add
ConsoleListDisplaySettings.TaskField.url(components:)to render the full URL, or a specificURLComponentwhen provided, in header/footer fields - โ Add
ConsoleListDisplaySettings.TaskField.custom(String)to render a caller-supplied string verbatim in header/footer fields - โ Add
NetworkLogger.ContentType.isProtobuffor matchingapplication/x-protobufandapplication/grpccontent types
๐ Performance
- โก๏ธ Optimize the console list rendering path: cache formatted timestamps on
LoggerMessageEntity/NetworkTaskEntityso each...
-
v5.1.4 Changes
April 15, 2025What's Changed
- ๐ fixed har export issue by @abhimaanmadhav in #319
- ๐ fix: Resolve RichTextView scrolling issue & Prevent app freezing on tvOS (issue: #308) by @lsh424 in #310
- ๐ Handle InputStream.read failures by @kabiroberai in #332
- Disable "Report" & "Settings" options in prompts by @parmar-mehul in #331
๐ New Contributors
- @abhimaanmadhav made their first contribution in #319
- @lsh424 made their first contribution in #310
- @parmar-mehul made their first contribution in #331
-
v5.1.3 Changes
February 25, 2025What's Changed
- ๐ Fix deadlock in NetworkLogger by @kabiroberai in #312
๐ New Contributors
- @kabiroberai made their first contribution in #312
Full Changelog : 5.1.2...5.1.3
-
v5.1.2 Changes
October 11, 2024What's Changed
- ๐ Fix an issue with
isAutomaticConnectionEnablednot starting the browser the first time it's enabled - ๐ Fix crash when exporting HAR file by @rounak in #299
- ๐ Fix concurrency issue in
StoreDetailsViewModelby @ejensen in #302 - โก๏ธ Update the deep search. It will now show all search scopes found and only one match per scope. You can tap on a match to see the scope with a prepopulated search query to see the remaining items.
- ๐ Fix an issue with deep search not working for request and response headers
๐ New Contributors
- ๐ Fix an issue with
-
v5.1.1 Changes
September 20, 2024What's Changed
- Implement deep JSON redaction by @briancordanyoung in #292
- ๐ Fix a CoreData multithreading issue in
LoggerStore.info()by @ejensen in #293 - ๐ Fix
ConsoleViewfocus state clipping on tvOS by @ejensen in #295 - โช Revert the removal of the
NetworkLoggerโs convenience initializer by @ejensen in #294
๐ New Contributors
- @briancordanyoung made their first contribution in #292
-
v5.1 Changes
September 17, 2024Appearance
0๏ธโฃ Pulse 5.1 features an enhanced design for console cells with improved information hierarchy. It has multiple tweaks, but the main change is how the URLs are formatted. By default, the console will now show only the path with a host as a secondary field below it.
Customization
๐ The new cells are now also fully customizable using the new ConsoleListDisplaySettings type. And if you are using Pulse Pro (available on App Store), you can configure them using the new "Appearance" settings screen.
CocoaPods
๐ With CocoaPods going into maintenance mode, new Pulse releases will no longer be published to CocoaPods Trunk. However, the Podpsec files will continue to be available for now, and you can install Pulse using CocoaPods by pointing directly to this repo.
Other Changes
- โ Add new convenience APIs for accessing messages and tasks stored in the logger:
LoggerStore/message(sortDescriptors:predicate:)andLoggerStore/tasks(sortDescriptors:predicate:). DeprecateallTasksandallMessages. - ๐ Fix an issue with thumbnails for image responses being too aggressively compressed and add
LoggerStore.ThumbnailOptionsto make it customizable - โก๏ธ Update image response viewer to show thumbnails at a 2x resolution
- Display thumbnail resolution in the response viewer
- ๐ Fix an issue with app icons send too blurry to the Pulse Pro app
- ๐ Improve support for
.inMemorystore option, which is now guaranteed to not write anything on disk, including the store manifest. It also no longer requires the.createoption like the regular store and thestoreURLparameter can point to anything, including/dev/null. - ๐ Deprecate
UserSettings.displayHeaders(user newConsoleListDisplaySettingsinstead) - ๐ Fix xcprivacy warnings when used with SwiftPM, thanks to @alphatroya
- ๐ Performance optimizations
- โ Add new convenience APIs for accessing messages and tasks stored in the logger:
-
v5.0 Changes
September 05, 2024Announcement
๐ Pulse macOS and iOS apps are now available on the App Store. Learn more in the announcement.
Requirements
- Swift 5.10 (Xcode 15.3)
- ๐ iOS 15, tvOS 15, macOS 12, watchOS 8, visionOS 1
๐ Changes
Pulse SDK 5.0 greatly simplifies the integration experience and introduces two new ways for capturing network traffic.
Option 1 (Quickest) Add a new
PulseProxymodule for automatic capturing of all network traffic from the app with a single line โ the quickest way to try PulseimportPulseProxy#if DEBUGNetworkLogger.enableProxy()#endif
Option 2 (Recommended) Add new
URLSessionProtocolandURLSessionProxyas a new recommended way to track network traffic and enable other Pulse features like response mockingif DEBUGletsession:URLSessionProtocol=URLSessionProxy(configuration:.default)#elseletsession:URLSessionProtocol=URLSession(configuration:.default)#endif
๐ Learn more about the new network logging method in the fully rewritten Getting Started and Network Logging & Debugging guides
โ Add compatibility with Swift 6 (not official until Xcode 16 RC ships)
โฌ๏ธ Reduce the size of the framework by nearly 15%
โ Add
RemoteLogger.isAutomaticConnectionEnabledproperty to allow automatic connection to Pulse appsโ Add and document the new public
MockingURLProtocolused to enable network debugging features of Pulse apps. It is registered automatically with the newURLSessionProxyโ Add
@MainActorto a few main-thread confined types likeRemoteLoggerโ Add new
UserSettingsproperties:isRemoteLoggingHiddenandallowedShareStoreOutputs,0๏ธโฃ Increase the default
LoggerStoresize limit from 128 MB to 256 MB and response body size limit from 5 MB to 8 MBโ Add support for changing
LoggerStore.shared.configurationto make it easier to configure the default storeNetworkLogger.sharedandLoggerStore.sharedcan now be both replaced with your custom instances and in any order with any other operations.โก๏ธ Update
RemoteLogger.Connectionto perform work on the background queue so that Pulse now runs almost no code on the main queue๐ Make
LoggerStore.infoan async method๐ Fix export of PDF in dark mode (#288), thanks to @ilyalehchylin
LoggerStore/exportno longer returnsLoggerStore.Infoโ Add
.createand.sweepoptions to the defaultLoggerStoreinit`โ Remove the console for MacOS as it is no longer feasible to maintain the reusable code between Pulse SDK and Pulse standalone app for Mac. If you are using the console for macOS, please consider using the standalone Pulse app.
โ Remove some of the text-based search filters, which wasnโt the right UX for a phone. In upcoming versions, it will be replaced with convenient controls.
โ Remove deprecated
LoggerStore.copy(to:)andLoggerStore.pinsโ Remove support for exporting store as a package (
DocumentType.package)๐ Bug fixes and performance improvements

