Skip to content

v0.22.0

Choose a tag to compare

@austinginder austinginder released this 30 Jul 09:50
· 247 commits to main since this release

The under-the-hood release. Minn opens a calm window into the machinery it has always sat on top of: a read-only database viewer with a structure tab and a set of storage health checks that hand you the exact cleanup command instead of a scary button, on-demand cron profiling through Scrutoscope, and login posture from All-In-One Security. The traffic story widens too: Matomo and Jetpack Stats join the Overview chart through their own APIs (Jetpack verified on a live connected site), and the day drill-down learns to step through days with the arrow keys. Everything new holds the same line: Minn reads, explains, and links out; it never edits what it cannot promise to leave consistent.

Added

  • A read-only database viewer at /minn-admin/database: administrators get a calm window into the site's actual storage. The table list shows every table with estimated row counts, sizes and engines (scoped to this install's prefix by default, with a one-click toggle for other-prefix tables); clicking a table opens its rows with live columns from the schema, a primary-key badge, column sorting, a per-column contains-filter and pagination; clicking a row opens a detail view with full values, column types and a copy control per value. The viewer deliberately has no sidebar item (most sites never need it): its doors are the System page's Database card, where "browse all" opens the table list and each largest-table row drills straight into that table, plus the command palette's "Browse database" command and the /minn-admin/database address itself. Read-only is the product, not a limitation: a database editor would bypass every plugin's invariants, so writes are a permanent non-goal and the interface says so. Serialized values render as raw text (never reconstructed), binary values show a hex preview, and queries stay polite on huge tables: counts come from index metadata, filtered counts stop at ten thousand, and browsing is bounded to the first ten thousand rows of an ordering, with filters as the honest way to reach the rest.
  • A Structure tab on every table: alongside Rows, each table now shows its columns (type, nullability, default, key and any comment) and its indexes (the columns each one covers in order, whether it is unique, its type and its cardinality, with partial indexes showing their prefix length). It reads index metadata only, never the table itself, so it opens instantly even on the tables the Rows view has to page carefully. This is the answer to "why is this page slow", one tab away from the data.
  • A Health view over the site's storage: the database viewer gains a second view that runs a fixed set of read-only checks and explains what each one means. It finds meta rows left behind by deleted posts and users, relationships pointing at categories that no longer exist, tables missing a primary key or still on an older storage engine, space that could be reclaimed, id columns approaching their ceiling, a missing combined post and meta-key index (a large, low-risk speed win on sites with heavy meta use), stored revisions, spam and trashed comments, expired shop sessions and background-job backlogs. Warnings sort to the top, every check names the table it concerns and links straight to it, and a summary row on the System page reports the state at a glance. Where a check finds something worth cleaning up, Minn hands over the exact WP-CLI command to copy, with a reminder to back up first, rather than a button that runs it: the read-only boundary holds here too. Checks stay polite by design, bounded the same way the row browser is and skipped entirely on tables too large to count cheaply, which is exactly where an eager diagnostic would otherwise do harm.
  • Profile a cron hook from Diagnostics: with Scrutoscope 1.4 or newer, the Cron view's row menu gains Profile this hook. Minn asks first, because the hook runs for real (emails, updates, cleanup, queue work) under the profiler, then saves an on-demand profile you can open under Profiles. The work rides Scrutoscope's own profiler API, so per-hook segmentation and their report shape stay intact; on older Scrutoscope the action simply is not offered.
  • Restore a backup, one click from Disembark: with Disembark 2.8 or newer, the Backups status card gains a Restore a backup link that opens their Tools screen (where upload-a-zip and pull-from-a-live-site live). Restore stays on Disembark by design: it rewrites the whole site, and Minn does not pretend to own that risk. Older Disembark builds simply do not show the link.
  • Matomo joins the Traffic chart: sites running the self-hosted Matomo Analytics plugin now get the Overview Traffic chart and its day drill-down (top pages with real post titles, referrers, and an Open Matomo link) read through Matomo's own reporting API, so the numbers match its screens exactly, including its hourly archiving cadence. Access follows Matomo's own view permission, and a Matomo that has never tracked steps aside so another analytics plugin can answer.
  • Jetpack Stats joins the Traffic chart: connected sites with the Jetpack Stats module get the same treatment through Jetpack's own WordPress.com client: daily visitors and views on the chart, top posts and referrers on the day drill-down, and an Open Jetpack Stats link. Verified end to end on a live connected site. A purpose-installed analytics plugin still answers first; Jetpack is the fallback many sites already run. WordPress.com reports views without per-page visitor counts, so page rows say views and skip the number they do not have instead of showing a made-up zero, and referrer rows carry the specific names their own screens show ("Google Search", not the "Search Engines" grouping).
  • Step through days in the traffic drill-down: with a day's top pages open, the left and right arrow keys (or the header chevrons) pull up the previous or next day of stats without closing the dialog, skipping days that had no traffic. Works for every analytics provider.
  • All-In-One Security login posture: the Activity Log status card for AIOS now reports failed logins in the last day, who is locked out right now, and how many permanent IP blocks are in place, with deep-links into AIOS's own locked-IP and permanent-block screens when those counts are non-zero. The System page gains a matching health row (same Solid Security / Wordfence shape), so a site running AIOS surfaces its login protection without opening their menus.

Fixed

  • Redirection's setup notice stays in Minn: the notification panel's "Redirection setup" button used to open wp-admin's Tools screen in a new tab, even though Minn already has the one-time setup gate on Redirects. It now lands on /minn-admin/redirection in the same tab (no off-site ↗), and the same rewrite is ready for any future notice that points at a surface Minn already covers.