W 2026 roku nową aplikację w React Native zaczyna się zwykle od Expo; poleca je sama dokumentacja React Native. W ostatnim roku Expo porzuciło starą architekturę, przeszło domyślnie na silnik Hermes V1 i ustabilizowało Expo UI: prawdziwe kontrolki SwiftUI i Jetpack Compose pisane w Reakcie. Dzięki niemu wydałem Linkoglota w obu sklepach, pracując na Windowsie, i ani razu nie otworzyłem Xcode ani Android Studio.
W skrócie
- Expo to domyślny sposób pracy z React Native: dokumentacja React Native poleca framework i wskazuje Expo, a 86% uczestników State of React Native 2025 używało Expo CLI.
- Co się zmieniło od SDK 54: prekompilowane buildy iOS, React Compiler w szablonie, koniec starej architektury, domyślny Hermes V1, mniejsze aktualizacje OTA i stabilne Expo UI.
- Natywne narzędzia wygrywają, gdy produktem jest jedna platforma, gdy aplikacja opiera się na funkcjach systemu, jak widżety, albo gdy Twój zespół już pisze w Swifcie lub Kotlinie.
- Mój wybór: aplikację na oba sklepy, robioną przez kogoś, kto zna Reacta i TypeScript, zaczynam w Expo.
Czym jest Expo i dlaczego poleca go React Native?
React Native daje natywne aplikacje na iOS i Androida pisane w Reakcie. Expo to framework zbudowany na React Native. Dokłada CLI, SDK natywnych modułów (aparat, powiadomienia, dźwięk i inne) oraz routing oparty na plikach w Expo Router. EAS, czyli usługi chmurowe Expo, ma darmowy plan. Sam framework nic nie kosztuje: Expo i jego SDK są darmowe i open source na licencji MIT.
Strona „Get Started” w dokumentacji React Native mówi wprost: jeśli budujesz nową aplikację, zespół poleca framework. I wskazuje jeden: Expo, „framework React Native gotowy na produkcję”. Bez frameworka też się da, co ta sama strona przyznaje.
Spośród 926 osób, które w State of React Native 2025 odpowiedziały na to pytanie, 86,18% używało w ostatnim roku Expo CLI, a 47,73% React Native Community CLI.
Jak wydałem aplikację na iPhone'a bez otwierania Xcode?
Linkoglot to moja aplikacja AI do nauki języków, zbudowana w pojedynkę i dostępna w Google Play i App Store od lipca 2026. Zbudowałem ją na komputerze z Windowsem. Xcode wymaga Maca (Xcode 27 instaluje się i działa już tylko na Macach z Apple silicon), a ja nie otworzyłem ani jego, ani Android Studio.
Cała droga szła przez narzędzia Expo:
- 01 Kod TypeScript i React na Windowsie, z Fast Refresh na obu telefonach.
- 02 Generowanie Prebuild tworzy foldery ios i android z konfiguracji aplikacji i pluginów.
- 03 Build EAS Build kompiluje w chmurze; buildy iOS powstają na Macach Expo.
- 04 Testy Development buildy na prawdziwych telefonach, nie Expo Go.
- 05 Wydanie Google Play i App Store, każdy z własną weryfikacją.
W EAS Build buildy iOS powstają na runnerach z macOS w chmurze Expo. We wrześniu 2026 Expo poświęciło tej ścieżce cały wpis, „You don't need a Mac to develop iOS apps”, i dodało symulator iOS w chmurze, na razie dostępny tylko dla wybranych (limited-access preview).
Testów nie dało się zrobić z samego komputera, a Expo Go nie wystarczało. Expo Go to aplikacja ze sklepu, która uruchamia Twój projekt tylko z tym kodem natywnym, który już w sobie ma; według FAQ Expo własnego kodu natywnego nie da się do niej wgrać. Płatności, powiadomienia push na Androidzie i rozszerzenie powiadomień na iOS w Linkoglocie wymagają development builda, czyli własnej aplikacji z narzędziami deweloperskimi Expo w środku.
Do testów kupiłem więc iPhone'a; telefon z Androidem już miałem. Expo Go nie trafia już nawet do sklepów przy każdym SDK: wersji dla SDK 56 nie ma ani w App Store, ani w Google Play.
Co zmieniło się w Expo od SDK 54?
Expo wydaje nowe SDK co kilka miesięcy, każde związane z konkretną wersją React Native:
| Wydanie | Co się zmieniło |
|---|---|
| SDK 54, 10.09.2025, React Native 0.81 | Prekompilowany React Native na iOS, React Compiler włączony w szablonie, natywne zakładki z Liquid Glass (beta), ostatnie SDK ze starą architekturą |
| SDK 55, 25.02.2026, React Native 0.83 | Stara architektura usunięta, natywne zakładki w domyślnym szablonie, Expo UI dla Jetpack Compose w becie, aktualizacje różnicowe jako opcja |
| SDK 56, 21.05.2026, React Native 0.85 | Domyślny Hermes V1, stabilne Expo UI, aktualizacje różnicowe włączone domyślnie, Expo Router bez React Navigation, pliki dla agentów AI w nowych projektach |
| SDK 57, 30.06.2026, React Native 0.86 | Małe wydanie na React Native 0.86, który ma być bez zmian niekompatybilnych wstecz; późniejsza poprawka usuwa problem z pamięcią w Hermesie V1 z SDK 56 |
| SDK 58 beta, 15.09.2026, React Native 0.88 RC | Zbudowane pod iOS 27, Expo Modules 2.0 w becie |
Kilka pojęć. „Stara architektura” to pierwotny most między JavaScriptem a kodem natywnym w React Native. Natywne zakładki używają paska zakładek danej platformy, a aktualizacje różnicowe wysyłają tylko to, co zmieniło się w JavaScripcie. Wersja 0.82 była pierwszą wersją działającą w całości na nowej architekturze, a w ankiecie z 2025 roku 733 z 932 osób miało już migrację za sobą.
Co przyspieszyło?
- Buildy iOS. Od SDK 54 React Native na iOS przychodzi prekompilowany. Expo zmierzyło, że czysty build testowej aplikacji React Native spadł z około 120 do 10 sekund na M4 Max. Od razu też uprzedziło, że w Twojej aplikacji raczej nie zobaczysz dziesięciokrotnej różnicy. SDK 56 zrobiło to samo z modułami Expo: mediana czystego buildu iOS spadła o około minutę (~16%).
- Start aplikacji. Hermes V1 został domyślnym silnikiem w React Native 0.84, a w Expo w SDK 56; ma przyspieszać start aplikacji. Publiczne liczby pochodzą z jednej prawdziwej aplikacji, Expensify, z wpisu o 0.82: czas do interaktywności krótszy o 2,5% na iOS i o 7,6% na słabszym telefonie z Androidem.
- Aktualizacje. EAS Update wysyła teraz tylko różnicę między dwoma bundlami JavaScriptu. W ciągu doby przed wpisem o SDK 56 takie paczki były średnio o 58% mniejsze od pełnych bundli, które zastępowały.
- Re-rendery. React Compiler memoizuje komponenty i wartości podczas builda, więc ręcznych
useMemoiuseCallbackpiszesz mniej. Każdy nowy projekt ma go włączonego.
Czym jest Expo UI?
Expo UI to zestaw komponentów, którymi budujesz interfejs bezpośrednio w Jetpack Compose i SwiftUI, prosto z Reacta. Od SDK 56 części dla SwiftUI i Compose są stabilne; część webowa nadal jest eksperymentalna. Expo podsumowuje to tak: Expo UI po prostu udostępnia jako komponenty Reacta to, co iOS i Android mają już wbudowane.
Oficjalny przykład, przycisk SwiftUI w komponencie Reacta:
import { Host, Button } from '@expo/ui/swift-ui';
export function SaveButton() {
return (
<Host style={{ flex: 1 }}>
<Button label="Save changes" />
</Host>
);
}
Host to granica: wszystko w środku układa SwiftUI albo Compose, a nie flexbox React Native. Modyfikatory importujesz z @expo/ui/swift-ui/modifiers i podajesz jako tablicę, jak łańcuch modyfikatorów w samym SwiftUI.
Teraz ma to znaczenie przez Liquid Glass. Według dokumentacji Apple standardowe komponenty SwiftUI i UIKit przejmują wygląd i zachowanie tego materiału automatycznie. Aplikacje budowane z SDK iOS 27 nie mogą już zrezygnować z nowego wyglądu. Kontrolka z Expo UI to prawdziwa kontrolka SwiftUI, więc zmienia się razem z systemem.
Szkło dodasz też sam: widokowi Expo UI daj modyfikator glassEffect({ glass: { variant: 'clear' } }) (od Xcode 26 i iOS 26). Własne widoki React Native możesz umieścić w GlassView z expo-glass-effect, także od iOS 26.
Expo radzi tak: Expo UI tam, gdzie użytkownik spodziewa się wyglądu systemu (ustawienia, modale, pickery, arkusze), a zwykłe widoki React Native dla własnego designu. Linkoglot to ten drugi przypadek: jego ekrany to NativeWind z React Native Reusables.
Co jeszcze dostajesz z Expo?
- Expo Router: routing oparty na plikach, podobnie jak we frameworkach webowych. Od SDK 56 nie zależy już od React Navigation, a jego natywne zakładki dostają Liquid Glass na iOS 26.
- Kod natywny, gdy go potrzebujesz: Expo Modules API pozwala dopisać do aplikacji nowe możliwości w Swifcie i Kotlinie, a config pluginy zmieniają wygenerowane projekty natywne podczas prebuildu. Tak powstaje rozszerzenie powiadomień na iOS w Linkoglocie.
- EAS Submit i EAS Update: Submit wysyła buildy do obu sklepów i działa w każdym systemie, więc build na iOS wyślesz też z Windowsa czy Linuxa. Update dostarcza JavaScript, style i obrazy przez sieć (OTA); zmiany natywne nadal przechodzą weryfikację w sklepie.
- EAS Observe: publicznie dostępne od 20 sierpnia 2026. Mierzy czas uruchomienia, czas do pierwszego renderu i czas do interaktywności na produkcji, na prawdziwych urządzeniach.
- Narzędzia AI: Expo prowadzi serwer MCP dla agentów kodujących, w darmowym planie (z miesięcznym limitem) od maja 2026, a nowe projekty z SDK 56 startują z plikami
AGENTS.mdiCLAUDE.md. To ten sam rodzaj konfiguracji, którego używam z Claude Code.
Darmowy plan EAS obejmuje 15 buildów na Androida i 15 na iOS oraz aktualizacje dla 1000 aktywnych użytkowników miesięcznie; plan Starter kosztuje 19 dolarów miesięcznie plus opłaty za użycie.
Expo czy Xcode i Android Studio: co zyskujesz, co oddajesz?
| Expo (React Native) | Xcode (Swift, SwiftUI) | Android Studio (Kotlin, Compose) | |
|---|---|---|---|
| Jedna baza kodu obejmuje | iOS, Androida i web | Platformy Apple | Androida |
| Twój komputer | Dowolny system; buildy iOS w chmurze EAS | Mac; Xcode 27 wymaga Apple silicon | Windows, macOS, Linux albo ChromeOS |
| Język | TypeScript i React | Swift | Kotlin |
| Interfejs | Widoki React Native albo SwiftUI i Compose przez Expo UI | SwiftUI albo UIKit | Jetpack Compose albo Views |
| Nowa funkcja systemu | Po aktualizacji SDK Expo lub biblioteki albo we własnym module | W dniu premiery | W dniu premiery |
| Wydanie poprawki | JavaScript przez OTA, zgodnie z regułami sklepów; kod natywny przez weryfikację | Przez weryfikację | Przez weryfikację |
| AI w narzędziach | Serwer MCP Expo, pliki dla agentów w nowych projektach | Claude, ChatGPT i Gemini w asystencie kodu | Tryb agenta Gemini, inne modele przez zdalny endpoint |
Tabela nie pokazuje jednego: programiści React Native nadal otwierają narzędzia natywne. W State of React Native 2025 68,2% osób budowało aplikacje w EAS Build, 60,3% ręcznie w Xcode, a 55,9% w Android Studio. Expo przesuwa te IDE z codziennych narzędzi do tych, po które sięgasz, gdy natywny build się sypie. Przy Linkoglocie ten dzień nie nadszedł.
Kiedy lepsze są Xcode albo Android Studio?
- Produktem jest jedna platforma. Aplikacja tylko na iOS dostaje każde nowe API w Xcode w dniu premiery. SDK Expo zbudowane pod iOS 27 było 14 października 2026 nadal w becie.
- Aplikacja to głównie funkcje systemu. Widżety, aplikacje na zegarek i rozszerzenia to natywne targety pisane w Swifcie albo Kotlinie, z Expo czy bez. Expo potrafi je wygenerować z konfiguracji, ale jeśli to większość aplikacji, React Native jest tylko narzutem.
- Zespół już pisze w Swifcie i Kotlinie. Zespół kotlinowy, który potrzebuje obu platform, ma własną drogę: JetBrains ogłosił w maju 2025, że Compose Multiplatform na iOS jest stabilny.
Jeśli znasz Reacta i TypeScript i zaczynasz aplikację na oba sklepy, ja znowu wybrałbym Expo. Moje powody przy Linkoglocie nadal są aktualne: jedna baza kodu na dwa sklepy, szybkie narzędzia, gotowe biblioteki do najtrudniejszych elementów i język, który już znałem. Przenoszą się też umiejętności z weba: Linkoglot używa TanStack Query, klienta JavaScript Supabase i Lingui, tych samych bibliotek, których używam na stronach.
Ograniczenia
- Wydałem jedną aplikację w Expo i żadnej w Swifcie ani Kotlinie, więc strona natywna pochodzi z dokumentacji Apple i Google, a nie z mojej praktyki.
- Liczby o szybkości to benchmarki Expo i zespołu React Native (dane o Hermesie pochodzą z aplikacji Expensify). Nie mierzyłem ich na Linkoglocie.
- To, co piszę o Expo UI, EAS Observe i SDK 58, pochodzi z dokumentacji i wpisów Expo. SDK 58 to beta, a ceny są podane według stanu z 14 października 2026.
Jak powstawał Linkoglot, od bazy danych po reguły obu sklepów, opisuję we wpisie aplikacja mobilna w pojedynkę, a sama aplikacja ma swój rozdział na mojej stronie głównej.
Źródła
- Get Started with React Native (dokumentacja React Native) (otwiera się w nowej karcie) (dostęp: )
- State of React Native 2025: architektura i frameworki (otwiera się w nowej karcie) (dostęp: )
- State of React Native 2025: budowanie i publikacja (otwiera się w nowej karcie) (dostęp: )
- Cennik Expo (otwiera się w nowej karcie) (dostęp: )
- EAS Build (dokumentacja Expo) (otwiera się w nowej karcie) (dostęp: )
- You don't need a Mac to develop iOS apps (blog Expo) (otwiera się w nowej karcie) (dostęp: )
- Development builds FAQ (dokumentacja Expo) (otwiera się w nowej karcie) (dostęp: )
- Notifications (dokumentacja Expo) (otwiera się w nowej karcie) (dostęp: )
- Using RevenueCat with Expo (dokumentacja RevenueCat) (otwiera się w nowej karcie) (dostęp: )
- Expo SDK 54 (changelog Expo) (otwiera się w nowej karcie) (dostęp: )
- Expo SDK 55 (changelog Expo) (otwiera się w nowej karcie) (dostęp: )
- Expo SDK 56 (changelog Expo) (otwiera się w nowej karcie) (dostęp: )
- Expo SDK 57 (changelog Expo) (otwiera się w nowej karcie) (dostęp: )
- Expo SDK 58 beta (changelog Expo) (otwiera się w nowej karcie) (dostęp: )
- React Native 0.82: A New Era (blog React Native) (otwiera się w nowej karcie) (dostęp: )
- React Native 0.84 (blog React Native) (otwiera się w nowej karcie) (dostęp: )
- React Compiler (dokumentacja React) (otwiera się w nowej karcie) (dostęp: )
- Expo UI (dokumentacja Expo) (otwiera się w nowej karcie) (dostęp: )
- Expo UI: SwiftUI (dokumentacja Expo) (otwiera się w nowej karcie) (dostęp: )
- GlassEffect (dokumentacja Expo) (otwiera się w nowej karcie) (dostęp: )
- Expo UI is stable (blog Expo) (otwiera się w nowej karcie) (dostęp: )
- Liquid Glass (dokumentacja Apple) (otwiera się w nowej karcie) (dostęp: )
- UIDesignRequiresCompatibility (dokumentacja Apple) (otwiera się w nowej karcie) (dostęp: )
- Expo Modules API: przegląd (dokumentacja Expo) (otwiera się w nowej karcie) (dostęp: )
- Config plugins: wprowadzenie (dokumentacja Expo) (otwiera się w nowej karcie) (dostęp: )
- Native tabs (dokumentacja Expo Router) (otwiera się w nowej karcie) (dostęp: )
- EAS Submit (dokumentacja Expo) (otwiera się w nowej karcie) (dostęp: )
- EAS Update (dokumentacja Expo) (otwiera się w nowej karcie) (dostęp: )
- EAS Observe is now generally available (changelog Expo) (otwiera się w nowej karcie) (dostęp: )
- EAS Observe: wprowadzenie (dokumentacja Expo) (otwiera się w nowej karcie) (dostęp: )
- Expo MCP Server (dokumentacja Expo) (otwiera się w nowej karcie) (dostęp: )
- The Expo MCP server is now available on the free plan (changelog Expo) (otwiera się w nowej karcie) (dostęp: )
- Xcode 26 Release Notes (Apple Developer) (otwiera się w nowej karcie) (dostęp: )
- Xcode 27 Release Notes (Apple Developer) (otwiera się w nowej karcie) (dostęp: )
- Pobierz Android Studio (Android Developers) (otwiera się w nowej karcie) (dostęp: )
- Gemini w Android Studio: funkcje (Android Developers) (otwiera się w nowej karcie) (dostęp: )
- Zdalny model w Android Studio (Android Developers) (otwiera się w nowej karcie) (dostęp: )
- Compose Multiplatform 1.8.0: iOS stabilny (blog JetBrains) (otwiera się w nowej karcie) (dostęp: )