<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Rabiul Islam</title>
    <description>The latest articles on DEV Community by Rabiul Islam (@rabiulislam-xyz).</description>
    <link>https://dev.to/rabiulislam-xyz</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2495668%2F7deaab59-3a14-4d08-9143-967d74f569c7.png</url>
      <title>DEV Community: Rabiul Islam</title>
      <link>https://dev.to/rabiulislam-xyz</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/rabiulislam-xyz"/>
    <language>en</language>
    <item>
      <title>A mystery app showed up in my Ubuntu app drawer, and getting rid of it was annoying. So I built Showcase.</title>
      <dc:creator>Rabiul Islam</dc:creator>
      <pubDate>Sun, 24 May 2026 09:55:31 +0000</pubDate>
      <link>https://dev.to/rabiulislam-xyz/a-mystery-app-showed-up-in-my-ubuntu-app-drawer-and-getting-rid-of-it-was-annoying-so-i-built-1lo5</link>
      <guid>https://dev.to/rabiulislam-xyz/a-mystery-app-showed-up-in-my-ubuntu-app-drawer-and-getting-rid-of-it-was-annoying-so-i-built-1lo5</guid>
      <description>&lt;p&gt;A while back I was scrolling through my Ubuntu 22.04 app drawer and noticed an app I didn't recognize. I hadn't knowingly installed it, or if I had, I'd forgotten about it ages ago. No problem, I thought, I'll just remove it. Except, well, how?&lt;/p&gt;

&lt;p&gt;Was it an &lt;code&gt;apt&lt;/code&gt; package? A Snap? A Flatpak? To get rid of it from the terminal I first had to figure out &lt;em&gt;which&lt;/em&gt; tool put it there, and then remember the right command for that tool. GNOME Software is built around the store side of things, discovering and installing, and it pretty much ignores anything that didn't come from a source it manages. For one unknown app that was already sitting on my disk, that felt like a lot of detective work.&lt;/p&gt;

&lt;p&gt;So I went looking for a simple graphical app that would just show me &lt;strong&gt;everything&lt;/strong&gt; installed on my machine and let me remove whatever I didn't want, regardless of how it got there. I couldn't find one that did it cleanly. So in my spare time, I started building it.&lt;/p&gt;

&lt;p&gt;This is &lt;strong&gt;Showcase&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgfu62zasm2efmby5ui1u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgfu62zasm2efmby5ui1u.png" alt="Showcase, browsing every installed app" width="799" height="433"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  One place for every installed app
&lt;/h2&gt;

&lt;p&gt;Linux apps come in through a few different doors. There are system packages (&lt;code&gt;apt&lt;/code&gt;/&lt;code&gt;dpkg&lt;/code&gt;), there's &lt;strong&gt;Flatpak&lt;/strong&gt;, there's &lt;strong&gt;Snap&lt;/strong&gt;, and there are standalone &lt;strong&gt;AppImage&lt;/strong&gt; files. Each one has its own way of listing and removing things. Showcase queries all of them and drops every graphical app into a single grid, tagged by where it came from.&lt;/p&gt;

&lt;p&gt;From there you can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Search, filter, and sort.&lt;/strong&gt; Live search, filter by source (with live counts) or by category, and sort by name, size, or most recently installed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Inspect anything.&lt;/strong&gt; Click an app to open a detail panel with its icon, version, install size, install date, publisher, categories, package id, and full description.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Uninstall without surprises.&lt;/strong&gt; One click, authenticated through the normal system password prompt. Showcase tells you how much disk space you'll get back &lt;em&gt;before&lt;/em&gt; you commit, warns you when removing an &lt;code&gt;apt&lt;/code&gt; package would take its dependents down with it, and just refuses to remove essential system packages or base Snaps.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Stay up to date.&lt;/strong&gt; Check a single app for an update on the spot, or scan everything and apply updates one at a time or all at once, each through its own source's mechanism.
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffs0tj0r87v08rcmc8mjk.png" alt="App details and one-click uninstall" width="799" height="433"&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It follows your system light/dark theme, and since each source gets queried in parallel, one slow or missing tool (say you don't use Snap) won't hold up the rest.&lt;/p&gt;

&lt;h2&gt;
  
  
  A bit about how it works
&lt;/h2&gt;

&lt;p&gt;Showcase is a native desktop app built with &lt;strong&gt;Tauri v2&lt;/strong&gt;, so a Rust core with a &lt;strong&gt;SvelteKit (Svelte 5)&lt;/strong&gt; frontend. The binary stays small and it feels like a real GTK app rather than a browser tab wearing a disguise.&lt;/p&gt;

&lt;p&gt;The interesting question is "what actually counts as an app," and the answer turned out to be the humble &lt;code&gt;.desktop&lt;/code&gt; file. Those are exactly the entries that show up in your applications menu, so Showcase treats them as the source of truth and then enriches each one with metadata from whichever package manager owns it.&lt;/p&gt;

&lt;p&gt;Two things mattered to me from the start:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;It never runs as root.&lt;/strong&gt; Only the uninstall itself escalates, only for that one action, through the standard polkit prompt.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No shell string-building.&lt;/strong&gt; Package names get passed as argument arrays, never spliced into a shell command, so there's nothing to inject.
### One gotcha worth passing on&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The "Update all" button looked finished, right up until a review caught that &lt;code&gt;window.confirm()&lt;/code&gt; &lt;em&gt;silently does nothing&lt;/em&gt; inside a Tauri/WebKitGTK webview (wry never wires up the script-dialog signal). So the button was basically dead. The confirm returned &lt;code&gt;false&lt;/code&gt;, and nothing happened. The fix was to ditch the browser dialog and use an in-app confirmation component instead. If you're building on Tauri for Linux, don't reach for &lt;code&gt;alert&lt;/code&gt;/&lt;code&gt;confirm&lt;/code&gt;/&lt;code&gt;prompt&lt;/code&gt;. They won't behave the way they do in a browser.&lt;/p&gt;

&lt;h2&gt;
  
  
  An honest note on process
&lt;/h2&gt;

&lt;p&gt;I built this in my spare time, pairing with &lt;strong&gt;Claude Code&lt;/strong&gt;. I worked spec, then plan, then test-driven implementation, with all the parsing and logic tucked behind a small command-runner "seam" so it's unit-tested against fixtures instead of poking the live system. That's the reason a side project ended up at &lt;strong&gt;180+ Rust tests and 150+ frontend tests&lt;/strong&gt;, all gated by CI. It's also how the review above caught a bug the happy-path tests never would have.&lt;/p&gt;

&lt;p&gt;Distribution got the same treatment: every release is built in CI with a &lt;strong&gt;build-provenance attestation&lt;/strong&gt;, ships a &lt;code&gt;SHA256SUMS&lt;/code&gt; you can verify, and is also served from a &lt;strong&gt;GPG-signed APT repository&lt;/strong&gt; so you get proper &lt;code&gt;apt&lt;/code&gt;-managed updates.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;p&gt;Showcase runs on &lt;strong&gt;Ubuntu 22.04+ (amd64)&lt;/strong&gt; and derivatives. Grab a prebuilt package from the &lt;a href="https://github.com/rabiulislam-xyz/showcase/releases" rel="noopener noreferrer"&gt;Releases page&lt;/a&gt; and install it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# download the .deb from the latest release, then (use apt, it resolves deps):&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install&lt;/span&gt; ./Showcase_&lt;span class="k"&gt;*&lt;/span&gt;_amd64.deb
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Want something portable instead? There's an &lt;strong&gt;AppImage&lt;/strong&gt; on the same release. Just &lt;code&gt;chmod +x&lt;/code&gt; it and run. Or add the signed APT repository once and get updates like any other package (full instructions are in the README).&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;Code, downloads, and docs: &lt;a href="https://github.com/rabiulislam-xyz/showcase" rel="noopener noreferrer"&gt;github.com/rabiulislam-xyz/showcase&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It's MIT-licensed and open source. If the idea clicks for you, a ⭐ genuinely helps it reach more people. &lt;strong&gt;Installing&lt;/strong&gt; apps, not just managing what's already there, is next on the roadmap, and issues/PRs are very welcome.&lt;/p&gt;

&lt;p&gt;If you've ever stared at some app you didn't recognize and wondered how on earth to get rid of it, that's exactly the itch Showcase scratches.&lt;/p&gt;

</description>
      <category>linux</category>
      <category>rust</category>
      <category>showdev</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
