Guide
Do you actually need a native app?
Every page answering this question is written by someone selling one of the answers. So is this one — we build native apps — which is exactly why the section saying "you might not need one" comes first, and means it.
The short version
"An app" means three different things, and most bad decisions in this area come from conflating them.
A responsive web app — a website that works well on a phone, opened in the browser, sent as a link. A wrapped web app — the same website installed on the home screen as a PWA, or packaged for the app stores with a wrapper. A native app — software built for the platform itself, in Swift or Kotlin, with access to everything the operating system offers.
The test that actually decides it: list what your product must do when the user is not looking at it, and what it must touch on the device. Widgets, background sync, sensors, real offline, watch screens — if that list is empty, a web app is probably the right answer and the cheaper one. If it is not empty, no amount of wrapping makes a website do those things.
When a web app is the right answer
More often than this category admits. If your product is any of these, stop reading and build for the web:
A tool people use at a desk. Dashboards, admin panels, internal tools, anything B2B where the phone is the secondary screen. The browser is where this software lives, and an app would be an obligation nobody asked for.
Something you are still validating. A link beats an install. You can put a web app in front of a hundred people this afternoon with nothing to download and no review cycle; changing it takes a deploy, not a resubmission. Almost every product should start here even if it ends native.
Content. Publications, catalogues, marketing, documentation. The web was built for this and remains better at it than any app.
Anything where installation is friction you cannot afford. Every install is a small ask. If your users touch the product once a month, the ask is larger than the product.
The web also gives you things native never will: one build for every device, instant updates, no store between you and your users, and links — the most underrated distribution technology there is.
What a wrapper adds, and what it cannot
The middle path is real and often sensible. A PWA installs from the browser to the home screen: its own icon, full screen, a place in the app switcher. A wrapper like Capacitor or a Trusted Web Activity packages the same web app for the App Store or Google Play, so you get store presence without a second codebase.
For a lot of products that is the correct stopping point. Be clear-eyed about what it is, though: the same website, in different clothes. The wrapper changes where the app appears, not what it can do. The capabilities in the next section stay out of reach, because the code inside is still running in a web view.
Two costs worth knowing before you take this path. Apple applies more scrutiny to apps that are substantially a website, and the risk lands hardest on exactly the simple wrapped apps most likely to try it. And the experience gap — scroll feel, gesture response, keyboard behaviour — does not close with wrapping; users cannot name it, and they notice it.
What only a native app can do
This is the list that decides the question. Each item is an operating-system capability a web view cannot reach, however it is wrapped.
Presence outside your app. Home-screen widgets. Live Activities on the Lock Screen and Dynamic Island. Watch-face complications. Siri and App Intents. The share sheet. These are the surfaces where an app keeps working for someone who has not opened it — and for many products they are worth more than the app itself.
Working when closed. Background sync, scheduled processing, acting on a push notification without being opened. A web app runs when its tab is open; that is the deal.
The device itself. Real camera control, Bluetooth peripherals, NFC, motion and health sensors, the secure enclave. Some of these have partial web APIs with uneven support. Most do not.
Genuine offline. Not a cached shell — a local database, full function on a plane, reconciliation when the network returns.
Feel. The interactive back-swipe that follows your thumb, the rubber-band at the end of a list, how a sheet responds when you drag it halfway and change your mind. This is the difference users report as "it feels cheap" without being able to say why.
And the store, as a feature rather than a gate. Presence where users look for apps, in-app purchases and subscriptions handled by the platform, and the credibility an installed icon carries that a bookmark does not.
If two or more of these describe your product, you need a native app. If none do, you were done two sections ago.
A test you can run in five minutes
Write down your product's three most important moments — the things it absolutely must do well. Then ask of each one:
Does it happen when the user is not looking at the app? A reminder that fires, data that syncs overnight, a glanceable status. Native.
Does it touch hardware beyond the screen? Camera as a feature rather than an upload field, sensors, peripherals. Native.
Must it work with no connection? Not "degrade gracefully" — work. Native.
Is it read, filled in, or reviewed at a desk? Web.
Is the product younger than its first hundred users? Web for now, whatever the long-term answer.
Mixed results are common and have an honest resolution: most companies that need both end up with a web app for the desk and a native app for the pocket, doing different jobs. The mistake is not choosing one — it is building one and expecting it to do the other's job.
If the answer is native, the old objection is gone
The reason this decision used to default to "web, obviously" was cost: a native app meant hiring iOS and Android developers or an agency, twice the codebase, twice the maintenance. That premise has aged.
Modaal builds native apps — real Swift and SwiftUI for iOS, real Kotlin and Jetpack Compose for Android — from plain-language descriptions, using the AI agent you already subscribe to, on your own Mac. The project is a standard Xcode project on your disk from the first build; there is no export step because there is nothing to export from.
For both platforms at once, Duet writes each feature's logic exactly once and renders it natively on each side, with the agreement between the two platforms enforced by tests rather than discipline — the build fails when they disagree. Android is in open beta, with general availability in September 2026.
The honest costs, so this page stays the page it promised to be: you need a Mac with Xcode 26 or newer and about 50 GB free, and you will see code even though you will not write it. And one thing worth knowing before you validate on the web first — a web codebase does not convert into a native one later. They are separate builds. Validating with a web app is still often the right call; just budget for the native app as a build, not a migration.
The Free plan does not expire: one active project, unlimited prompts, one platform, no card. If the five-minute test above came out native, that is a cheap way to find out if it was right.
Frequently asked questions
It installs like one — its own icon, full screen, a place in the app switcher — and for many products that is entirely sufficient. What it is not is native software: the code inside runs in a web view, so operating-system surfaces like widgets, Live Activities, background work and most hardware access remain out of reach.
Not by looking at a screenshot. In the hand, usually yes — scroll deceleration, the interactive back-swipe, keyboard behaviour and sheet gestures are where wrapped apps give themselves away. Users report it as the app feeling slightly off rather than as anything they can name.
Often, with a wrapper like Capacitor. Be aware that Apple applies more scrutiny to apps that are substantially a website, and that the risk is highest for simple apps — precisely the ones most likely to take the wrapper route. Google Play accepts Trusted Web Activities more readily.
Frequently yes — a link beats an install while you are validating, and changing a web app takes a deploy rather than a review cycle. Budget honestly, though: the native app will be a fresh build, not a conversion of your web code. They are different programs that happen to share an idea.
Ask where your users actually are before assuming you do. If the answer really is both, the expensive part is not building twice — it is keeping two implementations in agreement for years. Duet addresses that specifically: the logic is written once, rendered natively on each platform, and parity between the two is enforced by fixtures replayed on both.
The Free plan has no expiry and needs no card: one active project, unlimited prompts, one platform of your choice. Pro is €9 per user per month billed annually, or €15 monthly. You bring the AI subscription you already pay for — Claude, ChatGPT, Gemini and others are supported — and Modaal adds no per-token charge.
Related
- Using an AI Coding Agent With Xcode in 2026What Xcode 26.6 does natively, what is still only in the 27 beta, and where a terminal agent still needs help. Sourced from Apple and Anthropic docs.
- Swift vs React Native in 2026: What ChangedThe real question is not which framework is better — it is what your app needs to do and who is building it. An honest guide, current to August 2026.
- Build Android Apps With Claude CodeClaude Code reaches Android Studio through a JetBrains plugin with a far smaller tool surface than its Xcode integration. What that means in practice.
Start building for free
Build for as long as you want on the Free plan. Only upgrade when you're ready to launch.