github charles-001/dolphie 6.16.0

3 hours ago

Breaking Changes

  • Python 3.10 or newer is required. Python 3.9 reached end of life in October 2025. pip install dolphie on 3.9 now resolves to 6.15.0.

New Features

  • Start with filters applied: A new --filters flag, the filters config option, and a filters field in credential profiles apply thread filters at startup in the format name=value, for example --filters user=!azure_superuser,time=5. Supports user, host, db, hostgroup, time, and query (#124, thanks @ben-morin).
  • Negated filters: Prefix a filter value with ! to exclude what it matches, in the filter modal (f) and in --filters. The modal now shows the filters currently in effect (#124).
  • Graph dashboard rebuilt: Graphs come from one validated registry with explicit layouts, availability rules, and per-graph renderers. Series controls show the live value with a color swatch and support keyboard navigation. Series visibility is per host and survives a metrics reset (#123).
  • Threshold and error annotations on graphs: The checkpoint graph labels its warning and critical thresholds, the redo log bar shows the hourly rate against the configured log size, and a graph that fails to render shows Graph unavailable instead of stopping the dashboard (#123).

Replay

  • Smaller replay files: New recordings use a raw-content zstd dictionary and 16 KB SQLite pages. Files are about a third of their previous size. Existing files still play back.
  • Faster seeking on large files: The metric window query on seek is bounded by the target frame, 213 ms to 0.23 ms on a 208k-row daemon file.
  • Hold [ or ] to scrub: While the key is held only the replay position updates. The frame renders when the key rests. The step doubles as the key is held and caps at 1% of the file, so a scrub across a day-long recording takes a few seconds.
  • Playback is read-only: Playback opens the file with mode=ro and never runs DDL, VACUUM, chmod, or a retention purge, so a daemon can keep writing the file that is being watched.
  • Unreadable rows are skipped: A corrupt or truncated row is skipped with a notification instead of ending playback. A frame that fails to render pauses the replay instead of crashing.
  • Version warning: Playing a file recorded by a newer Dolphie shows a warning, and the daemon records its version in the file metadata.

Bug Fixes

  • AttributeError: 'list' object has no attribute 'get' on playback: Payload fields are coerced to the shapes the panels expect, so a file recorded by a different Dolphie version loads instead of crashing.
  • NoMatches on exit: A worker finishing during shutdown no longer queries widgets that are already gone.
  • Replay seek with a stepped-back clock: The metric window ignores rows written after the system clock moved backwards.
  • Metrics are thread-safe: Metric history is snapshotted atomically between the poll worker and the renderer, and a counter reset after a missing sample sets a new baseline instead of emitting a negative rate (#123).

Packaging

  • Dependency management moved from Poetry to uv and Hatchling. uv sync --locked --all-groups sets up a development environment (#123).
  • The wheel and sdist ship the dolphie package only.

Testing

  • The real app now runs in CI against MySQL 5.7, 8.0, 8.4, 9.7, Percona 8.4, MariaDB 10.11, 11.4, 11.8, 12.3, and ProxySQL 3.0, plus MariaDB replication, Group Replication, Galera, multi-source, and InnoDB ClusterSet topologies, and SVG snapshots of every panel from committed daemon recordings.

Dependency Updates

Package Old New Note
textual 8.2.7 8.2.8
orjson 3.11.5 3.12.0 No longer held back, Python 3.10 floor
requests 2.32.5 2.34.2 No longer held back, Python 3.10 floor
sqlparse 0.5.5 0.6.0
packaging 26.2 26.3
textual-plotext 1.0.1 New, replaces the vendored plotext widget

Don't miss a new dolphie release

NewReleases is sending notifications on new releases.