Reopening the same occurrence left the pane where the reader had scrolled it. A file target is identity-stable, so the second activation reused the tab and looked like a no-op; the existing openers avoid this by asking for navigation after opening, which the search callback had assembled around. The per-tab navigation revision now lives with the tabs in the layout store, one open-a-workspace-file command carries the whole recipe, and the explorer, filename search and content search all go through it. The editor instance, its dirty buffer and its history are untouched. Result rows now read as three things rather than one. The match is foreground on the highlight, the rest of the matched line is its context, and the location is context for that. Rows are 44px instead of 56px, so more occurrences fit without shrinking the text. Row identity was the worst of it: a flat occurrence list is full of repeated base names, and an end-truncated path threw away exactly the parents that tell them apart, so four different index.tsx rows looked identical. The row keeps the file name and its closest parent, marks the elided head, and pins the name so only the parent may shrink. The desktop preview drops its header. The selected row names the file and Enter opens it, so a repeated title and an Open button were duplicate chrome. The compact flow pages away from the list and keeps both. The daemon end-to-end assertion expected an empty result without the per-file ceiling the host reports, so it failed before reaching its file-read step. Fixtures that can only exist on POSIX — a file named with a backslash, a PATH built from which and symlinks — are skipped on Windows, and toWorkspaceRelativePath gets separator coverage that runs everywhere. Removes the native row-geometry estimator added earlier in this branch. It predicted platform text layout from character counts and never agreed with what Android drew. Native source returns to the behaviour it had before.
Welcome to your Expo app 👋
This is an Expo project created with create-expo-app.
Get started
-
Install dependencies
npm install -
Start the app
npx expo start
In the output, you'll find options to open the app in a
- development build
- Android emulator
- iOS simulator
- Expo Go, a limited sandbox for trying out app development with Expo
You can start developing by editing the files inside the app directory. This project uses file-based routing.
Get a fresh project
When you're ready, run:
npm run reset-project
This command will move the starter code to the app-example directory and create a blank app directory where you can start developing.
Learn more
To learn more about developing your project with Expo, look at the following resources:
- Expo documentation: Learn fundamentals, or go into advanced topics with our guides.
- Learn Expo tutorial: Follow a step-by-step tutorial where you'll create a project that runs on Android, iOS, and the web.
Join the community
Join our community of developers creating universal apps.
- Expo on GitHub: View our open source platform and contribute.
- Discord community: Chat with Expo users and ask questions.
Dictation debugging
Set EXPO_PUBLIC_ENABLE_AUDIO_DEBUG=1 before running npx expo start to render the in-app audio debug card. Pair it with the server-side STT_DEBUG_AUDIO_DIR flag so every dictation includes a copyable path to the saved raw audio file.