This documentation is available as Markdown for AI agents and LLMs. See the full Markdown index or append .md to any documentation URL.
Expo Router Split View
An Expo Router submodule that provides native split view layout.
SplitView is an alpha API available on iOS only in Expo SDK 55 and later. The API is subject to breaking changes and is not ready for production usage yet.
expo-router/unstable-split-view is a submodule of expo-router and exports components to build split view layouts using platform-native system split views.
See the Expo Router reference for more information about the file-based routing library for native and web app.
Platform support
Split View is only available on iOS. On other platforms, the SplitView component automatically falls back to rendering as a standard Slot navigator, ensuring your app works across all platforms without conditional code.
iPhone support
On iPhone, SplitView automatically collapses all columns into a single view. Only one column is visible at a time.
Choosing the initial column
Use the topColumnForCollapsing prop to control which column is displayed when the split view is collapsed:
<SplitView topColumnForCollapsing="primary">{/* ... */}</SplitView>
Accepted values are primary, supplementary, and secondary. When not set, the system uses its default behavior.
Navigating between columns
The
.show()method requiresreact-native-screens4.24.0 or later. SDK 55 bundles~4.23.0, so you need to installreact-native-screens@~4.24.0manually to use this feature.
Use a ref to programmatically show a specific column with the show method:
import { useRef } from 'react'; import { Pressable, Text } from 'react-native'; import { SplitView } from 'expo-router/unstable-split-view'; import type { SplitHostCommands } from 'react-native-screens/experimental'; export default function Layout() { const ref = useRef<SplitHostCommands>(null); return ( <SplitView ref={ref} topColumnForCollapsing="primary"> <SplitView.Column> <Pressable onPress={() => ref.current?.show('secondary')}> <Text>Show main content</Text> </Pressable> </SplitView.Column> </SplitView> ); }
Known limitations
Cannot be nested
There can only be one SplitView in the navigation hierarchy. Attempting to nest split views will result in an error.
Only specific children allowed
SplitView only accepts SplitView.Column and SplitView.Inspector as direct children. Other components will be ignored with a warning.
Header cannot be customized yet
The header (navigation bar) within split view columns cannot be customized. Custom header configurations are not yet supported.
Limited API
The current API surface is minimal and may not cover all use cases. Additional props and configuration options will be added in future releases.
Going back to previous column on iPhone
To go back to a previous column, tap the system back button in the navigation bar. A future release will add more granular programmatic control over back navigation.
Note: We are actively developing
SplitViewand looking for feedback. You can share your thoughts on Discord, open an issue on GitHub, or use the Feedback button at the bottom of this page.
Installation
To use expo-router/unstable-split-view in your project, you need to install expo-router in your project. Follow the instructions from Expo Router's installation guide:
Learn how to install Expo Router in your project.
Using SplitView.Column
SplitView.Column defines additional columns in your split view layout. You can add up to two columns before the main content area.
Two-column layout
A simple sidebar with main content:
Three-column layout
A sidebar with supporting column and main content:
Using SplitView.Inspector
SplitView.Inspector adds a supplementary column that slides in from the trailing edge, useful for showing additional details or metadata:
<SplitView> <SplitView.Column>{/* Sidebar */}</SplitView.Column> <SplitView.Inspector> <View style={{ flex: 1, padding: 16 }}> <Text>Inspector Panel</Text> </View> </SplitView.Inspector> </SplitView>
Complete example
Here's a password manager-style app with three columns:
app_layout.tsxindex.tsx[type][id].tsxindex.tsxAPI
import { SplitView } from 'expo-router/unstable-split-view';
Components
Type: React.Element<SplitViewProps>
For full list of supported props, see SplitHostProps
Type: React.Element<SplitViewColumnProps>
ReactNodeType: React.Element<SplitViewColumnProps>