Progressive Web Apps in 2026
Why Native App Stores Are a Scam
SvelteKit Progressive Web App illustration
I’m 76 years old. I have been in this industry long enough to remember when we thought GOTO statements were a good idea. I have seen every “Paradigm Shift” the tech world has thrown at us over the past 50 years.
But today, if you tell me you are spinning up separate native iOS and Android apps for your new project, I have to ask: do you really enjoy paying a 30% tax just to hand over control of your own product?
Building separate codebases for Apple and Google is the opposite of leveraging. It is like buying a brand-new house in every single city you visit, rather than just driving an RV.
As solopreneurs, we simply don’t have the time or the budget to beg for permission from app store overlords, wait weeks for update approvals, or manage a bloated, multi-platform tech stack.
That is exactly why I moved my entire workflow to Svelte 5 and SvelteKit.
With SvelteKit, you can build a blazing-fast Progressive Web App (PWA) that installs directly on your user’s home screen, runs offline, and completely bypasses the digital tollbooths.
We finally have the tools to build “Glass Box” systems we actually own and control.
Let’s look at why native apps are a trap in 2026, and how SvelteKit gives you the keys to the RV.
The 30% Tax on Your Sanity
Let’s talk about the elephant in the room. When you build a native app, you aren’t just giving up a massive cut of your revenue to Apple or Google; you are giving up your autonomy.
You are wrestling with entirely different languages — or heavy abstractions like React Native — just to get a small icon on a home screen. Doesn’t that sound like “Resume Driven Development” to you?
We are choosing complex ecosystems that look good on a CV instead of tools that respect the machine or our time. We build teetering towers of abstraction and call it “engineering”.
What Exactly is a PWA in 2026?
Think of a Progressive Web App as a website that hit the gym. It looks like an app, it acts like an app, and it installs directly onto your phone.
But under the hood? It’s just standard, beautifully simple web technology.
You bypass the app store reviews.
You stop waiting weeks for an update to clear compliance.
You hit deploy, and your users get the new features instantly.
Why pay rent when you own the land?
Building the “Glass Box”: SvelteKit to the Rescue
This is where “Mechanical Sympathy” comes in. We want a system that aligns seamlessly with the browser.
SvelteKit makes building a PWA almost unfairly easy. Because Svelte 5 uses explicit Runes ($state, $derived) instead of hidden compiler magic, managing your app’s state — even when the user drops cell service and goes offline — is transparent and predictable.
It moves us from a “Black Box” that guesses, to a “Glass Box” that performs. You can see exactly what triggers what.
The Blueprint: Flipping the PWA Switch
So, how do we actually do this without overcomplicating our lives? You don’t need a dedicated mobile team. You just need two simple files:
A Web Manifest (manifest.json): A basic text file that tells the browser your app’s name, points to your logo icons, and sets the theme colors. Drop this directly into your static folder at the root of your project.
A Service Worker (service-worker.js): A tiny JavaScript file that sits in the background, caching your pages and data so the app loads instantly, even on airplane mode. Create this directly inside your src folder. SvelteKit will automatically detect it and compile it.
1. The ID Badge: manifest.json
Think of this file as your app’s driver’s license. Here is a clean, optimized manifest that gets the job done:
JSON
{
“name”: “Your Awesome PWA”,
“short_name”: “MyPWA”,
“start_url”: “/”,
“display”: “standalone”,
“background_color”: “#ffffff”,
“theme_color”: “#1a1a1a”,
“icons”: [
{
“src”: “/icon-192.png”,
“type”: “image/png”,
“sizes”: “192x192”
},
{
“src”: “/icon-512.png”,
“type”: “image/png”,
“sizes”: “512x512”
}
]
}(Note: Just make sure you actually put those two logo images, icon-192.png and icon-512.png, in your static folder!)
2. The Engine: The SvelteKit Service Worker
This is where the real power lives. We are going to tell the browser to cache our files so the app loads instantly.
Script
import { build, files, version } from ‘$service-worker’;
// Create a unique cache name using SvelteKit’s versioning
const CACHE = `cache-${version}`;
const ASSETS = […build, …files];
// 1. INSTALL: Packing the RV for the trip.
self.addEventListener(’install’, (event) => {
async function addFilesToCache() {
const cache = await caches.open(CACHE);
await cache.addAll(ASSETS);
}
event.waitUntil(addFilesToCache());
});
// 2. ACTIVATE: Clearing out the old junk when you update the app.
self.addEventListener(’activate’, (event) => {
async function deleteOldCaches() {
for (const key of await caches.keys()) {
if (key !== CACHE) await caches.delete(key);
}
}
event.waitUntil(deleteOldCaches());
});
// 3. FETCH: Intercepting network requests.
self.addEventListener(’fetch’, (event) => {
if (event.request.method !== ‘GET’) return;
async function respond() {
const url = new URL(event.request.url);
const cache = await caches.open(CACHE);
// Glass Box logic: Check the cache first. If it’s there, serve it instantly.
const cachedResponse = await cache.match(event.request);
if (cachedResponse) return cachedResponse;
// If it’s not in the cache, fetch it from the network and save it for later.
try {
const response = await fetch(event.request);
if (response.status === 200) {
cache.put(event.request, response.clone());
}
return response;
} catch {
// The fallback if they are entirely offline and the page isn’t cached.
return new Response(’You are offline, and this page is not cached.’);
}
}
event.respondWith(respond());
});Look at that code. You don’t need a computer science degree to understand what it’s doing. It installs, it activates, and it fetches. It is a highly readable system that you fully control.
Stop Renting, Start Owning
I’ve watched tech paradigm shifts come and go for half a century. But this one? This is about taking back your autonomy.
True wealth as a creator isn’t built by paying a 30% tax to the app store overlords; it’s built by architecting scalable systems you actually own.
SvelteKit PWAs give you the keys to the RV, letting you park your application directly on your user’s home screen without asking a single gatekeeper for permission.
Why spend your Saturday afternoon fighting undocumented framework magic when you could be shipping real value?
If you’re ready to ditch the “Black Box” and want a proven shortcut, you don’t have to build it from scratch. I’ve packaged up my entire workflow into one straightforward resource.
The Svelte 5 Migration Kit: The “Glass Box” Strategy is available right now for $19. It includes the exact, mechanically sympathetic blueprints I use to transition complex logic into clean, maintainable Svelte 5 code.



