Vibe coding SwiftUI apps is quite a lot of enjoyable

This web page was created programmatically, to learn the article in its authentic location you may go to the hyperlink bellow:
https://simonwillison.net/2026/Mar/27/vibe-coding-swiftui/
and if you wish to take away this text from our web site please contact us


Vibe coding SwiftUI apps is quite a lot of enjoyable

twenty seventh March 2026

I’ve a brand new laptop computer—a 128GB M5 MacBook Pro, which early impressions present to be very succesful for working good native LLMs. I received pissed off with Activity Monitor and determined to vibe code up some different instruments for monitoring efficiency and I’m very proud of the outcomes.

This is my second experiment with vibe coding macOS apps—the primary was this presentation app just a few weeks in the past.

It seems Claude Opus 4.6 and GPT-5.4 are each very competent at SwiftUI—and a full SwiftUI app can slot in a single textual content file, which suggests I can use them to spin one thing up with out even opening Xcode.

I’ve constructed two apps up to now: Bandwidther reveals me what apps are utilizing community bandwidth and Gpuer to indicate me what’s occurring with the GPU. At Claude’s suggestion each of those are actually menu bar icons that open a panel full of data.

Bandwidther

I constructed this app first, as a result of I wished to see what Dropbox was doing. It seems to be like this:

Screenshot of Bandwidther macOS app showing two columns: left side displays overall download/upload speeds, a bandwidth graph over the last 60 seconds, cumulative totals, internet and LAN connection counts, and internet destinations; right side shows per-process bandwidth usage sorted by rate with processes like nsurlsessiond, apsd, rapportd, mDNSResponder, Dropbox, and others listed with their individual download/upload speeds and progress bars.

I’ve shared the full transcript I used to construct the primary model of the app. My prompts had been fairly minimal:

Show me how a lot community bandwidth is in use from this machine to the web versus native LAN

(My preliminary curiosity was to see if Dropbox was transferring recordsdata by way of the LAN from my previous laptop or was downloading from the web.)

mkdir /tmp/bandwidther and write a local Swift UI app in there that reveals me these particulars on a stay ongoing foundation

This received me the primary model, which proved to me this was price pursuing additional.

git init and git commit what you may have up to now

Since I used to be about to begin including new options.

Now recommend options we might add to that app, the purpose is to offer as a lot element as attainable regarding community utilization together with by totally different apps

The good factor about having Claude recommend options is that it has a a lot better thought for what’s attainable than I do.

We had a little bit of backwards and forwards fixing some bugs, then I despatched just a few extra prompts to get to the 2 column format proven above:

add Per-Process Bandwidth, relaunch the app as soon as that’s carried out

now add the reverse DNS characteristic however be certain that authentic IP addresses are nonetheless seen too, albeit in smaller typeface

redesign the app in order that it’s wider, I would like two columns—the per-process one on the left and the remaining on the fitting

OK make it a activity bar icon factor, once I click on the icon I would like the app to seem, the icon itself ought to be a neat minimal little factor

The supply code and construct directions can be found in simonw/bandwidther.

Gpuer

While I used to be constructing Bandwidther in a single session I had one other session working to construct an analogous device for seeing what the GPU was doing. Here’s what I ended up with:

Screenshot of the Gpuer app on macOS showing memory usage for an Apple M5 Max with 40 GPU cores. Left panel: a large orange "38 GB Available" readout showing usage of 128.0 GB unified memory, "Room for ~18 more large apps before pressure", a warning banner reading "1.5 GB pushed to disk — system was under pressure recently", a horizontal segmented bar chart labeled "Where your memory is going" with green, blue, and grey segments and a legend, an explanatory note about GPU unified memory, a GPU Utilization section showing 0%, and a History graph showing Available and GPU Utilization over time as line charts. Right panel: a Memory Footprint list sorted by Memory, showing process names with horizontal pink/purple usage bars and CPU percentage labels beside each entry, covering processes including Dropbox, WebKit, Virtualization, node, Claude Helper, Safari, LM Studio, WindowServer, Finder, and others.

Here’s the transcript. This one took even much less prompting as a result of I might use the in-progress Bandwidther for instance:

I wish to understand how a lot RAM and GPU this laptop is utilizing, which is difficult as a result of stuff on the GPU and RAM doesn’t appear to indicate up in Activity Monitor

This collected info utilizing system_profiler and memory_pressure and gave me an answer—extra importantly it confirmed me this was attainable, so I stated:

Look at /tmp/bandwidther after which create an analogous app in /tmp/gpuer which reveals the knowledge from above on an ongoing foundation, or perhaps does it higher

After just a few extra modifications to the Bandwidther app I advised it to catch up:

Now check out latest modifications in /tmp/bandwidther—that app now makes use of a sys tray icon, imitate that

This stays considered one of my favourite methods for utilizing coding brokers: having them recombine parts from different tasks.

The code for Gpuer might be present in simonw/gpuer on GitHub.

You shouldn’t belief these apps

These two apps are basic vibe coding: I don’t know Swift and I hardly glanced on the code they had been writing.

More importantly although, I’ve little or no expertise with macOS internals such because the values these instruments are measuring. I’m utterly unqualified to judge if the numbers and charts being spat out by these instruments are credible or correct!

I’ve added warnings to each GitHub repositories to that impact.

This morning I caught Gpuer reporting that I had simply 5GB of reminiscence left when that clearly wasn’t the case (in accordance with Activity Monitor). I pasted a screenshot into Claude Code and it adjusted the calculations and the brand new numbers look proper, however I’m nonetheless not assured that it’s reporting issues appropriately.

I solely shared them on GitHub as a result of I feel they’re attention-grabbing for instance of what Claude can do with SwiftUI.

Despite my insecurity within the apps themselves, I did be taught some helpful issues from these tasks:

  • A SwiftUI app can get a complete lot carried out with a single file of code—right here’s GpuerApp.swift (880 strains) and BandwidtherApp.swift (1063 strains).
  • Wrapping varied terminal instructions in a neat UI with Swift is definitely achieved.
  • Claude has surprisingly good design style in relation to SwiftUI functions.
  • Turning an app right into a menu bar app is just some strains of additional code as properly.
  • You don’t must open Xcode to construct this type of software!

These two apps took little or no time to construct and have satisfied me that constructing macOS apps in SwiftUI is a brand new functionality I ought to think about for future tasks.


This web page was created programmatically, to learn the article in its authentic location you may go to the hyperlink bellow:
https://simonwillison.net/2026/Mar/27/vibe-coding-swiftui/
and if you wish to take away this text from our web site please contact us