diff --git a/apps/desktop/electron/main/plugin-launcher-state.ts b/apps/desktop/electron/main/plugin-launcher-state.ts
index 336b1b6fb2..85e09ca51b 100644
--- a/apps/desktop/electron/main/plugin-launcher-state.ts
+++ b/apps/desktop/electron/main/plugin-launcher-state.ts
@@ -15,11 +15,12 @@ import { join } from "node:path";
export const PLUGIN_LAUNCHER_STATE_FILE = "plugin-launcher-state.json";
/**
- * The launcher must fit eight columns without squeezing: below this width the
- * grid drops to six columns, which is the one thing the user cannot undo by
- * dragging.
+ * The launcher opens wide enough for a 48px icon and a readable name in every
+ * one of its eight columns. Below this floor a tile is about 90px wide and the
+ * longest names start losing characters, so the window refuses to go narrower
+ * rather than let the grid squeeze.
*/
-export const PLUGIN_LAUNCHER_MIN_WIDTH = 560;
+export const PLUGIN_LAUNCHER_MIN_WIDTH = 800;
/**
* Height is not a user preference any more: the renderer measures what it
* renders and asks for exactly that height through
@@ -30,7 +31,7 @@ export const PLUGIN_LAUNCHER_MIN_CONTENT_HEIGHT = 120;
/** Wider than this the eight tiles stop being scannable. */
export const PLUGIN_LAUNCHER_MAX_WIDTH = 1280;
export const PLUGIN_LAUNCHER_MAX_HEIGHT = 940;
-export const PLUGIN_LAUNCHER_DEFAULT_WIDTH = 760;
+export const PLUGIN_LAUNCHER_DEFAULT_WIDTH = 900;
/** Initial height before the panel has measured itself. */
export const PLUGIN_LAUNCHER_DEFAULT_HEIGHT = 440;
diff --git a/apps/desktop/src/components/launcher/LauncherTileButton.tsx b/apps/desktop/src/components/launcher/LauncherTileButton.tsx
index 2afaa2d23c..f7f33d0cf5 100644
--- a/apps/desktop/src/components/launcher/LauncherTileButton.tsx
+++ b/apps/desktop/src/components/launcher/LauncherTileButton.tsx
@@ -4,13 +4,13 @@ import type { LauncherTile } from "../../lib/launcher-search";
import { IconPin } from "../icons";
/**
- * One grid cell: icon, type badge, and name — plus its own pin toggle.
+ * One grid cell: a rounded-square icon and the name, plus its own pin toggle.
*
- * Every cell has the same three parts so the eight-column grid stays aligned:
- * the icon shape (square plugin, round application) and the small type badge
- * carry the source, and the name replaces the old second text line, which used
- * to explain why the item matched. A long name is ellipsized instead of
- * wrapping, which would break the row rhythm.
+ * Every source renders the same shape at the same size, so the grid reads as
+ * one set of tools and the whole line below the icon belongs to the name. The
+ * source still appears in the hover title for anyone who needs it, but it no
+ * longer costs a corner of the icon or a word of the name. A long name is
+ * ellipsized instead of wrapping, which would break the row rhythm.
*
* The pin sits in the corner and is only visible while the cell is hovered,
* active or focused; an already pinned cell keeps it visible and filled.
@@ -71,10 +71,7 @@ export function LauncherTileButton({
title={title}
onClick={onOpen}
>
-
+
{showIcon ? (
{tile.monogram}
)}
-
- {tile.name}
- {typeLabel}
-
+ {tile.name}