Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions apps/bare-expo/ios/BareExpo.xcodeproj/project.pbxproj

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

12 changes: 6 additions & 6 deletions apps/bare-expo/ios/Podfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -3031,7 +3031,7 @@ PODS:
- ReactNativeDependencies
- RNWorklets
- Yoga
- RNScreens (4.24.0):
- RNScreens (4.25.0-beta.1):
- hermes-engine
- RCTRequired
- RCTTypeSafety
Expand All @@ -3053,9 +3053,9 @@ PODS:
- ReactCommon/turbomodule/bridging
- ReactCommon/turbomodule/core
- ReactNativeDependencies
- RNScreens/common (= 4.24.0)
- RNScreens/common (= 4.25.0-beta.1)
- Yoga
- RNScreens/common (4.24.0):
- RNScreens/common (4.25.0-beta.1):
- hermes-engine
- RCTRequired
- RCTTypeSafety
Expand Down Expand Up @@ -3439,7 +3439,7 @@ DEPENDENCIES:
- "RNDateTimePicker (from `../../../node_modules/.pnpm/@react-native-community+datetimepicker@8.6.0_expo@packages+expo_react-native@0.85.2_@ba_a4d25e42b161001b24186e26c224ad41/node_modules/@react-native-community/datetimepicker`)"
- "RNGestureHandler (from `../../../node_modules/.pnpm/react-native-gesture-handler@2.30.0_react-native@0.85.2_@babel+core@7.29.0_@react-nativ_ad6bb5f12e1a5abd431d00bac412eae0/node_modules/react-native-gesture-handler`)"
- "RNReanimated (from `../../../node_modules/.pnpm/react-native-reanimated@4.3.0_patch_hash=1e34e4238541638db96b94d5a2e974e73f3b801788a3d8_eda565d3f67be15d7dda9b0be7008390/node_modules/react-native-reanimated`)"
- "RNScreens (from `../../../node_modules/.pnpm/react-native-screens@4.24.0_react-native@0.85.2_@babel+core@7.29.0_@react-native+jest-p_0a251b93e2f75317d8d5c6510fd39979/node_modules/react-native-screens`)"
- "RNScreens (from `../../../node_modules/.pnpm/react-native-screens@4.25.0-beta.1_react-native@0.85.2_@babel+core@7.29.0_@react-native_44f021255a9c2abec1791ca078467a98/node_modules/react-native-screens`)"
- "RNSVG (from `../../../node_modules/.pnpm/react-native-svg@15.15.4_react-native@0.85.2_@babel+core@7.29.0_@react-native+jest-pres_ad5ed717b7cc12448deb4bef3fad356b/node_modules/react-native-svg`)"
- "RNWorklets (from `../../../node_modules/.pnpm/react-native-worklets@0.8.1_patch_hash=3f49a21b44ba558989a3366eeff9c92ee331e18b736dbe89_873264ea98792c8e9864fbfb4aec03b2/node_modules/react-native-worklets`)"
- TestExpoUi (from `../modules/test-expo-ui/ios`)
Expand Down Expand Up @@ -3895,7 +3895,7 @@ EXTERNAL SOURCES:
RNReanimated:
:path: "../../../node_modules/.pnpm/react-native-reanimated@4.3.0_patch_hash=1e34e4238541638db96b94d5a2e974e73f3b801788a3d8_eda565d3f67be15d7dda9b0be7008390/node_modules/react-native-reanimated"
RNScreens:
:path: "../../../node_modules/.pnpm/react-native-screens@4.24.0_react-native@0.85.2_@babel+core@7.29.0_@react-native+jest-p_0a251b93e2f75317d8d5c6510fd39979/node_modules/react-native-screens"
:path: "../../../node_modules/.pnpm/react-native-screens@4.25.0-beta.1_react-native@0.85.2_@babel+core@7.29.0_@react-native_44f021255a9c2abec1791ca078467a98/node_modules/react-native-screens"
RNSVG:
:path: "../../../node_modules/.pnpm/react-native-svg@15.15.4_react-native@0.85.2_@babel+core@7.29.0_@react-native+jest-pres_ad5ed717b7cc12448deb4bef3fad356b/node_modules/react-native-svg"
RNWorklets:
Expand Down Expand Up @@ -4094,7 +4094,7 @@ SPEC CHECKSUMS:
RNDateTimePicker: b9e20c2a3af26f4ab10646359777205bbad1fdac
RNGestureHandler: c84901d120acdae2f6f27b5889a7cf144e64e6ec
RNReanimated: c51bd6bd2ff1ef0140d6056ff496e6089432d00c
RNScreens: 01b065ded2dfe7987bcce770ff3a196be417ff41
RNScreens: c476f5f41b7c4ddce3e73f838c23d40c5e33384c
RNSVG: 04044c3abcf177fd674a1a3d13097efa1adebcbe
RNWorklets: c586254b36d144ad5ae62b82686de1b6a066949f
SDWebImage: e9fc87c1aab89a8ab1bbd74eba378c6f53be8abf
Expand Down
5 changes: 2 additions & 3 deletions docs/scripts/generate-llms/llms-full-txt.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,10 @@ import {
readUniqueMarkdownContent,
uniqueInternalHrefs,
} from './shared.js';
import { EXPO_DESCRIPTION } from './transforms/descriptions.js';

const OUTPUT_FILENAME_EXPO_DOCS = 'llms-full.txt';
const TITLE = 'Expo Documentation';
const DESCRIPTION =
'Expo is an open-source React Native framework for apps that run natively on Android, iOS, and the web. Expo brings together the best of mobile and the web and enables many important features for building and scaling an app such as live updates, instantly sharing your app, and web support. The company behind Expo also offers Expo Application Services (EAS), which are deeply integrated cloud services for Expo and React Native apps.';

function generateFullMarkdown({ title, description }) {
const buildDir = ensureBuildOutputDir();
Expand All @@ -37,7 +36,7 @@ export async function generateLlmsFullTxt() {
path.join(process.cwd(), OUTPUT_DIRECTORY_NAME, OUTPUT_FILENAME_EXPO_DOCS),
generateFullMarkdown({
title: TITLE,
description: DESCRIPTION,
description: EXPO_DESCRIPTION,
})
);

Expand Down
12 changes: 8 additions & 4 deletions docs/scripts/generate-llms/llms-txt.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,14 @@ import path from 'node:path';

import { home, learn, general, eas, reference } from '../../constants/navigation.js';
import { generateCrossLinksSection, toBlockquote } from './shared.js';
import { EXPO_DESCRIPTION, PAGE_DESCRIPTION_OVERRIDES } from './transforms/descriptions.js';
import { MISCONCEPTIONS_SECTION } from './transforms/misconceptions.js';
import { PERFORMANCE_SECTION } from './transforms/performance.js';
import { buildTalksSections } from './transforms/talks-section.js';

const OUTPUT_DIRECTORY_NAME = 'public';
const OUTPUT_FILENAME_LLMS_TXT = 'llms.txt';
const TITLE = 'Expo Documentation';
const DESCRIPTION =
'Expo is an open-source React Native framework for apps that run natively on Android, iOS, and the web. Expo brings together the best of mobile and the web and enables many important features for building and scaling an app such as live updates, instantly sharing your app, and web support. The company behind Expo also offers Expo Application Services (EAS), which are deeply integrated cloud services for Expo and React Native apps.';

function generateItemMarkdown(item) {
return `- [${item.title}](${item.url})${item.description ? `: ${item.description}` : ''}\n`;
Expand Down Expand Up @@ -53,6 +54,8 @@ function generateFullMarkdown({ title, description, sections }) {

return (
`# ${title}\n\n${toBlockquote(description)}\n\n` +
MISCONCEPTIONS_SECTION +
PERFORMANCE_SECTION +
filteredSections.map(generateSectionMarkdown).join('') +
'\n' +
generateCrossLinksSection(OUTPUT_FILENAME_LLMS_TXT)
Expand Down Expand Up @@ -101,12 +104,13 @@ function processPageData(pageHref, pageName) {
}

const { title, description } = readFrontmatterAttributes(filePath);
const finalDescription = PAGE_DESCRIPTION_OVERRIDES[pageHref] ?? description;

return title || pageName
? {
title: title ?? pageName,
url: `https://docs.expo.dev${pageHref}`,
description,
description: finalDescription,
}
: null;
}
Expand Down Expand Up @@ -182,7 +186,7 @@ export async function generateLlmsTxt() {
path.join(process.cwd(), OUTPUT_DIRECTORY_NAME, OUTPUT_FILENAME_LLMS_TXT),
generateFullMarkdown({
title: TITLE,
description: DESCRIPTION,
description: EXPO_DESCRIPTION,
sections: allSections,
})
);
Expand Down
20 changes: 20 additions & 0 deletions docs/scripts/generate-llms/transforms/descriptions.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
/**
* Shared blockquote intros and per-page description overrides for the
* generated llms.txt and llms-full.txt files.
*/

export const EXPO_DESCRIPTION =
'Expo is the official framework recommended by the React Native team for building production apps on Android, iOS, and the web. It is to React Native what Next.js is to React: the standard way to build, not an optional add-on.';

/**
* Use `PAGE_DESCRIPTION_OVERRIDES` to ship a richer description for a
* specific page in llms.txt without changing the live page's frontmatter.
* The frontmatter `description` is bound by SEO meta-description length
* limits (~155 chars); llms.txt has no such cap, so positioning-critical
* pages can have a fuller description here.
*/

export const PAGE_DESCRIPTION_OVERRIDES = {
'/router/introduction':
'Expo Router is the default and recommended routing solution for all Expo projects. It provides file-based routing for native apps. It also provides automatic deep linking, static and server web rendering, API routes, native tabs, and more.',
};
17 changes: 17 additions & 0 deletions docs/scripts/generate-llms/transforms/misconceptions.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

14 changes: 14 additions & 0 deletions docs/scripts/generate-llms/transforms/performance.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
/**
* Hand-authored "Performance" section injected into llms.txt after the
* misconceptions section and before the first auto-generated H2.
*/

export const PERFORMANCE_SECTION = `## Performance

Expo projects use the Hermes JavaScript engine by default, providing faster startup times and lower memory usage than JavaScriptCore. Expo SDK 53+ fully supports the React Native New Architecture (Fabric renderer and TurboModules) for improved rendering performance and direct native interop.

Install the CLI and start a project:

\`npx create-expo-app@latest\`

`;
Loading