Skip to content
Nuvyntra Labs
All toolkits

Toolkit

Pulse

Live Plugin.Maui.* session viewer — UseMauiPulse() plus maui-pulse CLI

Current 1.0.1

During-the-session viewer for allow-listed Nuvyntra plugins only. The host package forwards events the app already raises; maui-pulse attach draws a nine-lane table. It does not scrape logcat, Charles, Firebase, Sentry, or MAUI Connectivity.

Abstract

Two packages, one job: show what allow-listed Plugin.Maui.* plugins are doing right now. Plugin.Maui.Pulse is a Debug sink — UseMauiPulse() scans DI and loaded assemblies, stays subscribed, and POSTs JSON to http://127.0.0.1:7878/ (10.0.2.2 on an emulator). Plugin.Maui.Pulse.Cli is the maui-pulse tool that listens and draws NETWORK, API, QUEUE, SYNC, PERMS, HEALTH, LEAK, CRASH, and SESSION. A missing plugin skips that lane (not_installed). Release is off unless Enabled = true. Pulse does not replace MauiDev, maui-perf, or Observability.

Install

dotnet tool install -g Plugin.Maui.Pulse.Cli --source https://api.nuget.org/v3/index.json
dotnet add package Plugin.Maui.Pulse
adb reverse tcp:7878 tcp:7878   # USB Android
maui-pulse attach --package com.myapp.android --android --port 7878

CLI package ID: Plugin.Maui.Pulse.Cli

Host package ID: Plugin.Maui.Pulse (nuget.org)

Plugin.Maui.Pulse.Cli is a global dotnet tool (net10.0). The command stays maui-pulse. Do not run dotnet add package Plugin.Maui.Pulse.Cli in an app. The host package is Plugin.Maui.Pulse — call builder.UseMauiPulse() and still register the plugins the product already uses. Publishing is pipeline-only on the MauiPulse repository.

Commands (1.0.1)

CommandPurpose
maui-pulse attachHTTP sink plus the nine-lane table. This is the live command
maui-pulse listenHTTP sink on --port or --stdin JSON. No table. Agents, tests, Observability
maui-pulse pullCopy known plugin files from --from. --adb only prints how to copy
maui-pulse queuesRead-only JobQueue / RetryQueue *.db3 inspector. Does not drain
maui-pulse syncRead-only OfflineSync offlinesync.db3 inspector
maui-pulse incidentZip allow-listed files plus manifest.json
maui-pulse versionPrint the installed CLI version

Global options: --package (required on session commands), --android | --ios (required on listen / attach), --port (default 7878), --format human|json, --lanes network,sync,queue (hides rows; does not widen the allow-list), --stdin, --once, --from, --out, --adb, --no-update-check.

maui-pulse attach --package com.test.androidapp --android --port 7878 --no-update-check
maui-pulse attach --package com.test.ios --ios --port 7878
maui-pulse listen --package com.test.androidapp --android --stdin --once --format json
maui-pulse pull --package com.test.androidapp --from ./device-files --out ./pulled
maui-pulse queues --package com.test.androidapp --from ./pulled
maui-pulse sync --package com.test.androidapp --from ./pulled
maui-pulse incident --package com.test.androidapp --from ./pulled --out incident.zip
maui-pulse version

Exit codes: 0 success (including skipped lanes / missing queue files), 1 no allow-listed evidence or bind failed, 2 usage (missing --package, missing platform, unknown command).

JSON

listen --format json and --stdin accept this signal schema. Unknown source values are dropped.

{
  "package": "com.test.androidapp",
  "source": "Plugin.Maui.NetworkMonitor",
  "lane": "network",
  "signal": "StatusChanged",
  "summary": "captive portal",
  "state": "running",
  "at": "2026-09-19T16:00:00Z"
}

Usage and sample results

Each sample is a typical attach or inspector view. A quiet row (—) is waiting, not a failure. USB Android needs adb reverse tcp:7878 tcp:7878 after unplug. Release is off unless options.Enabled = true.

Live

maui-pulse attach

HTTP sink plus the nine-lane table. This is the live command

Usage

maui-pulse attach --package com.test.androidapp --android --port 7878
maui-pulse attach --package com.test.ios --ios --port 7878 --no-update-check
adb reverse tcp:7878 tcp:7878   # USB Android, then attach

Sample result

maui-pulse 1.0.1  attach  com.test.androidapp  android  :7878
session 8f2a

NETWORK   Plugin.Maui.NetworkMonitor      captive portal
API       Plugin.Maui.NetworkDiagnostics  —
QUEUE     Plugin.Maui.JobQueue            visits#184
          Plugin.Maui.RetryQueue          — not installed
SYNC      Plugin.Maui.OfflineSync         conflict on Visit
PERMS     Plugin.Maui.PermissionFlow      —
HEALTH    Plugin.Maui.AppHealth           battery 18%
LEAK      Plugin.Maui.LeakAnalyser        —
CRASH     Plugin.Maui.Diagnostics         —
SESSION   Plugin.Maui.DeviceSession       session 8f2a

A quiet row (—) means Pulse is subscribed and waiting. — not installed means the assembly is missing. — not registered means the package is referenced but UseX() / AddX() is missing. Two apps need two Pulse windows.

maui-pulse listen

HTTP sink on --port or --stdin JSON. No table. Agents, tests, Observability

Usage

maui-pulse listen --package com.test.androidapp --android --port 7878
maui-pulse listen --package com.test.androidapp --android --stdin --once --format json

Sample result

{
  "ok": true,
  "tool": "maui-pulse"
}

{
  "package": "com.test.androidapp",
  "source": "Plugin.Maui.NetworkMonitor",
  "lane": "network",
  "signal": "StatusChanged",
  "summary": "captive portal",
  "state": "running",
  "at": "2026-09-19T16:00:00Z"
}

GET / returns health. POST / ingests presence, signal, or batch JSON. Unknown source / id values are dropped.

Files

maui-pulse pull

Copy known plugin files from --from. --adb only prints how to copy

Usage

maui-pulse pull --package com.test.androidapp --from ./device-files --out ./pulled
maui-pulse pull --package com.test.androidapp --from ./device-files --adb

Sample result

maui-pulse 1.0.1  pull  com.test.androidapp

Copied
  plugin.maui.jobqueue.db3
  offlinesync.db3
  maui-diagnostics/

Skipped
  plugin.maui.retryqueue.db3  (missing)

Known names: plugin.maui.jobqueue.db3, plugin.maui.retryqueue.db3, offlinesync.db3, maui-diagnostics/. logcat.txt in the same folder is ignored.

maui-pulse queues

Read-only JobQueue / RetryQueue *.db3 inspector. Does not drain

Usage

maui-pulse queues --package com.test.androidapp --from ./pulled

Sample result

maui-pulse 1.0.1  queues  com.test.androidapp

JobQueue  plugin.maui.jobqueue.db3
  pending  2
  failed   visits#184  last error: timeout
RetryQueue  — file missing

Read-only. It never dequeues or retries work.

maui-pulse sync

Read-only OfflineSync offlinesync.db3 inspector

Usage

maui-pulse sync --package com.test.androidapp --from ./pulled

Sample result

maui-pulse 1.0.1  sync  com.test.androidapp

OfflineSync  offlinesync.db3
  pending   3
  conflict  Visit/184  two devices edited the same row

maui-pulse incident

Zip allow-listed files plus manifest.json

Usage

maui-pulse incident --package com.test.androidapp --from ./pulled --out incident.zip

Sample result

maui-pulse 1.0.1  incident  com.test.androidapp

Wrote incident.zip
  plugin.maui.jobqueue.db3
  offlinesync.db3
  maui-diagnostics/
  manifest.json

maui-pulse version

Print the installed CLI version

Usage

maui-pulse version

Sample result

Plugin.Maui.Pulse.Cli 1.0.1

No --package required.

It never

  • Never scrapes logcat, Charles, Firebase, Sentry, or MAUI Connectivity.
  • Never starts or registers plugins for you.
  • Never invents a substitute from the OS when a plugin is missing.
  • Never phones home.
  • Never installs workloads.
  • Never drains JobQueue or RetryQueue.
  • Never adds Plugin.Maui.Pulse.Cli as a PackageReference.

CI

maui-pulse listen --package com.test.androidapp --android --stdin --once --format json

adb logcat, Charles / Proxyman, Firebase Performance, and Sentry are raw logs, HTTP only, or cloud-after-the-fact. Observability can push; Pulse listens. MauiDev doctors the project. maui-perf wraps maui profile.

Use a plugin instead when

Release notes

  • 1.0.1. Host and CLI aligned. Host packs snupkg so nuget.org matches other Plugin.Maui.* libraries. CLI still omits snupkg.
  • 1.0.0. UseMauiPulse() Debug sink plus maui-pulse attach, listen, pull, queues, sync, incident, and version.
  • 1.0.0. Nine closed lanes. Unknown sources dropped. Interactive 4-hour nuget.org update check shared with maui-dev, nuvyn, and maui-perf.

Discussion

Comment on Pulse. The thread lives on this component's GitHub repository (nuvyntralabs/MauiPulse). Sign in with GitHub — Giscus uses Discussions, Utterances uses Issues.