Your app has a size problem
Electron gave the world cross-platform apps at the price of shipping Chrome to everyone who downloads them. Hundreds of megabytes for a chat client is not a technical constraint — it is a choice. dumbsms made a different one.
Here is a quick game. Open your Applications folder. Sort by size. Try not to wince.
Slack. Discord. VS Code. Microsoft Teams. These are apps whose entire job is to put text
on a screen and occasionally show you a picture of someone’s cat in a channel called
#random. Their install sizes have no business being what they are.
Slack’s download is about 200 MB. dumbsms is 7.5 MB. At ~5 KB/s — roughly what a 1990s-era 56K modem could optimistically deliver — dumbsms might take 25 minutes to download. I can deal with that. Would you wait 12 hours to download an app like Slack?
The culprit has a name
Most of this bloat traces back to a single architectural decision: Electron.
Electron is a framework that lets you build desktop apps using HTML, CSS, and JavaScript by bundling a full copy of Chromium — the open-source engine behind Chrome — with your app. The pitch is compelling: web developers can ship native desktop apps without learning a new platform. One codebase, every OS.
The cost is that your “app” is actually a browser, running a website, wearing a trenchcoat and pretending to be software.
Every Electron app ships its own private copy of Chrome. Not a shared copy — its own. So if you have Slack, Discord, VS Code, 1Password, Figma, Notion, and Obsidian installed, you have seven copies of Chrome sitting on your disk, none of them talking to each other. That is roughly 2–3 GB of “you already have this” that nobody asked you to carry.
The RAM story is the same. Electron apps eat memory like Chrome tabs because they are Chrome tabs. Open Activity Monitor sometime while your chat apps are just sitting there. On a machine with 8 GB, that is not idle — that is a tenant.
Why it happened
To be fair to Electron: it solved a real problem.
Before Electron, shipping a polished cross-platform desktop app was genuinely brutal. You either wrote it twice (a Cocoa app for Mac, a Win32 app for Windows, something GTK for Linux) or you used cross-platform toolkits like Qt or wxWidgets that never quite felt native anywhere. Web tech was easier to write, faster to iterate on, and the hiring pool was enormous.
So companies made the sensible business decision: ship a web app in a box. Users will download it. Disk is cheap. Developers are expensive.
They were right, on both counts. Users did download it. Disk is cheap. And now we have a generation of “desktop” apps that feel sluggish on machines that can play video games at 120 FPS, because they are running a layout engine designed for web documents.
The new bloat is Electron’s children
Electron at least has an excuse: it predates modern alternatives. Tauri is newer and shinier — it uses the OS’s native WebView instead of a bundled Chromium, which cuts the install size dramatically. But it is still HTML and JavaScript underneath. The app is still a web page. The mental model is still “browser tab with a title bar.”
The Flutter desktop port ships its own rendering engine too. React Native on desktop has similar gravity. Almost every “write once, run anywhere” story has a size and a performance bill hidden in the fine print.
Meanwhile the native Mac apps that Apple promotes — the ones built with SwiftUI or AppKit —
are typically under 20 MB. OmniFocus, a fully-featured task manager, is about 50 MB. NetNewsWire,
an RSS reader that has been around for two decades, is 12 MB. These apps feel fast because they
are fast. They draw pixels the way the GPU wants to draw pixels, not the way Chrome’s layout
engine wants to render a <div>.
What “reasonable” actually looks like
When I built dumbsms I made a deliberate decision: the app should be about the size of a thing that does what it does, nothing more.
dumbsms lets you type texts on your Mac (or Linux box, or Windows machine) using a flip phone as the radio. It talks to the phone over USB or Bluetooth, sends and receives SMS and MMS, and stays out of your way. That is the whole thing.
The macOS binary is under 20 MB. It starts in under a second. Idling, it uses tens of megabytes of RAM — not hundreds. There is no Chromium inside. There is no JavaScript runtime. There is no bundled web server.
It is a Rust binary. It draws its own pixels with iced, a native GUI
library in pure Rust. One cargo build. No bridge between a JavaScript front end and a native
back end. No second runtime to babysit. The dependency is almost boring:
iced = { version = "0.13", features = ["image", "tokio", "advanced"] }
I wanted the app to be as quiet and low-fuss as the phone it serves.
The tradeoff is real, but it is worth it
Electron is not free — in CPU, RAM, disk, or startup time — but the developer experience it buys is genuine. Web tech iteration is fast. The hiring pool is huge. Shipping to three platforms from one codebase is actually cross-platform.
The tradeoff is that every user pays for that developer convenience every time they open the app, every day, forever.
Rust and iced made the opposite tradeoff. The developer experience is harder. The iteration loop is slower. The hiring pool is smaller. The payoff is a binary that starts instantly, uses minimal memory, and runs natively on macOS, Windows, and Linux — not because it emulates a web browser on each, but because it actually compiles to each platform’s native code.
When you install dumbsms, you get dumbsms. Not dumbsms plus Chrome plus a V8 runtime plus a Node.js server process plus the web platform plus several hundred megabytes of your disk that you did not sign up for.
Disk is cheap. Attention is not.
The “disk is cheap” argument is true but incomplete. Disk is cheap. But:
- Boot times are not free. Every megabyte of Electron JavaScript the framework has to parse and JIT-compile is milliseconds of your morning.
- RAM is not free. Open Activity Monitor while your chat apps are sitting idle and count up what they are holding. It will ruin your afternoon.
- Battery is not free. A poorly-behaved Electron app that stays awake when it should sleep is a half-hour of runtime you did not know you were spending.
- Trust is not free. When an app ships a full browser engine, the attack surface you are trusting is enormous — every Chromium vulnerability that ships before the vendor patches it is a vulnerability in that “native” desktop app.
These costs are diffuse, invisible, and individually easy to shrug off. Collectively, across a machine full of over-fed apps, they are what turns a fast computer into one that feels slow.
The flip phone movement is at least partly about rejecting the premise that more is always better. The same instinct applies to software. A tool that does its job in 20 MB is not “limited.” It is finished.
dumbsms is small on purpose. Download it. It will feel different.