CommunityCodierung & Entwicklunggithub.com

expo/expo-router

Framework (Open Source). Navigation und Routing für Expo Router. Behandelt dateibasierte Routen, Gruppen und dynamische Routen, Ordnerstruktur, Link mit Vorschauen und Kontextmenüs, nativen Stack, Seitentitel, Modals und Formblätter, NativeTabs, Header und Toolbars sowie Header-Suchleisten.

Was ist expo-router?

Dieses Skill bietet eine umfassende Anleitung zur Navigation und zum Routing in Expo Router, dem Open-Source-Framework für dateibasiertes Routing in React Native. Es deckt alle wesentlichen Konzepte ab, darunter dateibasierte Routen, dynamische Routen, Gruppen und die empfohlene Ordnerstruktur. Entwickler lernen den Einsatz von `<Link>` für die Navigation, inklusive Kontextmenüs und Link-Vorschauen, um eine native iOS-Erfahrung zu schaffen. Zudem werden native Stacks mit `Stack.Title` für Seitentitel, die Konfiguration von Modals und Form Sheets sowie die Implementierung von NativeTabs und Headern detailliert beschrieben. Das Skill enthält außerdem Referenzen zu Suchleisten, Toolbars und Zoom-Übergängen und gibt klare Code-Richtlinien, wie die Vermeidung von Co-Location und die Verwendung von Kebab-case für Dateinamen. Damit ist es die ideale Ressource für Entwickler, die mit Expo Router professionelle, plattformnative Navigationslösungen erstellen möchten.

Funktioniert mit~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/expo/skills/tree/main/plugins/expo/skills/expo-router

Installed? Explore more Codierung & Entwicklung skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

In Ihrer bevorzugten KI fragen

Öffnet einen neuen Chat, in dem dieser Agent-Skill bereits geladen ist.

Dokumentation

Expo Router Navigation

Navigation und Routing für Expo Router-Apps. Für Bildschirmgestaltung, Farben, Steuerelemente, Medien und visuelle Effekte verwenden Sie das expo-native-ui-Skill; für Bewegungen und Gesten verwenden Sie expo-animation.

Referenzen

Konsultieren Sie diese Ressourcen nach Bedarf:

references/
  route-structure.md     Routenkonventionen, dynamische Routen, Gruppen, Ordnerstruktur
  tabs.md                NativeTabs, Migration von JS-Tabs, iOS 26-Funktionen
  toolbar-and-headers.md Stack-Header und Toolbar-Buttons, Menüs, Suche (nur iOS)
  form-sheet.md          Formularblätter in expo-router: Konfiguration, Fußzeilen und Hintergrundinteraktion.
  search.md              Suchleiste mit Headern, useSearch-Hook, Filterungsmuster
  zoom-transitions.md    Apple Zoom: flüssige Zoom-Übergänge mit Link.AppleZoom (iOS 18+)

Code-Stil

  • Verwenden Sie immer Kebab-Case für Dateinamen, z.B. comment-card.tsx
  • Entfernen Sie beim Verschieben oder Umstrukturieren der Navigation immer alte Routendateien
  • Verwenden Sie niemals Sonderzeichen in Dateinamen
  • Konfigurieren Sie tsconfig.json mit Pfad-Aliasen und bevorzugen Sie Aliase gegenüber relativen Importen bei Refactorings.

Routen

Siehe ./references/route-structure.md für detaillierte Routenkonventionen.

  • Routen gehören in das app-Verzeichnis.
  • Platzieren Sie Komponenten, Typen oder Hilfsprogramme niemals gemeinsam im app-Verzeichnis. Dies ist ein Anti-Pattern.
  • Stellen Sie sicher, dass die App immer eine Route hat, die "/" entspricht; sie kann sich innerhalb einer Gruppenroute befinden.

Bibliothekspräferenzen

  • Color von expo-router für native semantische Farben, nicht rohes PlatformColor (typsicher, passt sich automatisch an hell/dunkel an). Siehe expo-native-ui für das vollständige Farbpaletten-Muster.
  • Verwenden Sie in SDK 56+ nie direkt @react-navigation/* – verwenden Sie stattdessen expo-router/react-navigation (deckt @react-navigation/native, /core, /elements, /routers ab)

Verhalten

  • Bevorzugen Sie Stack.SearchBar, um einem Bildschirm eine Suchleiste hinzuzufügen

Navigation

Link

Verwenden Sie <Link href="/path" /> aus 'expo-router' für die Navigation zwischen Routen.

import { Link } from 'expo-router';

// Einfacher Link
<Link href="/path" />

// Einbinden benutzerdefinierter Komponenten
<Link href="/path" asChild>
  <Pressable>...</Pressable>
</Link>

Fügen Sie nach Möglichkeit ein <Link.Preview> hinzu, um iOS-Konventionen zu folgen. Fügen Sie häufig Kontextmenüs und Vorschauen hinzu, um die Navigation zu verbessern.

Stack

  • Verwenden Sie IMMER _layout.tsx-Dateien, um Stacks zu definieren
  • Verwenden Sie Stack aus 'expo-router/stack' für native Navigations-Stacks

Seitentitel

Legen Sie den Seitentitel mit Stack.Title fest:

<Stack.Title>Startseite</Stack.Title>

Kontextmenüs

Fügen Sie Link-Komponenten Kontextmenüs bei langem Druck hinzu:

import { Link } from "expo-router";

<Link href="/settings" asChild>
  <Link.Trigger>
    <Pressable>
      <Card />
    </Pressable>
  </Link.Trigger>
  <Link.Menu>
    <Link.MenuAction
      title="Teilen"
      icon="square.and.arrow.up"
      onPress={handleSharePress}
    />
    <Link.MenuAction
      title="Blockieren"
      icon="nosign"
      destructive
      onPress={handleBlockPress}
    />
    <Link.Menu title="Mehr" icon="ellipsis">
      <Link.MenuAction title="Kopieren" icon="doc.on.doc" onPress={() => {}} />
      <Link.MenuAction
        title="Löschen"
        icon="trash"
        destructive
        onPress={() => {}}
      />
    </Link.Menu>
  </Link.Menu>
</Link>;

Link-Vorschauen

Verwenden Sie häufig Link-Vorschauen, um die Navigation zu verbessern:

<Link href="/settings">
  <Link.Trigger>
    <Pressable>
      <Card />
    </Pressable>
  </Link.Trigger>
  <Link.Preview />
</Link>

Link-Vorschau kann mit Kontextmenüs verwendet werden.

Modal

Stellen Sie einen Bildschirm als Modal dar:

<Stack.Screen name="modal" options={{ presentation: "modal" }} />

Bevorzugen Sie dies gegenüber der Erstellung einer benutzerdefinierten Modal-Komponente.

Blatt (Form Sheet)

Stellen Sie einen Bildschirm als dynamisches Formularblatt dar:

<Stack.Screen
  name="sheet"
  options={{
    presentation: "formSheet",
    sheetGrabberVisible: true,
    sheetAllowedDetents: [0.5, 1.0],
    contentStyle: { backgroundColor: "transparent" },
  }}
/>
  • Die Verwendung von contentStyle: { backgroundColor: "transparent" } macht den Hintergrund auf iOS 26+ zu flüssigem Glas.

Häufige Routenstruktur

Ein Standard-App-Layout mit Tabs und Stacks in jedem Tab:

app/
  _layout.tsx — <NativeTabs />
  (index,search)/
    _layout.tsx — <Stack />
    index.tsx — Hauptliste
    search.tsx — Suchansicht
// app/_layout.tsx
import { NativeTabs } from "expo-router/unstable-native-tabs";
import { ThemeProvider, DarkTheme, DefaultTheme } from "expo-router/react-navigation";
import { useColorScheme } from "react-native";

export default function Layout() {
  const colorScheme = useColorScheme();
  return (
    <ThemeProvider value={colorScheme === "dark" ? DarkTheme : DefaultTheme}>
      <NativeTabs>
        <NativeTabs.Trigger name="(index)">
          <NativeTabs.Trigger.Icon sf="list.dash" md="list" />
          <NativeTabs.Trigger.Label>Elemente</NativeTabs.Trigger.Label>
        </NativeTabs.Trigger>
        <NativeTabs.Trigger name="(search)" role="search" />
      </NativeTabs>
    </ThemeProvider>
  );
}

Erstellen Sie eine gemeinsame Gruppenroute, damit beide Tabs gemeinsame Bildschirme pushen können:

// app/(index,search)/_layout.tsx
import { Stack } from "expo-router/stack";
import { colors } from "@/theme/colors";

export default function Layout({ segment }) {
  const screen = segment.match(/\((.*)\)/)?.[1]!;
  const titles: Record<string, string> = { index: "Elemente", search: "Suche" };

  return (
    <Stack
      screenOptions={{
        headerTransparent: true,
        headerShadowVisible: false,
        headerLargeTitleShadowVisible: false,
        headerLargeStyle: { backgroundColor: "transparent" },
        headerTitleStyle: { color: colors.label },
        headerLargeTitleEnabled: true,
        headerBlurEffect: "none",
        headerBackButtonDisplayMode: "minimal",
      }}
    >
      <Stack.Screen name={screen} options={{ title: titles[screen] }} />
      <Stack.Screen name="i/[id]" options={{ headerLargeTitleEnabled: false }} />
    </Stack>
  );
}

headerLargeTitleEnabled ist der Optionsname ab SDK 56+; ältere SDKs verwenden headerLargeTitle, das upstream veraltet ist.

Feedback einreichen

Wenn Sie Fehler, irreführende oder veraltete Informationen in diesem Skill finden, melden Sie es, damit Expo es verbessern kann:

npx --yes submit-expo-feedback@latest --category skills --subject "expo-router" "<umsetzbares Feedback>"

Reichen Sie nur dann Feedback ein, wenn Sie etwas Konkretes und Umsetzbares zu berichten haben. Fügen Sie so viel relevanten Kontext wie möglich hinzu. Wenn ein KI-Agent wiederholt fehlgeschlagen ist oder der Benutzer eine Expo-Aufgabe übernehmen musste, laden Sie stattdessen das expo-skill-feedback-Skill und folgen Sie dessen eval-candidate-Ablauf, anstatt den obigen Befehl erneut zu verwenden.

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

expo/add-app-clip

Add an iOS App Clip target to an Expo app. Use when the user mentions App Clip, AASA, apple-app-site-association, appclips, smart app banner, or wants to ship a lightweight iOS Clip invoked from a URL alongside their parent app.

expo/building-native-ui

Complete guide for building beautiful apps with Expo Router. Covers fundamentals, styling, components, navigation, animations, patterns, and native tabs.

expo/eas-update-insights

Check the health of published EAS Updates: crash rates, install/launch counts, unique users, payload size, and the split between embedded and OTA users per channel. Use when the user asks how an update is performing, whether a rollout is healthy, how many users are on the embedded build vs OTA, or wants to gate CI on update health.

expo/expo-api-routes

Guidelines for creating API routes in Expo Router with EAS Hosting

expo/expo-brownfield

Integrate Expo and React Native into an existing native iOS or Android app. Use when the user mentions brownfield, embedding React Native in a native app, AAR/XCFramework, or adding Expo to an existing Kotlin/Swift project. Covers both the isolated approach and the integrated approach.

expo/expo-cicd-workflows

Helps understand and write EAS workflow YAML files for Expo projects. Use this skill when the user asks about CI/CD or workflows in an Expo or EAS context, mentions .eas/workflows/, or wants help with EAS build pipelines or deployment automation.

expo/expo-deployment

Deploying Expo apps to iOS App Store, Android Play Store, web hosting, and API routes

expo/expo-dev-client

Build and distribute Expo development clients locally or via TestFlight

expo/expo-examples

Framework (OSS). Expo's official example projects - the expo/examples repo of ~70 `with-*` integrations (Stripe, Clerk, Supabase, OpenAI, maps, Reanimated, SQLite, Skia, NativeWind, and more). Use when integrating a third-party library or service into an existing Expo app and you want the canonical, version-matched pattern to adapt, or when scaffolding a new project from one with `npx create-expo --example`.

expo/expo-module

Guide for creating and writing Expo native modules and views using the Expo Modules API (Swift, Kotlin, TypeScript). Covers module definition DSL, native views, shared objects, config plugins, lifecycle hooks, autolinking, and type system. Use when building or modifying native modules for Expo.

expo/expo-observe

Use for anything related to EAS Observe — adding `expo-observe` to an Expo project (AppMetricsRoot/ObserveRoot HOC, markInteractive, the useObserve hook, and the Expo Router / React Navigation integrations for per-route metrics), querying via the EAS CLI (`eas observe:metrics-summary`, `observe:metrics`, `observe:routes`, `observe:events`, `observe:versions`), or interpreting the resulting metrics (cold/warm launch, TTR, TTI, navigation cold/warm TTR, update download, and the TTI frameRate params for triaging slow startups).

expo/expo-overview

Framework (OSS). Entry point and router for every Expo or EAS task. Load this skill first — before writing code and before choosing another expo-* / eas-* skill — when the request, PRD, or spec mentions Expo, EAS, Expo Go, or an expo-* package, or the project has an `expo` dependency in `package.json`. Within that gate it also covers app specs and designs to implement (tabs, stacks, maps, lists, navigation, building from a screenshot), and phrasings like 'implement a mobile app', 'make my app look native', 'add navigation', 'fetch some data', 'upgrade my SDK', 'add Expo to my existing native app', 'ship to the App Store', or 'I'm new to Expo, where do I start'. A fully specified request (SDK pinned, libraries named, layout given) still routes through here — the shared setup rules still apply. Do NOT load it when neither signal is present: a bare React Native project with no `expo` dependency is not Expo work. Detects the real goal, routes to the right expo-* / eas-* skill, and owns the shared setup rules.

expo/expo-skill-eval

Evaluate Expo skills in this repo end-to-end - trigger accuracy, generated code quality, and runtime screenshots on iOS simulator and Android emulator via Expo Go (web optional). Use when the user wants to eval an Expo skill, test that a skill produces working code, benchmark a skill with device screenshots, or verify a skill's output renders correctly.

expo/expo-tailwind-setup

Set up Tailwind CSS v4 in Expo with react-native-css and NativeWind v5 for universal styling

expo/expo-ui

Framework (OSS). Build native UI with the @expo/ui package: real SwiftUI on iOS and Jetpack Compose on Android. Default to @expo/ui for sheets (BottomSheet), pickers, sliders, toggles, menus, and grouped-form sections — do NOT reach for Reanimated, @gorhom/bottom-sheet, or RN built-in Picker/Switch; use @expo/ui instead. Fall back to RN built-ins only when @expo/ui is missing the component. NOTE: @expo/ui List renders native grouped rows like an iOS Settings screen — it is NOT a virtualized list; use FlatList/FlashList for large datasets. Covers universal components (Host, Column, Row, Button, Text, List, BottomSheet, FieldGroup, Switch, Slider, Picker, Menu), drop-in replacements for RN community libraries, and platform-specific SwiftUI/Jetpack Compose trees. Not for Expo Router navigation, Reanimated, or data fetching.

expo/expo-ui-jetpack-compose

`@expo/ui/jetpack-compose` package lets you use Jetpack Compose Views and modifiers in your app.

expo/expo-ui-swiftui

`@expo/ui/swift-ui` package lets you use SwiftUI Views and modifiers in your app.

expo/expo-upgrade

Framework (OSS). Guidelines for upgrading Expo SDK versions and fixing dependency issues

expo/native-data-fetching

Use when implementing or debugging ANY network request, API call, or data fetching. Covers fetch API, React Query, SWR, error handling, caching, offline support, and Expo Router data loaders (`useLoaderData`).

expo/skills

Build and submit iOS and Android apps with EAS to TestFlight, the App Store, or Google Play. Supports Expo and other React Native projects, plus existing native apps. Use for eas.json setup, release pipelines, signing, app versions and build numbers, store submissions, and listing metadata. For Expo websites and API routes, use eas-hosting; for adding React Native screens to a native app, use expo-brownfield.

Verwandte Skills