ispect 7.0.0-dev4
ispect: ^7.0.0-dev4 copied to clipboard
In-app observability and QA diagnostics toolkit for Flutter, with logs, network tracing, layout inspection, exports, and redaction.
Changelog #
7.0.0-dev4 #
Breaking Changes #
JsonScreenconstruction:JsonScreen(...)is no longer const; remove theconstkeyword from existing call sites.- Custom log types: Custom
ISpectLogDatasubclasses are normalized for safety; filter them by log key instead ofTypeFilter. - HTTP URL fields: Throwing custom
Uriimplementations may now be omitted; strict capture deliberately keeps all caller-ownedUrivalues opaque. - Custom redaction services: Overrides of
RedactionService.redactForExport,redactEnvelopeForExport, orredactHeadersmust accept the optionalresourceLimitsparameter.
Behavioral Changes #
- Deprecation schedule: Deprecated compatibility aliases remain available through 7.x and are now scheduled for removal in 8.0.0.
- Useful diagnostics by default: Core logs, traces, network and database payloads, BLoC, and Riverpod retain bounded application descriptions or structured
toJson()snapshots after redaction. Exceptions, stack traces, and ordinary HTTP URLs are readable again. - Explicit capture policy:
DiagnosticCaptureMode.balancedis the default for internal diagnostics. Selectstrictwhen application-definedtoJson()andtoString()methods must never run. - Useful state diagnostics by default: BLoC and Riverpod expose full bounded values after redaction; their
compactpresets now also select strict capture for coarse structural summaries. - Native exports: Persistent exports now use the application's private support directory.
Security #
- Unified redaction:
ISpectRedaction.configure(...)now controls masking across built-in logging, adapters, observers, persistence, and exports. - Redacted full capture: Network adapters capture headers and payloads by default after bounded redaction; use their
metadataOnly()presets for stricter minimization. - Strict hardening remains available: Network
metadataOnly()andproduction()presets, plus BLoC/Riverpodcompact, avoid application-defined formatters. Builders and settings expose the same strict opt-in directly. - Protected diagnostic data: Imports, exports, clipboard, cURL, observers, and stored logs are bounded and redacted by default.
- Consistent diagnostic budgets: Custom
DiagnosticResourceLimitsnow remain authoritative through redaction, headers, replay results, observers, persistence, clipboard, and exports instead of falling back to balanced limits. - Production gate: Diagnostics remain inactive when
ISPECT_ENABLEDis omitted.
Improvements #
- Enabled-build performance: Caller-owned values are not captured or formatted when no history, stream listener, console sink, or observer can consume the entry. Active consumers deliberately retain bounded capture and redaction rather than trading diagnostic safety for benchmark throughput.
- Faster active diagnostics: Active payload capture and batch export avoid redundant sanitization work while keeping default redaction and output bounds unchanged.
- More complete diagnostic handoff: Increased bounded payloads to 256 KiB, individual records to 1 MiB, and JSON exports to 32 MiB; exports now report actual/truncated counts and imports can report skipped records.
- Convenient diagnostic profiles: Balanced defaults require no tuning; the in-app Settings sheet offers one-tap Capture, Resource, and Processing profiles for stricter, lower-memory, responsive, larger-session, or throughput-focused diagnostics.
- Fully configurable budgets:
ISpectLoggerOptions.captureMode,resourceLimits, andprocessingPolicycover formatter isolation, data sizes and counts, traversal, integrations, UI, batching, yielding, background work, and search. ExactcopyWith(...)values persist throughISpectSettingsState, while the layout inspector separately exposesmaxRenderTreeClipboardCharacters.
Bug Fixes #
- Concurrent diagnostics: Fixed BLoC event correlation and stale asynchronous log-viewer updates.
- Reliable lifecycle: Shutdown and forced reinitialization now clean up logger state consistently, including failure paths.
- Host error callbacks: Flutter, platform, and zoned callbacks continue receiving the original error and stack trace.
- HTTP replay: Malformed form data and sender failures no longer leave the composer in a broken state.
- Stable bounded settings: Runtime validation rejects invalid persisted capacities and inspector clipboard limits in release builds, and navigation transition equality no longer changes after logger reconfiguration.
6.1.7 #
Bug Fixes #
- JSON Lines export: Logs containing client-specific objects in nested diagnostic metadata are now exported without losing the original log fields.
6.1.6 #
Security #
- Redaction coverage: Trace and database error strings, URL fragments, and numeric JSON fields are now redacted, and the default sensitive-key set covers
session,passphrase,credential(s), andpincode. - Fail-closed defaults: Depth-limited key redaction, filtered log file export, and JSON-tree value copy now redact by default instead of passing data through unredacted.
6.1.4 #
Bug Fixes #
- Log detail panel: Opening a log from search results now preserves the focused match and list position.
- Log search navigation: Previous/next match arrows now scroll to the correct card when HTTP request and response logs are grouped into transactions.
- Web/WASM log files: Browser Blob validation now behaves consistently in JavaScript and WebAssembly builds.
- Web log imports: Malformed structured text is no longer misclassified as JSON, and file stream failures stop processing without a second success callback.
Code Quality #
- Deprecation schedule: Compatibility APIs retained in 6.x now have a consistent
7.0.0removal target and migration inventory.
CI #
- Package gates:
ispectify_riverpodand the web logs viewer now run analyzer and test coverage checks in CI.
6.1.3 #
Improvements #
- High-volume profiling: The benchmark now exercises the real ISpect logger and log viewer, with isolated filters-off/on frame summaries and recorded display metadata.
6.1.2 #
Bug Fixes #
- JSON log sharing: Sharing all logs no longer fails when diagnostic metadata contains values such as
Duration,Uri, enums, or client-specific objects.
6.1.1 #
Improvements #
- Published benchmark results: CI-generated AOT hot-path and Android release-footprint metrics are now linked from the performance guide; physical-device startup and frame profiling remain explicitly documented as pending measurements.
- Faster onboarding: the README now opens with a copy-paste Flutter setup, an integration package selector, and a documented
ispectifylogger-only path. - Focused examples: the
ispectshowcase now has separate network, WebSocket, database, BLoC, Riverpod, and routing targets; BLoC and Riverpod also include standalone pure-Dart examples. - Architecture walkthroughs: new integration guidance shows where ISpect fits in Clean Architecture, BLoC, Riverpod, and Navigator-based routing.
- Database setup guidance: the database guide now passes
ISpectDbConfigdirectly to traced calls, matching the public API.
6.1.0 #
Security #
- URL fragment redaction: sensitive values in a URL fragment — such as the OAuth
#access_token=…redirect — are now masked in logs, error messages, and exports. - Export credential scrubbing: URL credentials and
Bearer/Basic/Tokenvalues are now stripped from text, Markdown, CSV, and JSON Lines exports even when no redaction keys are supplied. - Trace
valueredacted by default: thevaluecaptured bytraceand its async/sync/stream variants is now redacted alongsidemetaandtarget; opt out withISpectTraceConfig(redact: false). - Wider export redaction: CSV targets, exported stack traces, and the JSON Lines fallback are now redacted, and a failed JSON encode surfaces the error instead of being dropped.
- Network redaction fails closed: redacted network payloads never fall back to raw data when a value can't be processed.
Bug Fixes #
- WebAssembly compatibility: opt-in rolling file history no longer prevents Web/WASM builds.
- Web-safe log IDs: log entry IDs stay correctly time-sortable on web builds.
copyWithkeeps identity:ISpectLogData.copyWith/copypreserve the originalidso copies compare equal and de-duplicate correctly; passid:for a new one.- Observer recursion: a log emitted synchronously from inside an observer is dropped instead of recursing.
- WebSocket log keys:
wsSend/wsReceivealways usews-sent/ws-received— and error framesws-error— regardless of the operation name. - Request ID collisions: network request IDs no longer collide between separate app runs started close together.
Improvements #
- Rolling file history: opt-in
RollingFileLogHistorypersists redacted daily JSON Lines with bounded retention, archive support, and legacy 4.x daily-file compatibility. metaongraphqlTraceandsse: both now accept an optionalmetamap, matching the other trace helpers.- Consistent projection warnings: a throwing
projectResult/projectEventis logged as a warning across all trace variants instead of being silently dropped in streams. - Private keys in lists: internal
_-prefixed keys nested inside list elements are now stripped from exports.
6.0.7 #
Improvements #
- Kurdish localization: ISpect's UI is now translated into Sorani (
ckb) and Kurmanji (ku); both resolve automatically throughISpectLocalization.supportedLocales. Apps that display ISpect in these locales own their Material/Cupertino delegates, as with every other locale.
Thanks @RekanAnwar
6.0.5 #
6.0.4 #
6.0.3 #
Bug Fixes #
- WebAssembly (WASM) support:
ispectis WASM-ready and supports all six platforms (Android, iOS, web, Windows, macOS, Linux).flutter build web --wasmnow succeeds; log export uses the browser download on web and WASM, and the native filesystem on other platforms.
6.0.2 #
Security #
- Redaction hardened across capture and export: Sensitive keys are matched more broadly (camelCase and whitespace-trimmed forms), the default sensitive-key set is broadened, and credential/PII values are fully masked. Redaction now fails closed — a payload that can't be processed is masked rather than passed through.
- Diagnostics redacted everywhere they leave the app: Network URLs (including in generated cURL), database values and error messages, BLoC/Riverpod console output, navigation route arguments, and every export path (JSON, text, Markdown, file share, and clipboard copy) are redacted by default.
- One-switch redaction control: A single source of truth turns redaction on or off everywhere at once —
ISpectRedaction.enabled = false(orISpect.run(redactionEnabled: false)) disables masking across network, database, BLoC/Riverpod, navigation, and all export paths. On by default; disabling is a deliberate opt-out. - Inert in production builds: When ISpect is compiled out (
ISPECT_ENABLEDomitted), observers stay silent and the global logger retains no history and writes nothing to the console, so diagnostics don't accumulate in release builds.
6.0.0 #
Improvements #
- Owned dark theme by default: ISpect now ships its own flat dark design across all surfaces — logs, JSON viewer, composer, sheets, inspector, and the performance overlay — independent of the host app, with a paired light variant. Choose the mode via
ISpectTheme.themeMode, or setISpectTheme.useHostColors: trueto inherit the hostColorSchemeas before. - Squircle surfaces: Cards, buttons, fields, sheets, tiles, and the inspector overlay use continuous (squircle) corners for a smoother, more cohesive look.
ispectify_riverpod: New package —ISpectRiverpodObserverlogs provider lifecycle underriverpod-*keys (closes #80).- Provider-agnostic
ispectify_ws: WebSocket diagnostics now log any client (ws,socket_io_client, andweb_socket_channeladapters ship in the example), plus a newws-statelog type for connection lifecycle. - HTTP composer (mini-Postman): Replay a captured request or compose a new one and send it through your own client via
ISpect.registerSender(...); the result lands back in the network logs. Redacted values are never resent. - Compact network URLs: Collapsed transactions show only the path and query; the full URL stays in the expanded view. On by default, toggle in Settings.
- Clearer network cards: Per-method colored badges, a status-colored accent bar, de-duplicated expanded sections, and higher-contrast rows.
- Richer widget inspector: Property chips for composite values (offset, border, gradient, shadow), image/SVG source and decode details, correct selection boxes for rotated and skewed widgets, and grouped
RichTextspans. ISpectPerformanceOverlayrebuilt: Cross-platform (web + desktop) overlay with UI/raster/total bars, FPS, avg/p99 and jank stats, plus an opt-inenableJankLoggingcallback for severe frames.- Draggable panel 3.0.0: More reliable hide/reveal and a content-sized adaptive layout; customize it fully via
ISpectOptions.panelBuilder. - Export metadata:
ISpectOptions.metadataProviderembeds app/device details into exported and shared logs via the typedISpectMetadata(host-supplied and not redacted — keep secrets and PII out).
Behavioral Changes #
- BLoC observer keys: Granular
bloc-event,bloc-transition,bloc-state,bloc-create,bloc-close,bloc-done,bloc-errorreplacestate-change/state-error, andmetakeys are now kebab-case (BlocJsonKeys.*). Update any filters keyed on the old names. - Fuller payloads by default: BLoC and Riverpod now log full event/state values instead of only the runtime type (
int → intbecomes0 → 1). UseISpectRiverpodSettings.compact, or set BLoC'sprintEventFullData/printStateFullDatatofalse, when state may carry PII. The oldISpectBlocSettings.verbosenow matches the default and is deprecated. ISpect.rununcaught-error hook: TypedonUncaughtError(Object error, StackTrace? stack)replacesonUncaughtErrors(List<dynamic>).ispectify_wsdrops thewsdependency: Copy the adapter from the package example and addwsto your app;ISpectWSInterceptorSettingsand thews-sent/ws-received/ws-errorkeys are unchanged.
Bug Fixes #
- Typed request bodies: DTOs (e.g. Retrofit /
json_serializablemodels) now render as their JSON shape instead ofInstance of ...inispectify_dioandispectify_wslogs, with redaction reaching their nested fields. ispectify_dio: Responses no longer stay stuck on "Pending" when a downstream interceptor rewrites the request viacopyWith.- Reliable error capture: Flutter, platform, and zoned errors now report the original thrown object and stack trace, and
ISpect.run'sonInit/onInitializedrun inside the guarded zone so binding-setup errors are no longer dropped. - Navigation logging: A page opened from under a modal (e.g. pushed from a bottom sheet) is logged as a page transition again instead of being dropped.
- Logs screen reactivity: "Clear history" empties the list immediately, and view-controller history changes refresh the UI without a new log emission.
- Network status code shown again: Grouped transactions display the response status-code chip (it was read from the wrong metadata key).
- Color picker accuracy: The sampled colour now matches the pixel under the crosshair, reports the true colour for translucent and anti-aliased pixels, and no longer drifts to a neighbour when you lift your finger.
Code Quality #
- Sealed core classes: Several data and utility classes (
LogDetails,RedactionResult,CurlUtils,JsonTruncator,NetworkPayloadSanitizer, and others) are nowfinal/abstract final.RedactionService,ISpectErrorHandler,NetworkTransaction, and the two log formatters stay open for subclassing.
5.0.4 #
Added #
- Layout inspector breadcrumb: The selected widget's hit-test ancestor chain (Row, Column, Stack, Padding, SizedBox, Align, and other meaningful render objects) is now surfaced as horizontally scrollable chips under the panel title. Tap any chip to re-target the inspector without re-tapping the screen.
Improvements #
- Breadcrumb navigation: Auto-scrolls the selected chip into view on every selection change, and uses clamping scroll physics so the list never overscrolls or bounces.
Bug Fixes #
- Layout inspector — icon selection inside chips: Material
ActionChip,Chip,FilterChip, andInputChippreviously routed every tap to the label slot, hiding the avatarIconfrom the inspector path. Tapping the avatar now correctly selects it.
5.0.3 #
Added #
- The log viewer app bar now surfaces aggregate log statistics and a filter count badge, so active filters and totals are visible without opening the filter sheet.
- The JSON viewer breadcrumb bar auto-scrolls to the end as you drill in, keeping the current path segment in view on deep structures.
Improvements #
- The JSON viewer's path navigation got a visual refresh: updated segment colors, tighter spacing, and tap-to-jump segments. The breadcrumb bar moved to its own file for easier reuse.
- App bar leading icons gained consistent padding and dynamic width so action targets stay tappable across varied layouts.
Fixed #
ISpectSettingsState.toJson()no longer throws whendisabled_log_typesis non-empty.toMap()now returns aList<String>for that field instead of an unmodifiableSet.
5.0.0 #
Breaking Changes #
- Unified
trace()pipeline: All logging now flows through one structured pipeline with consistent correlation across every layer. - Flattened log data: The old inheritance-based types are gone — typed subclasses (
NetworkRequestLog,DioResponseLog,BlocLifecycleLog, …) are replaced by a metadata-drivenISpectLogData, with field accessors likeisNetworkandhttpStatusCodemoved into extensions. See the migration guide below. ISpectLogTypeis now afinal class(no longer an enum):ISpectLogType.valuesbecomesISpectLogType.builtInand exhaustive switches no longer apply, but custom types are first-class — writeconst ISpectLogType('my-key', category: 'firebase')directly.ISpectLogData.idis now a 26-character ULID instead of a per-isolate int — globally unique, lexicographically sortable, and JSON round-trippable. Equality uses the id alone, which fixes deduplication of persisted history.
Added #
ispect_layout: New standalone visual layout inspector — tap any widget to read its size, constraints, padding, decoration, text styles, transform, and clip shape, or compare two widgets for the pixel gap. Forked frominspectorwith expanded render-object coverage.- Plugin architecture for the panel: Lifecycle hooks, custom screens, and action items, with
SafePluginScreenand a globalErrorWidgetoverride keeping third-party plugin failures from taking down the host UI. - Custom
ISpectLogTypeinstances with their own category, title, color, and icon, safely merged with the built-in entries. - Database interceptor cookbook: Drop-in interceptors and runnable examples for Hive, Isar, Drift, Sembast, ObjectBox, Realm, Firestore, Sqflite, SharedPreferences, GetStorage, and FlutterSecureStorage in
packages/ispectify_db/example.
Improvements #
- New trace API:
trace(),traceAsync(),traceSync(), andtraceTransaction()for correlated logging, plus domain extensions (authTrace(),storageTrace(),push(),analyticsEvent(),paymentTrace(),grpcTrace()). - Log exporter: Writes JSON Lines, plain text, Markdown, and CSV with built-in redaction; pluggable formatters give human-readable and JSON Lines output with ISO-8601 timestamps.
- Logs screen overhaul: Resizable desktop split view with keyboard navigation, chip-based search and filtering with category grouping, correlation/transaction-ID filters, expandable network transaction cards with status and duration, live tail with new-log indicators and relative time, 21 new log-type icons, and a JSON viewer with array support and async search.
- Inspector controls: Multi-key shortcuts,
initialPanelExpanded, configurabledecimalPlaces, smart panel positioning, shape-border and border-radius extraction, and globally-transformed hit testing. - Picker & zoom bar: A floating Cancel/Confirm bar with zoom controls and a live hex preview chip (tap to copy), on-screen-aware hex placement, auto re-snapshot on surface resize, and the restored outside-stroke disc look.
consoleMessageparameter on trace, network, WebSocket, and BLoC logs tailors IDE console output without touching structured metadata.- Lazy
ISpect.logger: Constructed on demand, with a developer warning when used beforeISpect.run. - Wider redaction: cURL commands and opt-in clipboard redaction now go through
RedactionService, with optional redaction statistics for data and header operations. - Correlation index: O(1) request/response/error lookup, removing scan-time matching on large histories.
- Database tracing:
DbSqlDigestfor normalized SQL grouping,DbMessageFormatterfor consistent log construction, and newsizeBytesandcacheHitfields. - Accessibility: Semantic labels on log cards and transactions, 36dp minimum touch targets, and tooltips on app-bar navigation, search, and filter.
- Faster triage: Expanded cards show a one-line metadata strip (id, trace source, operation/target, duration, exception type), and the action-sheet header shows the log type's description.
Behavioral Changes #
- Network redaction on by default: All network interceptors redact PII out of the box, using an expanded sensitive-key set.
ISpectBlocObservernow auto-correlates events, transitions, and changes.- Auto-wired navigator observer:
ISpectNavigatorObserver.observers()publishes the installed observer inISpectNavigatorObserver.current, andISpectBuilder.wrapfalls back to it — the quick-start no longer needs the same observer shared betweenMaterialApp.navigatorObserversandISpectOptions.observer. An explicitISpectOptions.observerstill wins. - Tips dialog moved from an automatic popup to a dedicated app-bar icon.
Deprecations #
ISpectScopeController.of(context)→ useISpect.read(context). The old method stays as a forwarder and will be removed in 6.0.0.- Per-callback network filters (
requestFilter,responseFilter,errorFilter) onispectify_dio,ispectify_http, andispectify_ws→ use the new composable filter chain. Existing callbacks keep working as forwarders and will be removed in 6.0.0. ISpectBuilder(...)constructor → useISpectBuilder.wrap(...), which short-circuits before building whenkISpectEnabledis false (preserving tree-shaking). The constructor will be made private in a stable 5.x release.ISpectLocalizations.delegates(...)→ useISpectLocalizations.delegate(...), which returns only ISpect's delegate and leaves theGlobal*Localizationsto the host. The legacy method works as a forwarder during 5.x and will be removed in 6.0.0.
Bug Fixes #
- Async-gap context safety: Fixed "deactivated widget's ancestor" errors in
ISpectToasterand clipboard operations by handlingBuildContextcorrectly across async gaps. - Stability: Resolved memory leaks in UI components and made JSON parsing more robust on large datasets.
- Export hardening: Added CSV-injection protection in exports and a clipboard size cap.
- Inspector hit testing: Now uses Flutter's native pipeline and clamps overlay rects to screen bounds, so taps no longer surface widgets from routes beneath the active one (non-opaque pages, dialogs, modal sheets) or from
Offstage/IgnorePointersubtrees, and selection stays on-screen. - Icon glyph rendering: A
RenderParagraphactually showing an icon font now displays the glyph and itsU+XXXXcode point under anICONsection instead of unreadable tofu. - Release-safe inspector:
describeIdentityand other diagnostic-only formatters were replaced with release-safe equivalents, so the layout inspector no longer throws or leaks debug data in profile and release builds. - JSON viewer state:
JsonScreen.didUpdateWidgetcompares the data'sid, so the viewer no longer rebuilds its tree and discards expansion state when the parent supplies an equal map.
CI/Tests #
- Tests & CI: Refactored the suite for the trace-based architecture with JSON and multipart redaction validation, added widget tests (
ISpectAppBar,EmptyLogsWidget,LogCard,ISpectBuilder) and BLoC/Dio/HTTP pipeline integration tests, and wired up Codecov with a Flutter version matrix.
Migration Guide #
// BEFORE (v4.x): Pattern matching on typed subclasses
if (log is NetworkRequestLog) {
print(log.method);
print(log.url);
}
// AFTER (v5.0): Use ISpectLogDataX convenience getters
import 'package:ispectify/ispectify.dart';
if (log.isNetwork) {
print(log.traceOperation); // HTTP method
print(log.traceTarget); // URL
print(log.httpStatusCode); // from traceMeta
}
// NEW: Trace API for custom operations
logger.traceAsync(
category: authCategory,
source: 'firebase',
operation: 'signIn',
run: () => auth.signIn(email, password),
);
// NEW: Domain extensions
logger.push(source: 'fcm', operation: 'received', messageId: id);
logger.analyticsEvent(source: 'firebase', event: 'purchase');
4.7.4 #
Changes #
- Removed explicit button styling from action sheet buttons to leverage theme defaults.
4.7.3 #
Changes #
- JSON Truncation Limit: Bump default JSON truncation limits for maximum depth, string length, and iterable size.
4.7.2 #
Improvements #
- Web & WASM Compatibility: Decoupled
dart:iodependencies from core file utilities to ensure theispectpackage works flawlessly on the Web and WASM targets. Native functionality remains unchanged.
4.7.1 #
Changes #
ispectify:time,error,stackTrace, andlevelmetadata are now passed through to native platform logs (developer.log) for better debugging and crash reporting.
4.7.0 #
Breaking Changes #
- ISpect is now disabled by default. For production safety and tree-shaking, ISpect is no longer compiled into builds unless you opt in with
--dart-define=ISPECT_ENABLED=true. Without the flag, all ISpect logic, UI, and logging is removed from the binary at compile time, verified to tree-shake away in production builds.
New Features #
-
Zero-conditional API: Factory methods handle the
kISpectEnabledcheck internally — noif/elsein your code.ISpectBuilder.wrap()returns the child when disabled,ISpectNavigatorObserver.observers()returns an empty list, andISpectLocalizations.delegates()returns the base delegates.MaterialApp( localizationsDelegates: ISpectLocalizations.delegates(), navigatorObservers: ISpectNavigatorObserver.observers(), builder: (_, child) => ISpectBuilder.wrap(child: child!), ); -
Customizable observer:
ISpectNavigatorObserver.observers()also accepts a pre-configuredobserverplusadditionalobservers.
Migration #
Before (conditional):
navigatorObservers: kISpectEnabled ? [ISpectNavigatorObserver()] : [],
builder: (_, child) {
if (kISpectEnabled) return ISpectBuilder(...);
return child!;
},
After (zero-conditional):
navigatorObservers: ISpectNavigatorObserver.observers(),
builder: (_, child) => ISpectBuilder.wrap(child: child!),
4.6.0 #
Breaking Changes #
-
API renaming:
logCustom()→logData(),ISpectify→ISpectLogger,ISpectifyLogger→ISpectBaseLogger,ISpectifyFlutter→ISpectFlutter. -
ISpectThemechanges: Log-type filtering moved to adisabledLogTypesset, light/dark colors unified underISpectDynamicColor(light:, dark:), andlogDescriptionsnow takes aMap<String, String>for overriding default descriptions.ISpectTheme( disabledLogTypes: {'riverpod-add', 'riverpod-update'}, background: ISpectDynamicColor(light: Colors.white, dark: Colors.black), logDescriptions: {'error': 'Critical application errors'}, );
New Features #
- Interceptor config: Fluent API builders for interceptor settings and support for multiple observers.
- Logging:
additionalDatavia a centralizedLogFactory, properISpectLoggerdisposal, and full localization of BLoC error and provider-activity logs. - Persistent settings: Log preferences are saved between sessions, with improved log-type filtering controls.
- Strategy-based redaction: Configure
RedactionServicewith composite, key, and pattern strategies. - Platform abstraction: File operations work across all supported targets via platform-aware directory handling.
Improvements #
- Faster filtering: Debounced log-filter updates, fixed-size lists for rendering, and cached contrast lookups in the JSON viewer.
- Architecture: Unified interceptor API across HTTP and WebSocket,
ISpectViewControllersplit into dedicatedFilterManager/SettingsManagerand explicit import/export services, aPlatformOutputoutput abstraction, and sealed models (FileProcessingResultand related) for type-safe error handling.
Bug Fixes #
- Type safety: Stronger typing across HTTP/Dio interceptors and the JSON selector, with unmodifiable cache views.
- Memory: Fixed widget memory leaks, object-pool lifecycle issues, and circular dependencies in the service graph.
- Case-insensitive redaction: Redaction now matches keys regardless of case.
4.4.6 #
Changes #
- Removed hard dependency on
share_plusby introducing configurable share callbacks; all share flows now rely onISpectOptions.onShare. - Removed
open_filexusage in favor of an optionalISpectOptions.onOpenFilecallback. - Conditionally render share/open actions across UI so buttons disappear when callbacks are not supplied.
- Eliminated external
provider,device_info_plus, andpackage_info_plusdependencies; JSON explorer now ships with an internal selector. - Feedback builder and
ispect_jirapackage removed to streamline core functionality. - Updated descriptions of log tags in the info bottom sheet for clarity and consistency.
Added #
- New
ISpectShareRequest,ISpectShareCallback, andISpectOpenFileCallbackcontracts to keep integrations package-free. - Added
bloc-doneevent logging toispectify_blocfor comprehensive BLoC lifecycle tracking. - Added
SuperSliverListsupport in JSON/logs viewer for improved performance with large datasets.
4.4.2 #
Added #
- Added optional paramater
contexttoISpectOptions. This context is used to openISpectscreen.
4.4.1 #
Changes #
observerparameter moved fromISpectBuildertoISpectOptionsfor better consistency and usability.
4.4.0 #
Added #
- New package
ispectify_db: lightweight database logging with tracing and transaction markers. - cURL command copy functionality for HTTP logs in the log card, supporting both Dio and HTTP interceptors.
Enhancements #
- Stronger and more consistent redaction across HTTP/Dio/WS (incl. Base64/Base64URL, Unicode-friendly); versions synced across packages.
Fixed #
- ispectify_http: use
responseBodyin logs; separate request/response data; preserve non-Map error payloads; redact multipart fields/files (filenames masked). - ispectify_dio: redact
FormDatain request/response (filenames masked); mark error logs withLogLevel.error. - ispectify_ws: mark error logs with
LogLevel.error. - ispectify_db: no commit after rollback; correct log levels; safer
additionalData.value. - core: fix
_handleLogconstructor argument order.
Tests #
- HTTP: response body usage, array error payloads, multipart redaction.
- DB: rollback emits no commit; error/success log level assertions.
4.3.6 #
- Documentation updates
4.3.4 #
Improvements #
- JSON viewer refactor: Replaced the monolithic JSON-viewer services with specialized, instance-based search/cache/node services and an object pool for better performance on large JSON. Existing widget APIs stay backward-compatible.
Fixed #
- Resolved memory leaks in cache management and circular dependencies in service initialization.
4.3.2 #
Added #
- Optional redaction toggle in settings (enabled by default):
ISpectDioInterceptorSettings.enableRedactionISpectHttpInterceptorSettings.enableRedactionISpectWSInterceptorSettings.enableRedaction
- Redactor-aware serialization for network data models:
ispectify_dio:DioRequestData.toJson,DioResponseData.toJson,DioErrorData.toJsonnow accept an optionalRedactionServiceand (when provided) redact headers, data, and metadata. Per-callignoredValues/ignoredKeyssupported.ispectify_http:HttpRequestData.toJson,HttpResponseData.toJsonupdated similarly; redaction applied when a redactor is passed.
Enhancements #
- Apply centralized sensitive-data redaction consistently before logging and when serializing
additionalDataacrossdio/http/wsinterceptors. Interceptors pass their redactor into modeltoJson(...)calls when redaction is enabled. ispectify_dio:- Request/response/error logs redact request headers/body, response headers/body, and common metadata (
query-parameters,extra).FormDatabodies are represented with a safe placeholder.
- Request/response/error logs redact request headers/body, response headers/body, and common metadata (
ispectify_http:- Request/response logs redact headers and (when parsable) JSON/string bodies; multipart request details are preserved in shape while avoiding sensitive content.
ispectify_ws:- Interceptor respects the redaction toggle and redacts sent/received payloads when enabled.
Fixed #
- Preserve response headers shape while redacting in
ispectify_dio(Map<String, List<String>>) to avoid type/cast issues.
Updates #
- Update
draggable_paneldependency to version 1.2.0. See what's changed indraggable_panel: https://pub.dev/packages/draggable_panel/changelog
4.3.0 #
Added: #
- Add
LogsJsonServicefor structuredJSONexport/import of logs and integrate sharing/import features intoISpectViewControllerand UI. - Implement
DailyFileLogHistoryfor file-based log persistence with daily sessions and provide related screens for browsing and sharing sessions. - Added
File Viewerto settings sheet inISpectscreen to view and manage log files. ispectify_wspackage for WebSocket (ws package) logging withISpectintegration.
Enhancements: #
- Extend
ISpectFlutter.initto accept customILogHistoryinstances and disable default print logging. - Refactor file handlers (web and native) to support configurable file types and
JSONoutput. - Make settings and info callback parameters optional in the app bar and conditionally render related UI.
- Add ability to open log files directly from the
ISpectscreen.
Changes: #
- Rename
ISpectLoggerDioLoggertoISpectDioInterceptorfor clarity and consistency with other interceptors - Rename
ISpectLoggerHttpLoggertoISpectHttpInterceptorand adjust its usage in the example project - Rename
ISpectLoggerBlocObservertoISpectBLocObserverfor consistency - Rename
iSpectifytologgerand update related classes and documentation for consistency
Draggable Panel #
- Added: Position change listener API in
DraggablePanelController(addPositionListener/removePositionListener). - Added: Public
dockBoundarygetter for consistent boundary logic across widget and controller. - Changed:
toggle()now respects currentpanelState(notinitialPanelState). Auto-toggle on mount removed to preserve user state. Initial position is clamped and (when starting closed) docked to the nearest edge. - Fixed: Panel no longer resets to default after visibility toggles; duplicate position callbacks removed; unified docking logic.
- Performance: Batched x/y updates during drag via
setPosition(x, y); reduced redundant notifications and rebuilds; lifecycle safety (mounted checks) and controller rewire indidUpdateWidget.
4.2.0 #
Added: #
- Introduce navigation flow feature to visualize app route transitions.
- Ability to share log with the applied filters in the
ISpectscreen.
Enhancements: #
- Extend
ISpectNavigatorObserverto bufferRouteTransitionobjects with unique IDs, timestamps, and structured logging using aTransitionTypeenum. - Add
RouteTransitiondata model,Listextensions, androuteName/routeTypeextensions for richer routemetadata. - Improve
ISpectOptionsequality andtoStringimplementations withDeepCollectionEquality. - Toggle default
isLogModalsbehavior tofalsefor finer logging control.
4.1.9 #
Changes: #
- Replaced
LogScreenwith a generalizedISpectJsonScreen, which now accepts aMap<String, dynamic>JSONinput directly instead of extracting it from an object. - Refactored and migrated the
Colortohexstring conversion utility. - Performed minor improvements and code cleanups.
4.1.6 #
Changes: #
ISpectPanelItem->DraggablePanelItem;ISpectPanelButtonItem->DraggablePanelButtonItem.- Added tooltip snackbar when long press on the panel buttons and items.
Just add
descriptionfield to theDraggablePanelItemorDraggablePanelButtonItemto show the tooltip.
4.1.5 #
Enhancements: #
- Refactor
InspectorStateto modularize main child, overlay builders, and zoom state handling - Expose new zoom configuration constants and helper methods in
InspectorStatefor enhanced zoom and overlay management
Changes: #
- Revise
READMEinstructions across all packages to showcase new initialization patterns (e.g. ISpectFlutter.init,ISpectJiraClient.initialize) - Rename
ISpectLoggerActionItemtoISpectActionItemand update references in docs and examples - Add
ISpectPanelItemandISpectPanelButtonItemmodels and corresponding usage samples.Records->Models - Refresh quick start and advanced feature code snippets to illustrate updated APIs and options
- Unify headings (Basic Setup, Custom Issue Creation, etc.) and standardize sample app flows
4.1.4 #
Enhancements: #
- Optimize
JSONtruncator to avoid expensive length calls, use correct recursion depth, and handle truncations efficiently - Extend filter search to include map keys, prevent circular loops, and streamline filter combination logic
- Refine dotted separator painter to distribute dots evenly within container bounds
CI: #
- Upgrade
actions/checkoutto v4 with full fetch depth - Harden validate_versions workflow with strict error handling,
version.configandVERSIONchecks - Switch grep to fixed-string mode and update workflow paths in
sync_versions_and_changelogs - Remove obsolete
update_changelogs.ymlfile
4.1.3 #
Infrastructure #
- Added comprehensive version management system:
- Created
version.configas single source of truth for package versions - Added automated dependency synchronization between internal packages
- Implemented CI/CD workflows for automatic version sync on changes
- Added scripts for easy version bumping: patch, minor, major, dev versions
- Created comprehensive documentation in VERSION_MANAGEMENT.md and VERSION.md
- Created
- Added validation for package versions:
- Pre-commit hooks to prevent inconsistent versions
- Automated checks for internal dependency consistency
- Pull request validation for versions and changelogs
Enhanced #
- Refactored and improved optimization for handling very large JSON in the detailed log screen.
- Improved search and scroll to matched item functionality in the detailed log screen.
Added #
- Added a button for copying next to the JSON item (map/iterable) inside the detailed log screen.
- Added the ability to share the full log as a file .txt or quickly copy the truncated log to the clipboard.
Changes #
- UI changes in ISpect and log screens for better usability.
- Bumped dependencies to the latest versions.
4.1.2 #
4.1.1 #
Added #
- Add screen size utility to detect and adapt UI based on device screen
- Implement alternative dialog-based UI for larger screen sizes
Fixed #
- Fix issue displaying API fields correctly in the console
Enhancements #
- Implement responsive design for settings bottom sheet and log screens using screen size detection
- Improve search functionality in JSON viewer, added scrolling to the found element
Changes #
- Remove platform-specific configurations for Android and iOS in the example project
- Add macOS support for the example project
4.1.0 #
Fixed #
- Replace square bracket references with backticks in code comments and documentation across multiple packages to improve code documentation readability and consistency
4.0.9 #
Added #
- JsonTruncatorService for more robust JSON truncation and formatting
- Introduced more granular widget rendering strategies in JSON explorer
Fixed #
- Fixed potential performance bottlenecks in JSON rendering
- Improved error handling in JSON formatting and logging
- Fix analyzer issue for pub score
Enhanced #
- Refactored JSON attribute rendering to reduce widget rebuilds
- Improved performance of text highlighting in JSON viewer
- Optimized context selection and memoization in JSON explorer components
Chore #
- Cleaned up unused code and simplified complex rendering logic
- Improved code readability in JSON viewer components
4.0.6 #
Added #
- Custom Performance Overlay - Changed the approach and some improvements
- Enhanced Log Navigation - Search, highlight, and expand/collapse functionality
- New Option:
logTruncateLength- Available inISpectLoggerOptionsfor configurable log truncation - New Configuration:
ISpectHttpInterceptorSettings- Added toISpectHttpInterceptorfor improved setup flexibility
Improved #
- JSON Handling - Async and lazy loading for better performance on large data structures
- Log Card Refactor - Improved readability and maintainability
- Error Handling - Added filtering for more precise issue tracking
Fixed #
- Security Cleanup - Removed
ispect_aipackage and related dependencies
4.0.5 #
Changed #
- Error display now limited to first 10,000 characters for large errors to prevent widget overload and application hanging
4.0.1 #
Breaking Changes #
ISpectScopeWrapperRelocation - Moved insideISpectBuilder. Now,ISpectBuilderserves as a one-stop solutionISpect.log()Update - Replaced withISpect.logger.log()for improved consistency and clarity
Added #
- Language Support - Chinese (zh_CN) localization
- JSON Log Viewer - Detailed log viewing as a
JSONtree structure - Enhanced HTTP Logs - HTTP request logging displays all details in
JSONtree format with search and filtering - Log Descriptions - Added
logDescriptionstoISpectThemeto add, modify, or disable descriptions in the info bottom sheet - Theme Scheme Screen - Included basic
Theme Scheme Screenin theISpectpanel for testing
Improved #
ISpectLogger: Constructor now accepts optional components (logger,observer,options,filter,errorHandler,history) and aconfiguremethod to update an existing instance, with full dartdoc.- Bottom sheet: Replaced
BaseBottomSheetwith aDraggableScrollableSheet(configurableinitial/min/maxsizes). - Filtering: Added a search bar and
FilterChip-based title filtering with managed enablement state. - Navigation logging: Added flags to control logging of gestures, pages, modals, and other route types, plus a
validatemethod to decide what gets logged.
3.0.1 #
Fixed #
- Added
DraggablePanelControllertoISpectBuilderfor controlling the panel- See the example project for implementation details
3.0.0 #
BREAKING CHANGES #
-
Forked the
Talkerpackage (where I'm actively contributing) and added it toISpectasISpectLogger- This was done to ease usage and reduce external dependencies
- You can now use
ISpectLoggerto log all application actions
-
Separated main functions into different packages:
ispect_ai- For usingAIas a log reporter and log description generator (useful for managers and testers)ispect_jira- For usingJirato create tickets directly in the applicationispect_device- For getting device data and related informationispectify_http- For loggingHTTPrequestsispectify_dio- For loggingDiorequestsispectify_bloc- ForBLoClogging
Please see usage examples in the respective packages or in
ispect/exampleFor questions, contact:yelamanyelmuratov@gmail.com
2.0.8 #
Changed #
- Removed
ISpectPanelButtonandISpectPanelItemand replaced with Records - Separated
DraggablePanelinto its own package: draggable_panel
2.0.7 #
Breaking Changes #
- Jira and AI tools are now separate packages:
- Jira: ispect_jiraSee usage examples in ispect_ai/example
- ISpect AI: ispect_ai See usage examples in ispect_jira/example
2.0.5 #
Added #
- Support to view MultiPart request and response in the Detailed HTTP Logs page (HTTP package)
2.0.0 #
Fixed #
- No Navigator in context when navigatorKey is not provided
- Panel height factor calculation
1.9.8 #
1.9.6 #
1.9.5 #
Added #
-
New logging method:
ISpect.trackfor custom analytics events (Amplitude, Firebase, etc.) -
Ability to change log colors and custom log icons
Example: (SuccessLog is your custom log)
theme: ISpectTheme( logColors: { SuccessLog.logKey: const Color(0xFF880E4F), }, logIcons: { ISpectLogType.route.key: Icons.router_rounded, SuccessLog.logKey: Icons.check_circle_rounded, }, ), -
Google AI integration for generating log descriptions and reports
Changed #
ISpectreplaced withISpect- UseISpectfor all logging purposes Example:ISpect.debug('Hello, ISpect!')->ISpect.debug('Hello, ISpect!')
1.9.3 #
Added #
- New option in
ISpectOptions:panelButtonsto add custom buttons to the panel - New options for NavigatorObserver:
isLogPages- Toggle logging of page changesisLogModals- Toggle logging of modal changesisLogOtherTypes- Toggle logging of other change types
isFlutterPrintEnabledoption in ISpect.run to enable/disable Flutter print handler
1.8.9 #
UI Updates #
- Improved color picker
- Updated light log colors
- Revised ISpect page layout
- Combined actions and settings
- Various minor visual enhancements
1.7.2 #
1.7.1 #
Added #
- Updated Feedback builder for sending developer feedback
- Fixed localization issues when using Navigator inside Feedback
1.7.0 #
1.6.3 #
Changed #
- Implemented print handler
- Moved ISpect's initialization to the ISpect's run method (See example project for implementation details)
1.5.7 #
1.5.5 #
Fixed #
- Issues with Draggable button
- Enable ISpect in release builds: manage conditions with
isISpectEnabled
1.4.8 #
Changed #
- Removed shared preference (incompatible with shrink)
- Added parameters to ISpectBuilder for Draggable button customization
1.4.4 #
Added #
- New parameter
actionItemsinISpectOptionsfor adding custom actions to ISpect page's actions sheet
1.4.3 #
1.4.2 #
Improved #
- Draggable button functionality with new maximum reverse point
- Added localization for Detailed HTTP Logs page
- Minor updates to Detailed HTTP Logs page
1.3.1 #
Improved #
- Refactored and optimized code
- Draggable button position now saved in cache
- Updated
analysis_options.yamlfile - Updated
README.mdfile
1.2.7 #
Added #
- More customization options for
ISpect.initHandling- Configure BLoC, Dispatcher error handling, and more during initialization
1.2.4 #
Added #
- New options for
ISpectLoggerdetailed monitor page: reverse all logs and toggle expansion - Moved performance tracker to
Draggablebutton (removed from settings sheet)
1.2.3 #
Changed #
navigatorContextno longer required for ISpectBuilder- To use Draggable button inside ISpectScreen, pass the key (not available by default)