Skip to content

v1.4.0 — starting the app is now a pull, not a build

Choose a tag to compare

@MR-TABATA MR-TABATA released this 23 Aug 11:54
· 5 commits to main since this release

docker compose up no longer builds the image on your machine, and two failures that showed up exactly when you needed the tool are fixed.

Important

Upgrading an existing checkout moves the management database. The default compose path no longer mounts .:/app, so CLI2UI_DB_PATH now points at /data on a named volume. A checkout that had connections saved in the project root will start empty — nothing is deleted, the app is looking somewhere else. Either copy the existing db.sqlite3 into the volume, or copy docker-compose.override.yml.example, which puts the file back in the project root where you can inspect it.

Changed

  • docker compose up now pulls a published image instead of building one — the first screen used to be preceded by apt and pip on a laptop that has no reason to compile anything. Compose points at jiniie/cli2ui:latest (amd64 and arm64, pushed on v* tags), so starting the app is a pull; CLI2UI_IMAGE in .env pins a version. Building from source moves to docker-compose.override.yml.example — copy it and you get build: . plus the working-tree mount, i.e. the previous behaviour with live reload.
  • The management database moved to a named volume — see the upgrade note above.

Fixed

  • The workspace no longer hangs while a table is lockedpg_total_relation_size() and pg_table_size() open the relation they measure, so the size and bloat probes took ACCESS SHARE on every table and queued behind any ACCESS EXCLUSIVE holder. Both probes feed the overview and the Health panel, the pages on the way to the Locks panel, so an ALTER TABLE waiting on an idle transaction made the workspace unreachable at exactly the moment you needed it to explain the jam. Measured before the fix: /locks answered in 0.02s while the connection page never returned. Both probes now run under a 1s lock_timeout and report what happened; each degrades its own card, so Health keeps the cards a lock can't touch. (MySQL is unaffected: its sizes come from information_schema.TABLES, which reads the data dictionary.)
  • "Cancel" is no longer offered where it does nothing — cancel stops a running query, so on a session that isn't running one it reports success and releases nothing. That session is the usual head blocker (idle in transaction), so the button appeared exactly where it couldn't help. Cancel now renders disabled there, with a note that only kill ends the transaction; sessions waiting on a lock keep it, since a lock wait means a statement is in flight.

Full changelog: https://github.com/MR-TABATA/cli2ui/blob/main/CHANGELOG.md