Ik heb production apps geshipt in Swift, in Kotlin, in Flutter, en genoeg in React Native overgenomen. Dit is dus geen benchmark post. Het is het antwoord dat ik founders geef die deze week moeten beslissen en het niet twee jaar opnieuw willen zien.
De korte versie
- Flutter als het product op beide platforms hetzelfde gedrag nodig heeft en één team zowel de platformspecifieke integraties als de gedeelde interface kan onderhouden.
- Native als specifieke iOS- of Android-mogelijkheden, systeemintegratie of platformspecifiek gedrag centraal staan en je beide clients kunt bemensen.
- React Native als je al een React-team hebt en de JavaScript- en native-afhankelijkheden goed kunt onderhouden. Neem upgrades en integratiewerk mee in je keuze.
Alles hieronder is waarom.
Native (Swift / Kotlin)
Twee clients betekenen aparte implementatie- en releasewerkzaamheden, maar niet elke projecttaak verdubbelt. Productbeslissingen, een groot deel van het ontwerp en een gedeelde backend kunnen voor beide platforms worden gebruikt. Vraag leveranciers om aan te geven welk werk gedeeld is en wat afzonderlijk wordt gebouwd en getest. Native app-ontwikkeling is nuttig wanneer directe toegang tot platformmogelijkheden onderdeel van de vereisten is.
Wat je krijgt: directe toegang tot de platform-SDK’s die je doelapparaten en ondersteunde OS-versies bieden. Widgets, App Clips, Live Activities, CarPlay, Wear en camera- of ML-integraties hebben elk hun eigen vereisten. Controleer nog steeds de beschikbaarheid, entitlements, het gedrag op apparaten en releasebeperkingen; native kiezen neemt dat werk niet weg.
Kies het wanneer: de app is het product en zijn kwaliteit is de differentiator; je zit in een categorie waar platform features retention drijven; je hebt absolute beste performance en memory behaviour nodig; of je bent groot genoeg dat twee specialist teams normaal zijn.
Flutter
Flutter gebruikt een eigen manier van renderen in plaats van elk native UI-element in te pakken. Daardoor kun je een consistente maatwerkinterface makkelijker delen. Platformconventies en toegankelijkheid vragen nog steeds om bewust ontwerp en tests op elk besturingssysteem. De pagina over Flutter-ontwikkeling licht de implementatie, tests op apparaten en overdracht toe.
Wat je krijgt: gedeelde applicatielogica en een groot deel van de interface op beide platforms. Een gedeelde oplossing kan beide clients verbeteren, maar native integraties, toegankelijkheid en OS-gedrag moeten nog steeds per platform worden getest. Dit past bij designgerichte producten met een bewust gedeelde interface.
Wat het kost: je bent één laag verwijderd van nieuwe OS features, en grotere binaries. Alles diep platform-specifiek betekent een platform channel schrijven — wat prima is, en ook native code die je nu onderhoudt.
Kies het wanneer: twee platforms tellen, het budget is reëel maar eindig, de UI is custom, en je hebt liever één sterk team dan twee dunne.
React Native
Een React-team kan snel productief zijn met React Native, maar bestaande webcode is niet automatisch herbruikbaar als mobiele interface. Controleer de native modules, het onderhoud van packages, het upgradepad en welke engineers daar na de lancering verantwoordelijk voor zijn.
Wat het kost: de dependency surface. Een React Native app is jij plus een lange staart community packages, en hun maintenance is niet jouw keuze. Upgrades zijn de meest voorkomende bron van ongepland werk die ik in overgenomen RN codebases zie.
Kies het wanneer: je hebt een React team en een web product om logica mee te delen. Als je vers zou inhuren, Flutter is meestal de beter bet in 2026.
De kostenvergelijking, concreet
Een bruikbare schatting vergelijkt in elke stack dezelfde flows en acceptatiecriteria. Vraag elke leverancier om gedeeld product- en backendwerk apart te zetten van platformclients, integraties, tests, releasevoorbereiding en doorlopend onderhoud. De vergelijking moet het werk laten zien; een frameworkfactor verbergt dat.
- Leg één briefing vast. Neem voor elke schatting dezelfde gebruikersflows, ondersteunde OS-versies, apparaten en integraties op. Houd optionele functies apart.
- Scheid gedeeld werk van clientwerk. Vraag om ontwerp-, backend- en producttaken naast de iOS- en Android-implementatie, platformintegratie en apparaattests.
- Neem releaseverantwoordelijkheid mee in de prijs. Neem ondertekening, store-indiening, crashmonitoring, updates voor OS-compatibiliteit en de verantwoordelijke persoon mee voor het geval een update een plugin of native module breekt.
- Vergelijk twee platforms met een lancering op één platform. Leg bij een gefaseerde lancering vast welke gebruikers en functies op platform twee wachten en welk bewijs aanleiding geeft voor de volgende investering.
Bij onderhoud wordt de kostenstructuur duidelijker. Tel hoeveel engineers elke client kunnen uitbrengen, welke releasecontroles je herhaalt en hoe vaak afhankelijkheden of OS-wijzigingen platformspecifiek werk vereisen. Zet die aannames naast de bouwschatting in plaats van onderhoud als percentage van de eerste offerte te behandelen.
De inhuurrealiteit die niemand inprijst
De beschikbaarheid van ontwikkelaars hangt af van ervaring, locatie, beloning en de technische eisen van het product. Controleer vóór de keuze welke kandidaten je werkelijk kunt bereiken en welke ervaring nodig is voor native integraties. Een geschikte technologie waarvoor je geen team kunt vinden, vormt een risico voor de oplevering.
Dit is een echte input voor de beslissing en het verschijnt bijna nooit in de technische vergelijking. De beste architectuur die je niet kunt bemannen is slechter dan de goeie architectuur die je kan.
Als je al op een bent en afvraagt of je moet switchelen
Een herbouw kost tijd die ook aan nieuwe productfuncties besteed kan worden. Vergelijk die daarom met reparatie of een stapsgewijze migratie voordat je beslist. Een herbouw is beter te verantwoorden wanneer:
- Je kunt fysiek niet inhuren voor de huidige stack tegen enige redelijke prijs.
- Een platform requirement zal het werk forceren toch binnen twaalf maanden.
- De bestaande codebase faalt de basics — zie de audit checklist — in welk geval je niet herschrijft door het framework.
- Je onderhoudt twee native codebases met een team te klein voor een.
"Onze engineers zouden X liever hebben" staat niet op die lijst, en het is waarom meeste rewrites echt starten.
De vragen die het eigenlijk bepalen
Niet "wat is snelste". Deze:
- Wie onderhoudt dit in twee jaar? Kies de stack waarop je kunt inhuren in je stad of je budget. Een perfecte technische keuze met geen beschikbare engineers is een slechte keuze.
- Hoe custom is het interface? Zware custom favoriseert Flutter. Platform-conventioneel favoriseert native.
- Heb je een platform feature op launchdag nodig? Benoem de exacte API, SDK, het apparaat en het benodigde gedrag. Controleer de huidige ondersteuning en wie het onderhoud in de gekozen technologie verzorgt. Native toegang kan wrapperrisico beperken, maar maakt niet elke integratie eenvoudig.
- Is er een bestaande web app? Als het React is en de logica is echt shareable, wordt React Native's case veel sterker.
- Wat is het echte budget? Vergelijk dezelfde releaseomvang met je werkelijke budget. Als beide platforms niet passen, bepaal dan welk platform eerst verschijnt, waarvan de tweede release afhangt en hoe je de eerste onderhoudbaar houdt.
Wat niet zoveel speelt als je denkt
- Performance op basis van reputatie. Als opstarttijd, framerate, geheugen, achtergrondwerk of apparaatcommunicatie belangrijk is voor je product, meet dan de kritieke flows op doelapparaten voordat je kiest. Algemene uitspraken over een framework vervangen die test niet.
- “Het voelt niet native aan.” Dat geldt meestal voor slechte apps in elk framework. Vaker is het een kwestie van ontwerp en aandacht dan van technologie.
- Voorspellingen over welk framework wint. Bekijk het releasetempo, de ondersteunde afhankelijkheden en het upgradepad dat je daadwerkelijk zou gebruiken. Je team heeft een onderhoudbare keuze nodig, geen voorspelling.
Als je een bestaande app overneemt in plaats van een nieuwe te starten, is de framework vraag secundair — start met wat een audit eigenlijk moet kijken.