Release notes

Here you can find the release notes for Kanzi Monitor.

1.41.0

First release of Kanzi Monitor for Kanzi 4.1. Compatible with Kanzi 4.1.0.

New features

Font and glyph cache inspection

  • The fontinfo command shows all active FontRuntime instances with font identity (family, file), style definition (size, style, weight, layout, rendering), glyph cache state (texture dimensions, GPU memory, generation), and which nodes use each font.

  • The Overwatch service exposes font data through two new commands:

    • overwatch.fonts returns all active FontRuntimes as JSON with style, glyph cache, metrics, and node info.

    • overwatch.glyphcachepreview returns a base64-encoded RGBA preview of a glyph cache texture.

  • The Monitor Web UI adds a Fonts tab for browsing active fonts, viewing font identity and style details, font metrics (line height, ascender, descender), glyph cache memory, and live glyph atlas texture preview.

  • The MCP server adds get_fonts and get_font_glyph_cache_preview tools for AI-assisted font inspection.

  • When the node tree is not available, all font inspection interfaces show an informational message instead of empty results.

Runtime glyph cache size control

  • overwatch.setglyphcachesize <width> <height> sets the glyph cache texture size for newly created caches at runtime, enabling glyph cache pressure testing without recompiling the application.

  • The command is gated behind the OverwatchPropertyChangeEnabled configuration flag. A warning is logged when the cache size is set below 128x128.

  • overwatch.fonts includes a configuredGlyphCacheSize field when the size has been overridden, and a uniqueCacheCount field showing the number of distinct glyph cache textures. GPU memory totals are deduplicated when multiple fonts share the same cache.

  • The Monitor Web UI Fonts tab shows the current glyph cache size as editable inputs, with visual feedback on change.

  • The MCP server adds a set_glyph_cache_size tool.

Build configuration and diagnostics reporting

  • The kzinfo command now reports the build configuration (Debug, Profiling, or Release).

  • The overwatch.status JSON response includes a buildConfig field for programmatic access. The Monitor Web UI uses it to surface build context.

Log category filtering

  • The Monitor Web UI Logs tab adds a category filter dropdown to show or hide log entries by category (e.g. generic, debug). Filters apply to both the on-screen display and the downloaded .txt file.

Embedded Perfetto UI in the Monitor Web UI Trace tab

  • The Monitor Web UI Trace tab adds a View in Perfetto button that opens the most recently fetched trace directly in Perfetto UI (new browser tab) via Perfetto’s official postMessage embedding protocol. Closes the capture → analyze loop without leaving the Monitor Web UI: capture a chrometrace JSON or a .perfetto-trace (via Fetch .perfetto-trace), then click View in Perfetto.

  • Trace bytes stay in the browser — ui.perfetto.dev is a static SPA that parses the trace locally via the WASM trace_processor. Nothing is uploaded.

  • The button prefers the .perfetto-trace binary when both formats are loaded (its typed counters and debug annotations render in Perfetto UI with higher fidelity than the JSON form).

Named, dynamically-controllable trace writers

  • The Trace Service now drives output through a writer registry. Each trace writer registers under a name with a human-readable description; the active set is selected via configuration at startup and can be changed at runtime.

  • New configuration key ActiveWriters (comma-separated): lists writers to activate at startup. Default is chrometrace if unset.

  • New built-in writer chrometrace — Chrome Trace Format JSON, the existing trace output. This replaces the previously-implicit single output mode.

  • New built-in writer perfetto — native Perfetto protobuf (.perfetto-trace). Smaller on disk than chrometrace, supports typed counters and debug annotations, and is the canonical input format for Perfetto UI and Android Performance Analyzer. Implemented via a hand-rolled, header-only protobuf encoder — no external libprotobuf or Perfetto SDK dependency. Activate with ActiveWriters = perfetto or ActiveWriters = chrometrace,perfetto to write both formats simultaneously. Carries the full Monitor sample set, including resource profiling samples.

  • New built-in writer perfetto-producer — streams events through the in-process Perfetto producer SDK to the platform tracing daemon (Android traced, Linux perfetto). No file on disk; events appear in system traces captured by Android Performance Analyzer or the perfetto CLI alongside ATrace, SurfaceFlinger, and other system producers — giving a single timeline that correlates Kanzi work with the rest of the device. Requires the plugin to be built with -DKZMONITOR_PERFETTO_PRODUCER=ON (the pre-built Android binaries already are; building from source defaults to off). The vendored Perfetto SDK lives under third_party/perfetto/ (Apache 2.0). New PerfettoProducerCaptureSeconds config key drives an in-process Perfetto session at plugin load, useful on Windows and embedded targets where no platform tracing daemon is available. See Using the Profiling Trace service for the full perfetto-producer workflow.

  • The example app’s AndroidManifest.xml declares <profileable android:shell="true" /> so shell-side profilers (Android Performance Analyzer, the perfetto CLI) can attach to release builds without requiring debuggable.

  • New Overwatch commands: overwatch.writers lists registered writers and their active state as JSON; overwatch.activatewriter <name> and overwatch.deactivatewriter <name> toggle them at runtime.

  • The Trace Service is now agnostic to what specific writers do — adding a new writer (e.g. a Perfetto protobuf writer or a network stream sink) does not require any change to the Trace Service or to the configuration parser.

  • Migration / API change: the public SampleCollector::registerWriterTask() and SampleCollector::clearWriterTasks() symbols are removed. Custom writers in downstream integrations now register via TraceWriterRegistry::registerWriter(name, description, fn) and are activated by name in ActiveWriters or at runtime via overwatch.activatewriter. See Migration guides for the migration recipe.

Application injection retired

  • Kanzi Monitor now resolves the Kanzi scene graph and main loop entirely through the Kanzi 4.1 Domain: it enumerates the host’s Screens via Domain::getScreens() and reads frame timing via Domain::getFramesPerSecond(). No built-in command or service requires an injected Application.

  • A stock single-screen Kanzi 4.1 application — and droidfw’s multiple views — are introspectable out of the box (scene tree, fonts, screenshots, performance metrics, and the on-screen Monitor UI overlay ui) with no setApplication call and no Startup Prefab registration. The example app no longer calls setApplication.

  • The app-prefixed commands are retired: appfpsinfo becomes fpsinfo (Domain-based, identical value), and appquit is removed in favor of the existing quit command, which stops the same main loop. See Migration guides.

  • Removed: the setApplication / native-runtime injection API (the C++ call and the setNativeRuntime / setNativeApplication JNI handshakes), the NodeRegisteringScreenEnabled Screen-metaclass override that auto-registered node trees, and the registerRoot / KanziMonitorPlugin.registerNativeViewRoot view-root registration hook (Domain::getScreens() enumerates every host view root — including a programmatically-created one on droidfw — so explicit registration is no longer needed). The appfps performance metric is also removed — it duplicated fps (both read the same Domain frame-time queue). See Migration guides.

Cubemap and texture type resource inspection

  • The resinfo command annotates each texture with a compact descriptor — texture type, face count, dimensions, format, and mipmap levels — making cubemaps distinguishable from 2D textures (for example, [CubeMap 6f 512x512 R8G8B8A8_UNORM mips:10]).

  • overwatch.resourceinfo adds type, faceCount, sliceCount, and isCubemap fields to its textureInfo block. The additions are backward compatible; existing fields are unchanged.

  • The Monitor Web UI resource detail view shows a Type row for every texture, and Faces and Slices rows for cubemap and array textures.

  • The MCP server get_resource_info tool surfaces the new fields with no server-side change.

  • overwatch.texturepreview accepts an optional face=<n> argument (0–5) to read an individual cubemap face. The Monitor Web UI shows all six faces of a cubemap as a thumbnail strip in the resource detail view; selecting a face enlarges it below, and downloads are named per face. The MCP server get_texture_preview tool gains a matching face parameter.

Removed features

Graphics API call logging

  • The runtime graphics API call logging feature from Kanzi Monitor 1.9.1 (the graphicslog and overwatch.graphicslog commands, the Monitor Web UI graphics logging controls, and the set_graphics_logging and get_graphics_logging MCP server tools) is not available in this release. Kanzi 4.1 removes the underlying engine API. The feature may return in a future Kanzi release.

Bug fixes

  • Monitor Web UI: the “Connected” status indicator no longer stays green after the Kanzi application exits. The indicator now reflects the bridge → Monitor link state (driven by a monitorConnected field the bridge tags on every response) and a 5 s overwatch.status heartbeat surfaces disconnects without user action.

  • RemoteConsole: createSocket() now sets SO_REUSEADDR on the listen socket before bind(). Without it, port 56000 sat in TIME_WAIT for ~60-120 s after the previous instance exited, and the next app launch failed to bind — leaving RemoteConsole dark and breaking reconnect from the Web UI, RemoteConsoleClient, and MCP server.

  • Screenshot capture timeouts are now actionable. When overwatch.screenshot cannot complete because the render stage never fires (for example, in Studio Preview with Allow preview to update if not in focus disabled), the Monitor Web UI and the MCP server report a hint pointing at that setting instead of a bare timeout. The MCP take_screenshot tool now also polls the two-phase capture protocol internally (up to a 5 s bound), so a single call reliably returns the image instead of surfacing an intermediate pending status that required a second call.

  • Texture preview GPU readback now uses the texture’s native pixel format instead of assuming RGBA8. The hardcoded RGBA8 readback buffer was mis-sized for textures with a different pixel stride (for example HDR R16G16B16A16_SFLOAT, which is 8 bytes per texel), producing corrupted previews and, for cubemaps, aliased faces. overwatch.texturepreview now reads back in the source format and converts to RGBA8 for display, matching the CPU host-copy path.

Packaging changes

  • Android: Kanzi Monitor no longer ships an AAR. The plugin exposes no Java API — Monitor discovers the scene graph through Domain::getScreens() — so there is nothing for an AAR to carry. Build libkzmonitor.so into your APK from your kanzinative module by passing -DKANZI_LINK_KZMONITOR=ON to its CMake configuration; the engine .so files come in transitively through your existing Kanzi runtime AAR dependencies. See Integrating Kanzi Monitor as a prebuilt library for the full integration steps.

Example project

  • The example application under examples/monitor_example/ is compatible with, and uses, the application templates from Kanzi 4.1.0 Alpha 2. See the Kanzi 4.1.0 Alpha 2 SDK documentation for details on the new template structure.

See also

Migration guides

Known issues

1.40.0

Initial release of Kanzi Monitor for Kanzi 4.0. Compatible with Kanzi 4.0.0. A source-only distribution package is available for building the plugin from source against any supported Kanzi 4.0.x version.

Features

Command Processor Service

  • Local console for interactive command-line access over stdin/stdout.

  • Remote console for command access over TCP sockets.

  • Serial console for command access over serial ports (UART). Supports Windows COM ports and POSIX serial devices.

  • Built-in commands for application control, scene graph inspection, and diagnostics.

  • Support for custom application-defined commands.

Trace Service

  • Profiling data collection with configurable sample buffers and collection intervals.

  • JSON trace export compatible with the Perfetto trace viewer.

  • Configurable automatic trace output on exit, on timer, or when frame duration exceeds a threshold.

UI Service

  • On-screen overlay with basic, report, and control screen modes.

  • Configurable font scaling for high-DPI devices.

  • Touch and key input support.

Log Service

  • In-memory log buffer with on-screen presentation.

  • Console access to log entries.

  • KanziLog trace pipeline diagnostics for troubleshooting missing log entries.

Performance Service

  • Runtime performance statistics and counters with PerformanceInfo profiling category.

  • Performance metric watchers that trigger commands when thresholds are crossed.

Overwatch Service

  • JSON-based remote introspection of the scene graph, resources, rendering, data sources, and performance.

  • Scene graph browsing with configurable depth limiting.

  • Property querying and modification for any node in the scene graph.

  • Resource inspection with CPU/GPU memory usage and detailed metadata.

  • Texture preview and render pass output preview.

  • Screenshot capture with scheduled framebuffer readback. Images are vertically flipped by default to match screen orientation (GPU framebuffer data is bottom-up).

  • Real-time performance metrics including FPS, frame times, and render statistics.

  • DataSource inspection including DataObjectList nodes with item data.

  • Log entry access and trace profiling control.

  • Graphics backend information including device, API version, driver version, and feature list.

Tools

  • Monitor Web UI — browser-based GUI for remote inspection and debugging of Kanzi applications. Connects over TCP or serial and offers live scene graph browsing, property editing, resource and texture preview, screen capture, render pass visualization, performance monitoring, and trace capture. The Performance tab includes a SuspendWhenIdle status indicator and toggle for controlling the engine main loop scheduling. The Screen tab includes overlay controls for the PerformanceInfo level, Monitor UI visibility (per node tree), BasicUI screen selection, and font scale. Controls auto-detect which commands are available. All platform packages include a prebuilt standalone executable.

  • MCP Server — Model Context Protocol server that enables AI assistants such as Claude Code and Claude Desktop to inspect and control a running Kanzi application. Connects over TCP or serial and exposes all Overwatch commands as structured tools. Includes get_idle_suspend and set_idle_suspend tools for controlling the engine main loop SuspendWhenIdle setting. Includes tools for UI overlay control: get_ui_visibility, toggle_ui (with per-node-tree support), get_basicui_screens, set_basicui_screen, get_font_scale, and set_font_scale.

  • RemoteConsoleClient — command-line TCP client for the remote console. Prebuilt for Windows and Linux.

  • SerialConsoleClient — command-line serial client for the serial console. Prebuilt for Windows and Linux.

Platform support

  • Windows (MSVC 2022)

  • Android (NDK + AAR)

  • QNX 710

  • Linux

See also

Migration guides

Known issues