On the screen
Mobile apps
A mobile app is software people install on an Android phone or an iPhone, usually from Google Play or Apple's App Store. Compared with a website, an app can work offline, send push notifications, make fuller use of the camera, location and sensors, and live on the home screen.
There are three broad ways to build one: native (Kotlin for Android, Swift for iOS, one codebase each), cross-platform frameworks such as Flutter, React Native and Kotlin Multiplatform that share most of the code, and web apps wrapped in a native shell with Capacitor or a TWA. Whichever route you choose, each store still has to review and approve a signed build before it reaches users.
34 terms · 5 comparisons · prices checked September 2026
34 terms, click any to open
Native Android
Android
PlatformGoogle's operating system for phones and tablets, used by many manufacturers such as Samsung, Xiaomi and Google itself, and running most of the world's smartphones.
Android is built on the Linux kernel, and its core is open source as the Android Open Source Project (AOSP). Most phones sold outside China also carry Google Mobile Services, the proprietary layer that includes Google Play, Play services, Maps and push messaging through Firebase Cloud Messaging. Apps are written in Kotlin (or Java) against the Android SDK and run on the Android Runtime (ART). Publishing on Google Play costs a one-time $25.
The variety is both the strength and the challenge: thousands of device models, screen sizes and Android versions, with manufacturers adding their own skins and battery rules. Apps can come from Google Play, other stores such as Samsung's Galaxy Store, or direct downloads (sideloading). From 30 September 2026 Google starts requiring apps on certified devices to be registered by verified developers, beginning with installs from major stores in Brazil, Indonesia, Singapore and Thailand and extending to all apps worldwide in 2027.
Related
Also called: Android OS, AOSP
Jetpack Compose
FrameworkOpen sourceAndroid's modern toolkit for building screens in Kotlin code: you describe what the interface should look like for the current data, and Compose redraws it when the data changes.
A Compose screen is made of composable functions, Kotlin functions marked @Composable that emit interface elements such as Text, Button and LazyColumn (a scrolling list). They read state, and when that state changes Compose re-runs only the affected functions, a process called recomposition. There are no XML layout files and no manual view updates, which removes a whole class of bugs where the screen and the data drift apart.
Google recommends Compose for new Android apps. It replaces the older View system (XML layouts), although the two can live side by side in one app. Material 3 components, animation, navigation and Android Studio previews are built around it. The same model runs on Wear OS and Android TV, and JetBrains' Compose Multiplatform brings it to iOS, desktop and the web.
Pros
- Less code than XML layouts, all in Kotlin
- State-driven, so the screen always matches the data
- Live and interactive previews in Android Studio
- Works alongside existing View-based screens, so migration can be gradual
- Shares its model with Compose Multiplatform for iOS and desktop
Cons
- Recomposition and state rules take time to understand
- Careless state handling can make screens slow or janky
- Android-only unless you adopt Compose Multiplatform
Pick it when
- Any new native Android app
- Modernising an existing app screen by screen
- Android teams that may later share UI with iOS through Compose Multiplatform
Skip it when
- One shared codebase for both platforms matters most and the team knows Dart or JavaScript
What it costs · Open source
Free (Apache 2.0).
Approximate, checked September 2026.
Related
Also called: Compose, Compose UI
Open Jetpack Compose as a pageOfficial site (opens in a new tab)
Android Studio
ToolFreeGoogle's official program for writing, running and debugging Android apps, with a built-in phone emulator, design previews and performance tools.
Android Studio is an IDE (integrated development environment) built on JetBrains' IntelliJ IDEA. It bundles the Android SDK tools, the Gradle build, the Android Emulator for running virtual phones, tablets and watches, Compose previews, a Layout Inspector, Logcat for reading app logs, profilers for memory, CPU and battery, and the APK Analyzer. Gemini in Android Studio adds AI help for writing code and explaining crashes.
It runs on Windows, macOS, Linux and ChromeOS, and it is also the usual place to open the Android half of a Flutter, React Native or Capacitor project. Signing a release build and producing an AAB for Google Play can be done from its menus.
What it costs · Free
Free on Windows, macOS, Linux and ChromeOS.
Approximate, checked September 2026.
Open Android Studio as a pageOfficial site (opens in a new tab)
Material Design 3
ConceptOpen sourceGoogle's design system for Android and the web: a shared set of rules and ready-made components for colour, type, spacing, buttons, cards and motion.
Material Design 3, also called Material You, defines components such as buttons, cards, navigation bars and dialogs, and a colour system built from tokens (named roles such as primary and surface). On Android 12 and later, dynamic colour can build an app's palette from the user's wallpaper. Material 3 Expressive, a 2025 update, adds bolder shapes, springier motion and more ways to give elements emphasis.
Developers use it through libraries: Compose Material 3 on Android, Material Components for the older View system, and Flutter's built-in Material widgets. Following it makes an app feel at home on Android. iPhone apps normally follow Apple's Human Interface Guidelines instead, which is why cross-platform apps often adapt their look to each platform.
What it costs · Open source
Free: public guidelines and open-source component libraries (Apache 2.0).
Approximate, checked September 2026.
Also called: Material 3, M3, Material You, Material 3 Expressive
Open Material Design 3 as a pageOfficial site (opens in a new tab)
Android building blocks
Coroutines and Flow
LibraryOpen sourceKotlin's way of writing code that waits, for a network call or a database read, without freezing the screen, plus Flow for streams of values that change over time.
A suspend function can pause at a slow call and resume later without blocking a thread, so asynchronous code reads top to bottom like ordinary code instead of nested callbacks. Coroutines run in scopes tied to a lifetime, such as viewModelScope for a screen's ViewModel, and are cancelled automatically when that scope ends (structured concurrency). Dispatchers choose where work runs: Main for the interface, IO for disk and network.
Flow is a stream of values over time: a Room query that re-emits when rows change, search results as the user types, a download's progress. StateFlow holds the current UI state that Compose screens observe. Both come from JetBrains' kotlinx.coroutines library, work in Kotlin Multiplatform, and have largely replaced callbacks and RxJava in new Android code.
What it costs · Open source
Free (Apache 2.0).
Approximate, checked September 2026.
Related
Also called: kotlinx.coroutines, suspend functions, Flow, StateFlow
Open Coroutines and Flow as a pageOfficial site (opens in a new tab)
Gradle
ToolOpen sourceThe build tool that turns an Android project's code, libraries and resources into an installable app, and downloads the libraries the project depends on.
Gradle runs tasks described in build scripts, now usually written in Kotlin (build.gradle.kts). The Android Gradle Plugin (AGP) adds the Android-specific steps: compiling Kotlin, running KSP, merging resources, shrinking code with R8, signing, and packaging an APK or AAB. Build variants combine build types (debug, release) with product flavours (free, paid) from one project.
Dependencies are declared by name and version and fetched from repositories such as Maven Central and Google's Maven; a version catalog (libs.versions.toml) keeps those versions in one file. The Gradle wrapper (gradlew) pins the Gradle version so every machine builds the same way. Gradle also builds Java, Kotlin Multiplatform and Spring projects, and its build cache and configuration cache help with slow builds.
What it costs · Open source
Free (Apache 2.0).
Approximate, checked September 2026.
Related
Also called: Android Gradle Plugin, AGP, build.gradle.kts, version catalog
Hilt and Dagger
LibraryOpen sourceLibraries that hand each part of an Android app the objects it needs, such as a database or an API client, instead of every class creating its own, with the wiring checked while the app compiles.
Dependency injection (DI) means a class declares what it needs, typically in its constructor, and something else supplies it. Dagger does this with generated code: annotations such as @Inject and @Module describe how to build each object, and a code generator writes the wiring at build time, so a missing dependency is a compile error rather than a crash. Hilt, from Google, sits on top of Dagger and removes most of its setup on Android.
With Hilt you annotate the Application class with @HiltAndroidApp, screens with @AndroidEntryPoint and ViewModels with @HiltViewModel; modules marked @InstallIn tie each object to a lifetime, such as the whole app or a single screen. Tests can swap in a fake repository. Dagger and Hilt support KSP, which builds faster than the older kapt. Hilt is Android-only, so Kotlin Multiplatform projects often use lighter options such as Koin.
Pros
- Mistakes in the wiring show up at compile time, not in users' hands
- Standard Android integration for activities, ViewModels and WorkManager
- Makes swapping in fakes for tests straightforward
- Generated code is fast at runtime, with no reflection
Cons
- Annotations and generated code add build time
- Error messages can be long and hard to read
- A lot of concepts for a small app
- Android-only; shared Kotlin Multiplatform code needs another approach
Pick it when
- Medium to large Android apps with many screens and shared services
- Teams that write unit tests and want easy fakes
Skip it when
- A small app, where passing objects by hand is simpler
- Shared Kotlin Multiplatform code, where Koin or manual wiring fits better
What it costs · Open source
Free (Apache 2.0).
Approximate, checked September 2026.
Also called: Hilt, Dagger, dependency injection, DI
Open Hilt and Dagger as a pageOfficial site (opens in a new tab)
KSP
ToolOpen sourceA Kotlin tool that lets libraries such as Room and Hilt generate code from annotations during the build, faster than the older kapt.
Many libraries work by reading annotations in your code and generating the repetitive parts: Room writes the database plumbing for a DAO, Hilt writes the dependency wiring. kapt did this by first generating Java stubs so that Java annotation processors could run, which was slow. KSP, made by Google, reads Kotlin code directly, and Google reports it can be up to twice as fast.
kapt is in maintenance mode, so projects move to KSP by swapping kapt(...) for ksp(...) in the Gradle file once every processor they use supports it. KSP also works in Kotlin Multiplatform, which kapt never did, and Room 3 requires it.
What it costs · Open source
Free (Apache 2.0).
Approximate, checked September 2026.
Also called: Kotlin Symbol Processing, kapt, annotation processing
Room
LibraryOpen sourceGoogle's library for storing data on the device in a SQLite database, with queries checked while the app compiles and results that update the screen when the data changes.
You describe tables as Kotlin data classes marked @Entity, and queries in a DAO (data access object) interface as functions with SQL in an @Query annotation. At build time Room's code generator, running under KSP, checks every query against the schema, so a misspelt column breaks the build instead of the app, and writes the code that maps rows to objects.
Queries can return a Flow, so a list on screen refreshes by itself when rows change. Schema changes are handled with migrations, many of which Room can generate automatically. Room gained Kotlin Multiplatform support, running on Android, iOS and desktop, and Room 3, released in 2026, is Kotlin-first, requires KSP and coroutines, and adds JavaScript and WebAssembly targets.
Pros
- SQL mistakes are caught at compile time
- Observable queries (Flow) keep the interface in sync with the data
- Handles migrations, transactions and threading for you
- Works in Kotlin Multiplatform, not only on Android
Cons
- Still needs SQL knowledge for anything beyond simple queries
- Code generation adds build time
- Each schema change needs a migration, or the update crashes or wipes local data
Pick it when
- Structured data kept on the device: offline lists, caches, drafts, history
- Apps that search, sort or relate records stored locally
Skip it when
- A few settings or flags, where DataStore is simpler
- Data that only lives on the server and is fetched fresh every time
What it costs · Open source
Free (Apache 2.0).
Approximate, checked September 2026.
Related
Also called: Room database, androidx.room, Room 3
DataStore
LibraryOpen sourceAndroid's library for saving small bits of data such as settings, a theme choice or an onboarding flag, replacing the older SharedPreferences.
Preferences DataStore stores key-value pairs; Proto DataStore stores a typed object defined with Protocol Buffers. Both read and write asynchronously with coroutines and expose data as a Flow, so a settings screen updates as soon as a value changes and nothing blocks the main thread, a common cause of freezes with SharedPreferences.
Writes are transactional, so a crash halfway through cannot leave a corrupted file. It is meant for small data: anything with many records, relationships or queries belongs in Room. DataStore also works in Kotlin Multiplatform. It does not encrypt anything by itself, so tokens and other secrets should be encrypted with a key from the Android Keystore.
What it costs · Open source
Free (Apache 2.0).
Approximate, checked September 2026.
Related
Also called: Jetpack DataStore, Preferences DataStore, Proto DataStore, SharedPreferences
WorkManager
LibraryOpen sourceAndroid's library for background jobs that must happen eventually, such as uploading a photo or syncing data, even if the user leaves the app or restarts the phone.
You describe a unit of work (a Worker class) and the conditions for running it, such as only on Wi-Fi, only while charging, or with retries and back-off if it fails. WorkManager stores the request in its own database and hands it to the system scheduler, so it survives app restarts and reboots. Jobs can be one-off or periodic (every 15 minutes at the shortest), chained together, and tagged for tracking.
It is for deferrable work that must get done, not for exact timing: an alarm at 7:00 needs AlarmManager, and a long task the user is watching, such as music playback, needs a foreground service. Android limits background activity to save battery, and some manufacturers restrict it further, so WorkManager is Google's recommended way to get guaranteed work done.
What it costs · Open source
Free (Apache 2.0).
Approximate, checked September 2026.
Related
Also called: Jetpack WorkManager, background work, background jobs
Open WorkManager as a pageOfficial site (opens in a new tab)
Glance
LibraryOpen sourceA Jetpack library for building Android home-screen widgets with Compose-style Kotlin code instead of the older XML layouts.
Widgets do not run inside your app: the launcher draws them from a description called RemoteViews, which supports only a limited set of layouts. Glance lets you write that description with composable functions such as Column, Row, Text, Image and Button, then translates it into RemoteViews. It supports Material 3 theming, including dynamic colour, and actions that open the app or run a callback.
Because of RemoteViews, Glance composables are not the same as Compose ones: there is no custom drawing, animation is limited, and the component set is separate. Widgets update when the app pushes new data or on a schedule, often through WorkManager, and Android limits how often they refresh to save battery.
What it costs · Open source
Free (Apache 2.0).
Approximate, checked September 2026.
Also called: Jetpack Glance, app widgets, home-screen widgets
OkHttp and Retrofit
LibraryOpen sourceThe usual pair of libraries Android apps use to talk to web servers: OkHttp sends the HTTP requests, and Retrofit turns an API into simple Kotlin functions.
OkHttp, from Square, is an HTTP client that handles connection reuse, HTTP/2, compression, caching, retries, timeouts and WebSockets. Interceptors let an app add an auth header to every request, log traffic or refresh an expired token in one place, and certificate pinning can restrict which server certificates the app trusts.
Retrofit sits on top: you write an interface with one annotated function per endpoint (for example @GET with a path), and Retrofit generates the networking code, turning JSON into Kotlin objects through a converter such as kotlinx.serialization, Moshi or Gson. Both target the JVM and Android, so Kotlin Multiplatform code usually uses Ktor's HTTP client for the same job.
What it costs · Open source
Free (Apache 2.0).
Approximate, checked September 2026.
Related
Also called: OkHttp, Retrofit, HTTP client
Open OkHttp and Retrofit as a pageOfficial site (opens in a new tab)
kotlinx.serialization
LibraryOpen sourceJetBrains' library for turning Kotlin objects into JSON (and other formats) and back, with the conversion code generated at compile time.
Mark a data class @Serializable and a Kotlin compiler plugin generates its serializer, so encoding and decoding need no reflection. That makes it fast, friendly to R8 shrinking, and usable on every Kotlin Multiplatform target, unlike reflection-based libraries such as Gson. JSON is the main format; Protobuf, CBOR and others are available.
Options cover real-world APIs: ignoreUnknownKeys for servers that add fields, default values for missing ones, @SerialName for fields named differently on the wire, and polymorphic types. Ktor and supabase-kt use it, and Retrofit has a converter for it.
What it costs · Open source
Free (Apache 2.0).
Approximate, checked September 2026.
Related
Also called: kotlinx-serialization, @Serializable
Open kotlinx.serialization as a pageOfficial site (opens in a new tab)
supabase-kt
LibraryOpen sourceA Kotlin Multiplatform client library for Supabase, letting Android (and iOS or desktop) apps use Supabase's database, sign-in, storage and realtime features.
supabase-kt is split into modules you add as needed: postgrest-kt for querying tables, auth-kt for sign-in, storage-kt for files, realtime-kt for live changes and functions-kt for Edge Functions. It is built on Ktor and kotlinx.serialization, with coroutines and Flow throughout, and targets Android, iOS, desktop JVM and the web.
It is maintained by the Supabase community rather than by Supabase itself, although the official docs include its reference. Because the app talks to the database directly with the public key, row level security policies on every table are what keep the data safe.
What it costs · Open source
Free (MIT). The Supabase service it connects to has a free plan and paid plans.
supabase-kt pricing (opens in a new tab)Approximate, checked September 2026.
Related
Also called: Supabase Kotlin, supabase-kotlin
Open supabase-kt as a pageOfficial site (opens in a new tab)
Credential Manager
APIOpen sourceAndroid's single sign-in API, which lets users log in with a passkey, a saved password or their Google account from one system sheet.
Instead of separate libraries for passwords, passkeys and Google sign-in, an app makes one getCredential call and Android shows a bottom sheet listing what the user has saved for that app. It also saves new passwords and creates passkeys. From Android 14 it works with third-party password managers as well as Google Password Manager, and it replaces the deprecated Google Sign-In, One Tap and Smart Lock APIs.
Passkeys need a Digital Asset Links file (assetlinks.json) on the website, so the app and the site can share credentials. The sheet only hands the app a credential: the app still sends the resulting ID token or passkey response to its server, which must verify it before starting a session.
What it costs · Open source
Free (Apache 2.0), part of Android Jetpack.
Approximate, checked September 2026.
Related
Also called: Jetpack Credential Manager, androidx.credentials, Sign in with Google
Open Credential Manager as a pageOfficial site (opens in a new tab)
R8 and ProGuard
ToolFreeTools that shrink an Android release build by removing unused code and renaming what is left, making the app smaller, a little faster and harder to reverse-engineer.
R8 is the Android build's code shrinker. With isMinifyEnabled switched on for release builds, it removes classes and methods nothing uses, optimises the rest, renames classes and members to short meaningless names (obfuscation), and converts the result into the DEX format Android runs. isShrinkResources then drops unused images and layouts. ProGuard, from Guardsquare, is the older tool R8 replaced, and its rule syntax lives on in proguard-rules.pro files.
Code reached only through reflection, or JSON parsed by field name, can be removed or renamed by mistake, so libraries ship keep rules and apps add their own; testing the release build, not only debug, catches this. R8 writes a mapping.txt file that turns obfuscated crash stack traces back into readable ones, and Play Console can use it to show readable crash reports. Obfuscation slows reverse engineering but does not stop it.
What it costs · Free
Free. R8 ships with the Android Gradle plugin, and ProGuard is open source (GPL 2.0).
Approximate, checked September 2026.
Also called: R8, ProGuard, minify, code shrinking
Open R8 and ProGuard as a pageOfficial site (opens in a new tab)
Native iOS
iOS
PlatformApple's operating system for the iPhone (with iPadOS, its close sibling, on the iPad). It runs only on Apple devices.
iOS apps are written in Swift (or the older Objective-C) with SwiftUI or UIKit, built in Xcode, and run in a sandbox with strict rules on background work, permissions and privacy, such as asking before tracking users across other companies' apps. Apple makes both the hardware and the software, so there are far fewer device models and system versions to test than on Android, and most users update quickly.
Building an iOS app needs a Mac with Xcode (or a cloud build service), and publishing needs the Apple Developer Program at $99 a year. Apps reach users through the App Store after App Review; in the EU and Japan, local laws also allow alternative app marketplaces. Push notifications go through APNs (Apple Push Notification service).
Also called: iPhone, iPadOS, iPhone OS
SwiftUI
FrameworkFreeApple's modern framework for building app screens in Swift: you describe the interface for the current data, and it updates the screen when the data changes, on iPhone, iPad, Mac, Watch, TV and Vision Pro.
A SwiftUI view is a Swift struct whose body combines smaller views: Text, Image, Button, List, and stacks for layout. State is declared with property wrappers and macros such as @State and @Observable, and when it changes SwiftUI recomputes the affected views. Xcode Previews show the result live while you type.
Introduced in 2019, SwiftUI is the framework Apple now builds around, and some features, such as widgets and Live Activities, can only be built with it. UIKit, the older imperative framework, still powers much of iOS and fills gaps, and the two interoperate, so a SwiftUI app can host a UIKit view and the reverse. Newer SwiftUI features only work on recent iOS versions, which limits them in apps that support older phones.
Pros
- Much less code than UIKit for most screens
- One framework across iPhone, iPad, Mac, Apple Watch, Apple TV and Vision Pro
- Live previews in Xcode
- The only way to build widgets and Live Activities
Cons
- Newer features need recent iOS versions
- Complex or unusual layouts sometimes still need UIKit
- Apple platforms only
Pick it when
- Any new native iPhone or iPad app
- Apps that should also run on Mac, Apple Watch or Vision Pro
Skip it when
- The app must support much older iOS versions
- One shared codebase for Android and iOS matters more than native polish
What it costs · Free
Free with Xcode; publishing apps needs the Apple Developer Program.
Approximate, checked September 2026.
Also called: Swift UI
Xcode
ToolFreeApple's free program for building apps for iPhone, iPad, Mac, Apple Watch and Apple TV. It runs only on a Mac.
Xcode bundles the Swift compiler, a code editor, SwiftUI previews, Interface Builder, the iOS Simulator, the Instruments profiler and the tools that sign apps and upload them to App Store Connect. Every iOS build, including those from Flutter, React Native or Capacitor projects, ends up going through Xcode's build tools.
Signing uses certificates and provisioning profiles, which Xcode can manage automatically for a developer account. Xcode Cloud, Apple's CI service, builds and tests in the cloud and delivers builds to TestFlight. Teams without a Mac rely on cloud Macs or services such as EAS Build.
What it costs · Free
Free from the Mac App Store. Xcode Cloud includes 25 compute hours a month with the Apple Developer Program; 100 hours cost about $50 a month.
Xcode pricing (opens in a new tab)Approximate, checked September 2026.
Related
TestFlight
ServiceFreeApple's service for sending test versions of an iPhone, iPad or Mac app to testers before it goes on the App Store.
Builds uploaded to App Store Connect can go to up to 100 internal testers (members of your team) straight away, and to up to 10,000 external testers by email or public link once the first build has been approved by Apple's beta review. Testers install the TestFlight app, get notified about new builds, and can send screenshots, feedback and crash reports.
Each build stays testable for 90 days. Unlike Google Play with new personal accounts, Apple has no minimum closed-testing period before release, but the final version still goes through full App Review.
What it costs · Free
Included in the Apple Developer Program ($99 a year, about ₹9,000); no extra charge.
Approximate, checked September 2026.
Cross-platform
Flutter
FrameworkOpen sourceGoogle's toolkit for building apps for Android, iOS, the web and desktop from one codebase in the Dart language, drawing every pixel itself so the app looks the same everywhere.
Flutter apps are trees of widgets written in Dart. Rather than using the platform's own buttons and lists, Flutter paints its own interface with its rendering engine (Impeller, now the default on iOS and most Android devices), so a screen looks identical on every phone. Release builds are compiled ahead of time to native machine code, and during development hot reload shows code changes in the running app almost instantly.
It ships two widget sets, Material (Android style) and Cupertino (iOS style), and pub.dev hosts packages for cameras, maps, payments and much more. Native features no package covers are reached through platform channels, small bridges to Kotlin or Swift code. The same code can target the web, Windows, macOS and Linux, although web output is heavier and less search-friendly than a normal website.
Pros
- One codebase for Android and iOS, with desktop and web as options
- Pixel-identical interface on every device, with smooth animation
- Hot reload makes design changes quick to try
- Large package ecosystem and strong tooling from Google
Cons
- Dart is a language few developers know beforehand
- Does not use native controls, so the platform look must be imitated
- Larger minimum app size than a native app
- Web builds are heavy and weak for SEO
Pick it when
- One team building the same app for Android and iOS
- Custom, brand-heavy interfaces with a lot of animation
- An MVP that must reach both stores quickly
Skip it when
- The app leans on brand-new platform features from day one
- A web team that wants to share code with an existing React site
What it costs · Open source
Free (BSD 3-Clause).
Approximate, checked September 2026.
Related
Also called: Flutter SDK
React Native
FrameworkOpen sourceMeta's framework for building Android and iOS apps with React and JavaScript or TypeScript, where your components become real native buttons, lists and text.
You write React components (View, Text, Pressable, FlatList) and React Native renders them as the platform's own views, so a list is a real native list. JavaScript runs in Hermes, an engine built for mobile, and since late 2025 the framework runs only on its New Architecture: the Fabric renderer and TurboModules reach native code directly through JSI instead of the old asynchronous bridge.
Most new projects start with Expo, which the React Native docs recommend. Web developers can reuse React skills, state libraries and some business logic. Because the JavaScript bundle can be replaced without a store release, over-the-air updates can ship fixes quickly within store rules. Meta, Microsoft and Shopify use it in production apps.
Pros
- Uses React and JavaScript or TypeScript, which many developers already know
- Real native components, so apps feel at home on each platform
- Huge npm ecosystem, plus Expo for tooling and cloud builds
- Over-the-air updates for JavaScript changes
Cons
- Native modules and upgrades can be painful without Expo
- Complex animations or heavy computation need care to stay smooth
- Each platform's quirks still surface, so testing on both is essential
Pick it when
- A team with React web experience building for both stores
- Sharing logic or a design system with a React website
- Apps that need frequent fixes shipped through over-the-air updates
Skip it when
- Graphics-heavy games or apps with very demanding animation
- A team that already knows Kotlin or Swift and has no JavaScript background
What it costs · Open source
Free (MIT).
Approximate, checked September 2026.
Related
Also called: RN, React Native CLI
Open React Native as a pageOfficial site (opens in a new tab)
Expo
PlatformFree tierA framework and set of cloud services around React Native that handle the hard parts of mobile development: native setup, builds, store submission and over-the-air updates.
The open-source side is the Expo SDK (ready-made modules for the camera, notifications, files, sensors and more), Expo Router for file-based navigation, and tooling that generates the native Android and iOS projects from a config file, so upgrading React Native is far less painful. Expo Go lets you try an app on a phone by scanning a QR code; apps with custom native code use a development build instead.
EAS (Expo Application Services) is the cloud side: EAS Build compiles Android and iOS apps in the cloud, so an iPhone app can be built without a Mac; EAS Submit uploads builds to the stores; EAS Update pushes JavaScript fixes straight to installed apps; and Workflows automate the pipeline. Each service is optional and can be swapped for local builds or other CI.
Pros
- Removes most native setup and upgrade pain from React Native
- Cloud builds for iOS without owning a Mac
- Over-the-air updates and store submission built in
- Large set of maintained native modules
Cons
- The free build queue can be slow at busy times
- Costs grow with builds and update users on paid plans
- Unusual native needs still require writing native modules
Pick it when
- Almost any new React Native app
- Teams without Mac hardware or native build experience
- Apps that want over-the-air updates
Skip it when
- The app is not built with React Native
What it costs · Free tier
Expo SDK is free (MIT). EAS has a free plan (15 Android and 15 iOS builds a month), Starter at $19 a month and Production at $199 a month, plus usage.
Expo pricing (opens in a new tab)Approximate, checked September 2026.
Related
Also called: Expo SDK, EAS, Expo Router, Expo Go
Kotlin Multiplatform
FrameworkOpen sourceJetBrains' technology for sharing Kotlin code between Android, iOS, desktop, web and servers, from just the business logic up to the whole interface.
Shared code lives in a common module and compiles to each platform's native form: JVM bytecode on Android, a native framework on iOS (through Kotlin/Native), JavaScript or WebAssembly on the web. Where a platform needs its own implementation, expect and actual declarations mark the gap. Ktor, kotlinx.serialization, coroutines, Room, DataStore, SQLDelight and supabase-kt all work in shared code.
Teams choose how much to share. Many keep native interfaces (Jetpack Compose on Android, SwiftUI on iOS) and share networking, storage and business rules; others share the interface too with Compose Multiplatform, whose iOS support became stable in 2025. Google officially supports KMP for sharing logic, and it can be added to an existing Android app one module at a time.
Pros
- Share as much or as little as you like, even one module in an existing app
- Native performance, and native UI where you want it
- Android teams reuse their Kotlin skills and many Jetpack libraries
- Backed by JetBrains and officially supported by Google
Cons
- iOS developers must work with Kotlin code and its build tooling
- Smaller library ecosystem than Flutter or React Native
- iOS builds still need a Mac, and Kotlin/Native builds can be slow
Pick it when
- An existing Android app that is adding iOS
- Apps with complex shared logic such as sync, offline data or business rules
- Teams that want native interfaces but one copy of the logic
Skip it when
- A web-focused team, where React Native or Capacitor fits better
- A team with no Kotlin experience that wants a quick route to both stores
What it costs · Open source
Free (Apache 2.0).
Approximate, checked September 2026.
Also called: KMP, Compose Multiplatform, CMP, KMM
Open Kotlin Multiplatform as a pageOfficial site (opens in a new tab)
Web on phones
Capacitor
FrameworkOpen sourceA tool from the Ionic team that wraps a web app in a real Android and iOS app, with plugins that let the web code use the camera, files, notifications and other phone features.
You build a normal web app with any framework (React, Vue, Angular, Svelte), then Capacitor copies the built files into native Android and iOS projects, where they run in the system WebView. JavaScript calls plugins such as @capacitor/camera, which run native code and return the result. The native projects are ordinary Android Studio and Xcode projects kept in your repository, so custom native code can be added anywhere.
It is the modern successor to Apache Cordova and works with many existing Cordova plugins. Official plugins cover the basics, and community groups such as Capawesome add many more. Ionic's paid cloud services for it (Appflow builds and live updates) stopped taking new customers in 2025 and are due to close at the end of 2027; third parties offer similar services.
Pros
- Reuse an existing web app and web team for mobile
- One codebase for the web, Android and iOS
- Full access to the native projects when a plugin is not enough
- Works with any front-end framework
Cons
- Runs in a WebView, so heavy animation and long lists feel less smooth than native
- Apple rejects apps that are little more than a website in a wrapper
- Plugin quality varies, and some features still need native code
Pick it when
- You already have a web app or PWA and need it in the stores
- Content, forms and business apps rather than graphics-heavy ones
- A small team that knows web development only
Skip it when
- Games or apps with demanding animation and gestures
- The app must feel fully native on each platform
What it costs · Open source
Free (MIT).
Approximate, checked September 2026.
Related
Also called: Capacitor JS, @capacitor/core, Cordova
Ionic
FrameworkOpen sourceA library of mobile-style interface components for web apps (tabs, lists, modals, swipe gestures) that look like iOS or Android, usually paired with Capacitor to reach the stores.
Ionic Framework provides Web Components styled to match each platform automatically: an iPhone gets iOS-style navigation and fonts, an Android phone gets Material Design. It has official packages for Angular, React and Vue, plus page transitions, router integration and gestures, so a web app feels like a mobile app rather than a website.
The company behind it, owned by OutSystems since 2022, pairs it with Capacitor for native access, and both stay free and open source. Its paid products (Appflow, Identity Vault, Auth Connect and others) stopped taking new customers in 2025 and reach their final end of life at the end of 2027. Ionic began as an Angular project and remains popular with Angular teams.
Pros
- Mobile-looking components out of the box, adapting to iOS and Android
- Works with Angular, React and Vue
- Pairs directly with Capacitor for store apps
Cons
- Still a web app in a WebView, with the same performance limits
- The company's paid services are being wound down
- Components can look generic without design work
Pick it when
- A web team that wants a native-feeling interface without designing every control
- Internal business apps and apps built mostly from forms and lists
Skip it when
- A fully custom design, where Capacitor with your own CSS or Tailwind may be simpler
- The app needs native-level smoothness
What it costs · Open source
Free (MIT). Ionic's paid services, including Appflow, closed to new customers in 2025 and are due to shut down at the end of 2027.
Approximate, checked September 2026.
Also called: Ionic Framework, @ionic/react, @ionic/angular, @ionic/vue
Trusted Web Activity (TWA)
ConceptFreeAn Android way to publish a progressive web app on Google Play: the app opens your website full-screen in Chrome, with no browser bar.
A TWA is a tiny Android app that launches your PWA in the user's browser (usually Chrome) without any browser interface, so it looks like a native app while sharing the browser's cookies, storage and service worker. To prove you own the site, the website hosts a Digital Asset Links file (/.well-known/assetlinks.json) containing the app's signing key fingerprint; if that check fails, the address bar appears.
Bubblewrap, a command-line tool, and PWABuilder generate the project and the AAB for Google Play. Changes to the website appear in the app immediately, with no store release. The limits: Android only (iOS has no equivalent), phone features are only those the web platform offers, and the site must meet PWA basics such as a web app manifest and HTTPS.
What it costs · Free
Free tools; publishing still needs a Google Play developer account ($25 one time).
Approximate, checked September 2026.
Related
Also called: TWA, Bubblewrap, PWABuilder
Open Trusted Web Activity (TWA) as a pageOfficial site (opens in a new tab)
WebView
APIFreeA browser component that an app places inside its own screen to show web pages or a whole web-based interface, without opening a separate browser.
Each platform has one: Android System WebView (based on Chromium and updated through Google Play), WKWebView on iOS and macOS (Safari's WebKit engine), WebView2 on Windows (Microsoft Edge's engine) and WebKitGTK on Linux. Apps use them for help pages, checkout flows and embedded content, and frameworks such as Capacitor, Cordova and Tauri use them to run the entire interface.
The app can talk to the page through a JavaScript bridge, which is useful but also a risk: a WebView that loads untrusted pages and exposes native functions to them can be abused. Google blocks its sign-in inside embedded WebViews, and OAuth guidance calls for the system browser (Custom Tabs on Android, ASWebAuthenticationSession on iOS) instead.
What it costs · Free
Free; part of the operating system.
Approximate, checked September 2026.
Related
Also called: Android WebView, WKWebView, WebView2, embedded browser
Publishing
App signing and keystores
ConceptEvery Android and iOS app must be digitally signed by its developer; the signing key proves that each update really comes from the same publisher.
On Android the key lives in a keystore file (.jks) protected by passwords. With Play App Signing, which new apps on Google Play must use, Google keeps the real app signing key and you sign uploads with a separate upload key; if the upload key is lost or leaked, Google can reset it. Before this, losing the key meant never being able to update the app again, so the keystore and its passwords still belong in a password manager and a backup, never in the code repository.
On iOS, signing uses certificates and provisioning profiles issued through the Apple Developer Program, which state which developer, which app and, for test builds, which devices. Xcode and services such as EAS can create and renew them automatically. It is the mobile counterpart of desktop code signing.
Related
Also called: keystore, upload key, Play App Signing, provisioning profile, signing certificate, .jks
APK and AAB
FormatThe two file formats for Android apps: an APK is the package a phone installs, and an AAB (Android App Bundle) is what you upload to Google Play, which then builds tailored APKs for each device.
An APK (Android Package) contains the compiled code, resources and manifest, and can be installed directly, which is how sideloading and most other stores work. An AAB holds everything for every kind of device; Google Play splits it into APKs matched to each phone's screen density, processor and language, so downloads are smaller. Since August 2021, new apps on Google Play must be uploaded as AABs, which also means using Play App Signing.
An AAB cannot be installed on a phone directly. bundletool, Google's command-line tool, turns it into installable APKs for testing, and Play's internal testing track does the same in the cloud. Debug builds for your own devices are still APKs.
Also called: APK, Android App Bundle, .aab, split APKs, bundletool
Google Play Console
ServiceOne-time feeGoogle's website for publishing Android apps on Google Play: uploading builds, running tests, writing the store listing, and watching installs, ratings and crashes.
An app moves through tracks: internal testing (up to 100 testers), closed testing for invited groups, open testing, and production, where a staged rollout can release an update to a percentage of users first. Before launch every app needs a store listing, a content rating questionnaire, a Data safety form describing the data it collects and a target audience declaration, and each release is reviewed, which can take from hours to several days.
A new personal developer account must run a closed test with at least 12 testers opted in for 14 continuous days before it can apply for production access. Organisation accounts, which need a D-U-N-S number (a free company identifier from Dun & Bradstreet), skip that step. Google also raises the minimum target Android version every year, so an app that is never updated eventually stops being offered to new users on newer phones.
Android vitals report crash and ANR (app not responding) rates, which also affect how visible an app is in the store. The registration fee is paid once. The service fee on paid apps, in-app purchases and subscriptions depends on the region: from mid-2026 the US, UK and EEA moved to lower service fees with a separate billing fee, and other regions follow on a published schedule.
Pros
- One-time registration fee, then no yearly charge
- Testing tracks and staged rollouts built in
- Detailed crash, ANR and performance reports (Android vitals)
- Reaches most Android phones worldwide
Cons
- New personal accounts face a 14-day, 12-tester closed test before launch
- Policy forms (Data safety, content rating, permissions) take real time
- Reviews and policy enforcement can be opaque, with slow appeals
Pick it when
- Publishing any Android app to the general public
- Beta testing Android builds with real users before launch
Skip it when
- Apps for a known set of devices, where direct installs or device management are enough
What it costs · One-time fee
A one-time $25 registration fee (about ₹2,350). Service fees on sales vary by region: typically 15% on the first $1M a year and on subscriptions; the US, UK and EEA moved to lower, split fees in 2026.
Google Play Console pricing (opens in a new tab)Approximate, checked September 2026.
Related
Also called: Google Play, Play Store, Play Console, Google Play developer account
Open Google Play Console as a pageOfficial site (opens in a new tab)
App Store Connect
ServicePaidApple's website for publishing apps on the App Store: uploading builds, managing TestFlight, setting prices and in-app purchases, and sending each release to App Review.
Using it requires the Apple Developer Program. Individuals enrol under their legal name, which appears as the seller on the App Store; organisations need a D-U-N-S number and a working company website. Each app needs screenshots, a description, an age rating and privacy details (the 'nutrition label' of what data the app collects), and in-app purchases and subscriptions are set up here too.
Every version, including small updates, goes through App Review against Apple's guidelines, typically within a day or two; a rejection cites a guideline and can be answered or appealed. There is no closed-testing requirement like Google Play's, but review is stricter about minimum functionality, privacy and in-app payments. Phased release spreads an automatic update over seven days, and App Analytics reports downloads, sales and crashes.
Pros
- One storefront and review process reaching every iPhone user
- TestFlight, analytics and phased releases built in
- No closed-test waiting period before a first release
Cons
- A yearly fee, and apps leave the store if the membership lapses
- App Review can reject for guideline reasons that take time to resolve
- Strict rules on in-app payments for digital goods
Pick it when
- Publishing any iPhone, iPad or Mac App Store app
- Beta testing with TestFlight before launch
Skip it when
- A web app or PWA is enough, since Safari can add it to the home screen without the store
What it costs · Paid
$99 a year for the Apple Developer Program (about ₹9,000). Commission is 30%, or 15% in the Small Business Program (under $1M a year) and on subscriptions after year one; some regions have their own terms.
App Store Connect pricing (opens in a new tab)Approximate, checked September 2026.
Related
Also called: App Store, Apple Developer Program, App Review, ASC
Open App Store Connect as a pageOfficial site (opens in a new tab)
Deep links and App Links
ConceptLinks that open a specific screen inside an app instead of a web page, such as a product link that lands on that product in the shopping app.
The simplest form is a custom scheme such as myapp://product/42, but any app can claim a scheme and the link fails when the app is missing. Verified links use ordinary https URLs instead: Android App Links need an assetlinks.json file under /.well-known/ on the website listing the app's signing key fingerprint, and iOS Universal Links need an apple-app-site-association file plus the Associated Domains setting in the app. Since Android 12, web links open in the browser unless the domain is verified.
If the app is not installed, a verified link simply opens the website, which should show the same content. Deferred deep links, which carry the destination through a fresh install, need an attribution service such as Branch or AppsFlyer, since Firebase Dynamic Links shut down in August 2025.
Related
Also called: deep linking, Android App Links, Universal Links, assetlinks.json, apple-app-site-association, deferred deep links
Side by side
Differences
How the options in this area compare on the questions that usually decide the choice.
Native vs Flutter vs React Native vs Capacitor vs PWA
Open as a page: Native vs Flutter vs React Native vs Capacitor vs PWAFive ways to put an app on a phone, from fully native to a website installed from the browser. The trade-off runs between native polish and platform access on one side and one shared codebase on the other.
| Compare | Native (Kotlin or Swift) | Flutter | React Native | Capacitor | PWA |
|---|---|---|---|---|---|
| What it is | Kotlin on Android, Swift on iOS | Dart, draws its own interface | React, rendered as native views | Web app in a native shell | Website installed from the browser |
| Codebases | Two, one per platform | One | One | One, shared with the web | One, the website itself |
| Look and feel | Fully native | Identical everywhere, imitates native | Native components | Web, styled to look native | Web |
| Performance | Full native speed | Near native | Near native for most apps | Fine for forms and content | Depends on the browser |
| Phone features | Everything, from day one | Most, through packages | Most, through modules | Common ones, through plugins | Limited, more on Android than iOS |
| In the app stores | Yes | Yes | Yes | Yes | No store needed; Play via a TWA |
| Team skills | Kotlin and Swift | Dart | JavaScript or TypeScript and React | Any web stack | Any web stack |
| Best for | Demanding, platform-specific apps | Custom, animated interfaces on both stores | React teams shipping to both stores | Existing web apps that need a store presence | Reach without installs or review |
| Watch out for | Twice the work | Dart hiring, larger app size | Native module upgrades | WebView limits, Apple's rule on wrapped websites | iOS limits on push and background work |
How to choose
- Pick native when performance, platform polish or brand-new platform features matter more than development cost.
- Pick Flutter or React Native to ship one app to both stores with a single team: Flutter for custom, animated interfaces, React Native for teams fluent in React.
- Pick Capacitor when a web app already exists and needs to be in the stores, and a PWA when an installable website is enough.
Flutter vs React Native
Open as a page: Flutter vs React NativeThe two most used cross-platform frameworks. Both ship one codebase to Android and iOS; they differ in language and in who draws the interface.
| Compare | Flutter | React Native |
|---|---|---|
| Made by | Meta | |
| Language | Dart | JavaScript or TypeScript with React |
| Who draws the interface | Flutter's own engine (Impeller) | The platform's native views |
| Look | Identical on every device | Native to each platform |
| Performance | Smooth, compiled to machine code | Near native; heavy animation needs care |
| Tooling | Flutter CLI and hot reload | Expo, Fast Refresh and EAS cloud builds |
| Over-the-air updates | Only through third-party services | EAS Update and others |
| Beyond phones | Web, Windows, macOS and Linux | Web through React Native Web; Windows and macOS through Microsoft |
| Hiring | Smaller pool of Dart developers | Large pool of React developers |
How to choose
- Pick Flutter for custom, brand-heavy interfaces that must look the same everywhere, or when desktop targets matter too.
- Pick React Native when the team knows React, when code or skills are shared with a website, or when over-the-air updates matter.
- Both are mature enough for production apps, so team skills usually decide.
Kotlin Multiplatform vs Flutter
Open as a page: Kotlin Multiplatform vs FlutterBoth let one team cover Android and iOS. Kotlin Multiplatform shares code and keeps native interfaces optional; Flutter shares everything, interface included, in Dart.
| Compare | Kotlin Multiplatform | Flutter |
|---|---|---|
| Language | Kotlin | Dart |
| What is shared | Logic, and optionally the interface | Everything, interface included |
| Interface | Native (Compose, SwiftUI) or Compose Multiplatform | Flutter widgets drawn by its own engine |
| Adding to an existing app | Easy, one module at a time | Possible, but usually a rewrite |
| iOS developers | Use a Kotlin framework from Swift | Rarely need to touch Swift |
| Ecosystem | Growing, with Jetpack libraries joining | Large, on pub.dev |
| Best for | Android teams adding iOS | New apps with custom interfaces |
| Backed by | JetBrains, supported by Google |
How to choose
- Pick Kotlin Multiplatform when an Android app or a Kotlin team already exists, or when native interfaces on each platform matter.
- Pick Flutter for a new app where one shared interface and a quick route to both stores matter most.
Capacitor vs TWA vs PWA
Open as a page: Capacitor vs TWA vs PWAThree ways to turn a web app into something people install. They differ in which stores they reach and how much of the phone they can use.
| Compare | Capacitor | TWA | PWA |
|---|---|---|---|
| What it is | Web app bundled in a native shell | Website opened full-screen by Chrome | Website installed from the browser |
| Platforms | Android and iOS | Android only | Any modern browser |
| App stores | Google Play and the App Store | Google Play | None needed |
| Where the code lives | Inside the app package | On your website | On your website |
| Updates | Store release, or a live-update service | Instant: deploy the website | Instant: deploy the website |
| Phone features | Native plugins for most needs | Web APIs only | Web APIs only |
| Offline | Yes, the files are bundled | Through a service worker | Through a service worker |
| Watch out for | Apple rejects thin website wrappers | Needs assetlinks.json and a real PWA | Fewer install prompts and features on iOS |
How to choose
- Pick Capacitor when the app must be in both stores or needs native features the web cannot reach.
- Pick a TWA to put an existing PWA on Google Play with almost no extra code.
- Pick a plain PWA when installing from the browser is enough and store review is not wanted.
Google Play vs the App Store
Open as a page: Google Play vs the App StoreGetting an app onto phones means going through one store per platform. The fees are in the same range; the steps before the first release are not.
| Compare | Google Play | Apple App Store |
|---|---|---|
| Developer fee | $25 once | $99 a year |
| Before the first release | New personal accounts: 14-day closed test with 12 testers | No testing period, but App Review |
| Review | Automated and manual, hours to days | Manual App Review for every version |
| Beta testing | Internal, closed and open tracks | TestFlight, up to 10,000 testers |
| Upload format | AAB, signed with an upload key | Archive built and signed in Xcode |
| Company accounts | Need a D-U-N-S number | Need a D-U-N-S number |
| Commission | About 15% on the first $1M a year; details vary by region | 30%, or 15% for small developers |
| Gradual rollout | Staged rollout by percentage | Phased release over seven days |
| Outside the store | Sideloading allowed; developer verification from 2026 | Only in the EU and Japan, through other marketplaces |
How to choose
- Budget for both stores if the app targets both platforms: $25 once for Google Play and $99 every year for Apple.
- Plan two to three extra weeks for a first Android launch on a new personal account, or register as an organisation to skip the closed test.
- Expect Apple's review to be stricter on design, privacy and payments, and leave slack in the schedule for a possible rejection.
Crafted in the dark. Shipped to the world.
Tell us what you are building. You get a private project space with a proposal and a line-by-line quote within a day.