Full picture
The whole template as one graph: modules, providers, routes, screens, libs, env keys - and the same map for your own app
Here is the entire template as one picture. Every app I ship with ReadyNative writes the same
graph about itself into docs/graph.json, so this is not a drawing I maintain by hand - it is
bun run gen:graph run on the template tree as it ships: 9 modules, 4 providers, 18 routes, 15 screens, 5 hooks, 8 stores, 44 libs, 2 env keys.
Untick a kind to cut the noise; edges disappear with the nodes on either end. If you want your
own app instead of mine, open "Paste your own graph.json" and drop your docs/graph.json in -
it is rendered in your browser and goes nowhere.
Drawing the graph…
105 nodes, 138 edges from apps/template/docs/graph.json.
Paste your own graph.json
Copy docs/graph.json out of your app and drop it in - nothing leaves your browser.
Mermaid source for this view
flowchart LR
subgraph modules["module"]
nmodule_data_react_query["data: react-query"]
nmodule_forms_react_hook_form["forms: react-hook-form"]
nmodule_i18n_i18next["i18n: i18next"]
nmodule_location_expo_location["location: expo-location"]
nmodule_onboarding_on["onboarding: on"]
nmodule_state_zustand["state: zustand"]
nmodule_storage_kv_store["storage: kv-store"]
nmodule_testing_jest["testing: jest"]
nmodule_ui_nativewind4["ui: nativewind4"]
end
subgraph providers["provider"]
nprovider_I18nProvider["I18nProvider"]
nprovider_QueryProvider["QueryProvider"]
nprovider_ToastHost["ToastHost"]
nprovider_UiThemeProvider["UiThemeProvider"]
end
subgraph routes["route"]
nroute__layout["/ (layout)"]
nroute__tabs___layout["/ (layout)"]
nroute__tabs__cities__layout["/cities (layout)"]
nroute__["/"]
nroute___not_found["/+not-found"]
nroute__cities["/cities"]
nroute__cities__id_["/cities/[id]"]
nroute__examples["/examples"]
nroute__examples__slug_["/examples/[slug]"]
nroute__examples_form["/examples/form"]
nroute__examples_i18n["/examples/i18n"]
nroute__examples_query["/examples/query"]
nroute__examples_store["/examples/store"]
nroute__explore["/explore"]
nroute__onboarding["/onboarding"]
nroute__settings["/settings"]
nroute_examples__layout["/examples (layout)"]
nroute_onboarding__layout["/onboarding (layout)"]
end
subgraph screens["screen"]
nscreen_examples_examples_screen["@/screens/examples/examples-screen"]
nscreen_examples_form_example_screen["@/screens/examples/form-example-screen"]
nscreen_examples_i18n_example_screen["@/screens/examples/i18n-example-screen"]
nscreen_examples_not_installed_screen["@/screens/examples/not-installed-screen"]
nscreen_examples_query_example_screen["@/screens/examples/query-example-screen"]
nscreen_examples_store_example_screen["@/screens/examples/store-example-screen"]
nscreen_explore_explore_screen["@/screens/explore/explore-screen"]
nscreen_home_home_screen["@/screens/home/home-screen"]
nscreen_onboarding_onboarding_screen["@/screens/onboarding/onboarding-screen"]
nscreen_settings_developer_tools["@/screens/settings/developer-tools"]
nscreen_settings_settings_screen["@/screens/settings/settings-screen"]
nscreen_weather_cities_screen["@/screens/weather/cities-screen"]
nscreen_weather_city_screen["@/screens/weather/city-screen"]
nscreen_weather_use_pro["@/screens/weather/use-pro"]
nscreen_weather_weather_view["@/screens/weather/weather-view"]
end
subgraph hooks["hook"]
nhook_use_auth_redirect["@/hooks/use-auth-redirect"]
nhook_use_example_query["@/hooks/use-example-query"]
nhook_use_forecast["@/hooks/use-forecast"]
nhook_use_onboarding_redirect["@/hooks/use-onboarding-redirect"]
nhook_use_sign_out_cleanup["@/hooks/use-sign-out-cleanup"]
end
subgraph stores["store"]
nstore_consent["@/stores/consent"]
nstore_create_store["@/stores/create-store"]
nstore_example_store["@/stores/example-store"]
nstore_onboarding["@/stores/onboarding"]
nstore_review_prompt["@/stores/review-prompt"]
nstore_theme_mode["@/stores/theme-mode"]
nstore_weather["@/stores/weather"]
nstore_zustand_storage["@/stores/zustand-storage"]
end
subgraph libs["lib"]
nlib_account_data["@/lib/account-data"]
nlib_analytics["@/lib/analytics"]
nlib_api_client["@/lib/api/client"]
nlib_auth["@/lib/auth"]
nlib_browser["@/lib/browser"]
nlib_cache["@/lib/cache"]
nlib_clipboard["@/lib/clipboard"]
nlib_confirm["@/lib/confirm"]
nlib_consent["@/lib/consent"]
nlib_crash["@/lib/crash"]
nlib_env["@/lib/env"]
nlib_i18n["@/lib/i18n"]
nlib_location["@/lib/location"]
nlib_native_toast["@/lib/native-toast"]
nlib_payments["@/lib/payments"]
nlib_privacy["@/lib/privacy"]
nlib_privacy_categories["@/lib/privacy-categories"]
nlib_push["@/lib/push"]
nlib_query["@/lib/query"]
nlib_readynative["@/lib/readynative"]
nlib_readynative_config["@/lib/readynative-config"]
nlib_share["@/lib/share"]
nlib_shims_account_data["@/lib/shims/account-data"]
nlib_shims_analytics["@/lib/shims/analytics"]
nlib_shims_auth["@/lib/shims/auth"]
nlib_shims_consent["@/lib/shims/consent"]
nlib_shims_crash["@/lib/shims/crash"]
nlib_shims_i18n["@/lib/shims/i18n"]
nlib_shims_location["@/lib/shims/location"]
nlib_shims_payments["@/lib/shims/payments"]
nlib_shims_push["@/lib/shims/push"]
nlib_shims_server_auth["@/lib/shims/server-auth"]
nlib_shims_tracking["@/lib/shims/tracking"]
nlib_shims_widgets["@/lib/shims/widgets"]
nlib_storage["@/lib/storage"]
nlib_storage_adapter["@/lib/storage-adapter"]
nlib_store_review["@/lib/store-review"]
nlib_tracking["@/lib/tracking"]
nlib_utils["@/lib/utils"]
nlib_weather_api["@/lib/weather/api"]
nlib_weather_conditions["@/lib/weather/conditions"]
nlib_weather_format["@/lib/weather/format"]
nlib_weather_types["@/lib/weather/types"]
nlib_widgets["@/lib/widgets"]
end
subgraph envs["env"]
nenv_EXPO_PUBLIC_API_URL["EXPO_PUBLIC_API_URL"]
nenv_EXPO_PUBLIC_APP_VARIANT["EXPO_PUBLIC_APP_VARIANT"]
end
nhook_use_example_query -->|imports| nlib_api_client
nhook_use_example_query -->|imports| nlib_env
nhook_use_example_query -->|reads| nenv_EXPO_PUBLIC_API_URL
nhook_use_forecast -->|imports| nlib_cache
nhook_use_forecast -->|imports| nlib_weather_api
nhook_use_forecast -->|imports| nlib_weather_types
nhook_use_onboarding_redirect -->|imports| nstore_onboarding
nhook_use_sign_out_cleanup -->|imports| nlib_auth
nhook_use_sign_out_cleanup -->|imports| nlib_crash
nhook_use_sign_out_cleanup -->|imports| nlib_privacy
nlib_api_client -->|imports| nlib_env
nlib_api_client -->|reads| nenv_EXPO_PUBLIC_API_URL
nlib_browser -->|imports| nlib_crash
nlib_cache -->|imports| nlib_storage
nlib_cache -->|imports| nlib_storage_adapter
nlib_clipboard -->|imports| nlib_crash
nlib_env -->|reads| nenv_EXPO_PUBLIC_API_URL
nlib_env -->|reads| nenv_EXPO_PUBLIC_APP_VARIANT
nlib_i18n -->|imports| nlib_storage
nlib_privacy -->|imports| nlib_analytics
nlib_privacy -->|imports| nlib_auth
nlib_privacy -->|imports| nlib_share
nlib_privacy -->|imports| nlib_storage
nlib_privacy_categories -->|imports| nlib_analytics
nlib_privacy_categories -->|imports| nlib_crash
nlib_privacy_categories -->|imports| nstore_consent
nlib_query -->|imports| nlib_privacy
nlib_share -->|imports| nlib_crash
nlib_shims_consent -->|imports| nstore_consent
nlib_storage -->|imports| nlib_storage_adapter
nlib_store_review -->|imports| nlib_crash
nlib_store_review -->|imports| nlib_readynative
nlib_store_review -->|imports| nstore_review_prompt
nmodule_data_react_query -->|provides| nprovider_QueryProvider
nmodule_i18n_i18next -->|provides| nprovider_I18nProvider
nprovider_I18nProvider -->|imports| nlib_i18n
nprovider_I18nProvider -->|renders| nprovider_ToastHost
nprovider_QueryProvider -->|imports| nlib_query
nprovider_QueryProvider -->|renders| nprovider_UiThemeProvider
nprovider_UiThemeProvider -->|renders| nprovider_I18nProvider
nroute__layout -->|imports| nhook_use_auth_redirect
nroute__layout -->|imports| nhook_use_onboarding_redirect
nroute__layout -->|imports| nhook_use_sign_out_cleanup
nroute__layout -->|imports| nlib_analytics
nroute__layout -->|imports| nstore_theme_mode
nroute__tabs___layout -->|imports| nlib_i18n
nroute__ -->|renders| nscreen_home_home_screen
nroute___not_found -->|imports| nlib_i18n
nroute__cities -->|renders| nscreen_weather_cities_screen
nroute__cities__id_ -->|renders| nscreen_weather_city_screen
nroute__examples -->|renders| nscreen_examples_examples_screen
nroute__examples__slug_ -->|renders| nscreen_examples_not_installed_screen
nroute__examples_form -->|renders| nscreen_examples_form_example_screen
nroute__examples_i18n -->|renders| nscreen_examples_i18n_example_screen
nroute__examples_query -->|renders| nscreen_examples_query_example_screen
nroute__examples_store -->|renders| nscreen_examples_store_example_screen
nroute__explore -->|renders| nscreen_explore_explore_screen
nroute__onboarding -->|renders| nscreen_onboarding_onboarding_screen
nroute__settings -->|renders| nscreen_settings_settings_screen
nscreen_examples_examples_screen -->|imports| nlib_i18n
nscreen_examples_form_example_screen -->|imports| nlib_i18n
nscreen_examples_i18n_example_screen -->|imports| nlib_i18n
nscreen_examples_not_installed_screen -->|imports| nlib_i18n
nscreen_examples_query_example_screen -->|imports| nhook_use_example_query
nscreen_examples_query_example_screen -->|imports| nlib_env
nscreen_examples_query_example_screen -->|imports| nlib_i18n
nscreen_examples_query_example_screen -->|reads| nenv_EXPO_PUBLIC_API_URL
nscreen_examples_store_example_screen -->|imports| nlib_i18n
nscreen_examples_store_example_screen -->|imports| nstore_example_store
nscreen_explore_explore_screen -->|imports| nlib_readynative
nscreen_home_home_screen -->|imports| nlib_cache
nscreen_home_home_screen -->|imports| nlib_i18n
nscreen_home_home_screen -->|imports| nlib_location
nscreen_home_home_screen -->|imports| nlib_weather_types
nscreen_home_home_screen -->|imports| nscreen_weather_weather_view
nscreen_home_home_screen -->|imports| nstore_weather
nscreen_onboarding_onboarding_screen -->|imports| nlib_i18n
nscreen_onboarding_onboarding_screen -->|imports| nlib_readynative
nscreen_onboarding_onboarding_screen -->|imports| nstore_onboarding
nscreen_settings_developer_tools -->|imports| nhook_use_onboarding_redirect
nscreen_settings_developer_tools -->|imports| nlib_auth
nscreen_settings_developer_tools -->|imports| nlib_consent
nscreen_settings_developer_tools -->|imports| nlib_crash
nscreen_settings_developer_tools -->|imports| nlib_env
nscreen_settings_developer_tools -->|imports| nlib_i18n
nscreen_settings_developer_tools -->|imports| nlib_payments
nscreen_settings_developer_tools -->|imports| nlib_privacy_categories
nscreen_settings_developer_tools -->|imports| nlib_push
nscreen_settings_developer_tools -->|imports| nstore_onboarding
nscreen_settings_developer_tools -->|reads| nenv_EXPO_PUBLIC_APP_VARIANT
nscreen_settings_settings_screen -->|imports| nhook_use_onboarding_redirect
nscreen_settings_settings_screen -->|imports| nlib_account_data
nscreen_settings_settings_screen -->|imports| nlib_analytics
nscreen_settings_settings_screen -->|imports| nlib_auth
nscreen_settings_settings_screen -->|imports| nlib_browser
nscreen_settings_settings_screen -->|imports| nlib_confirm
nscreen_settings_settings_screen -->|imports| nlib_consent
nscreen_settings_settings_screen -->|imports| nlib_crash
nscreen_settings_settings_screen -->|imports| nlib_i18n
nscreen_settings_settings_screen -->|imports| nlib_payments
nscreen_settings_settings_screen -->|imports| nlib_privacy
nscreen_settings_settings_screen -->|imports| nlib_privacy_categories
nscreen_settings_settings_screen -->|imports| nlib_readynative
nscreen_settings_settings_screen -->|imports| nlib_store_review
nscreen_settings_settings_screen -->|imports| nscreen_settings_developer_tools
nscreen_settings_settings_screen -->|imports| nstore_consent
nscreen_settings_settings_screen -->|imports| nstore_onboarding
nscreen_weather_cities_screen -->|imports| nlib_analytics
nscreen_weather_cities_screen -->|imports| nlib_confirm
nscreen_weather_cities_screen -->|imports| nlib_i18n
nscreen_weather_cities_screen -->|imports| nlib_share
nscreen_weather_cities_screen -->|imports| nlib_weather_api
nscreen_weather_cities_screen -->|imports| nlib_weather_types
nscreen_weather_cities_screen -->|imports| nstore_weather
nscreen_weather_city_screen -->|imports| nlib_i18n
nscreen_weather_city_screen -->|imports| nlib_weather_types
nscreen_weather_city_screen -->|imports| nstore_weather
nscreen_weather_use_pro -->|imports| nlib_crash
nscreen_weather_use_pro -->|imports| nlib_payments
nscreen_weather_weather_view -->|imports| nhook_use_forecast
nscreen_weather_weather_view -->|imports| nlib_analytics
nscreen_weather_weather_view -->|imports| nlib_i18n
nscreen_weather_weather_view -->|imports| nlib_push
nscreen_weather_weather_view -->|imports| nlib_share
nscreen_weather_weather_view -->|imports| nlib_weather_conditions
nscreen_weather_weather_view -->|imports| nlib_weather_format
nscreen_weather_weather_view -->|imports| nlib_weather_types
nscreen_weather_weather_view -->|imports| nlib_widgets
nscreen_weather_weather_view -->|imports| nstore_weather
nstore_consent -->|imports| nlib_storage
nstore_create_store -->|imports| nlib_storage_adapter
nstore_onboarding -->|imports| nlib_storage
nstore_review_prompt -->|imports| nlib_storage
nstore_theme_mode -->|imports| nlib_storage
nstore_weather -->|imports| nlib_storage
nstore_weather -->|imports| nlib_weather_types
nstore_weather -->|imports| nstore_create_store
nstore_zustand_storage -->|imports| nlib_storageHow to read it
Node ids are kind:name, so you can grep them: route:/examples/[slug],
screen:home/home-screen, lib:auth, env:EXPO_PUBLIC_API_URL, module:ui/nativewind5,
provider:QueryProvider.
| Edge | Reads as |
|---|---|
imports | this file imports that one through @/… |
provides | a module contributes a provider to src/providers.tsx |
renders | a route renders a screen, or a provider wraps the next one |
reads | something reads an env key |
configures | a module configures an Expo config plugin or an external service |
custom | you added it, through // @graph or docs/graph.extra.json |
The graph deliberately leaves out @/ui and @/components: every screen imports the primitive
kit, and an edge from all of them to one node tells you nothing.
Your own map
Your repo has this same picture in two files, both written by bun run gen:graph:
docs/ARCHITECTURE.md for reading and docs/graph.json for grepping. Regenerate them after
you add a route, a screen, a @/lib shim, a provider, a store, a hook or an env key:
bun run gen:graphbun run gen:graph --check exits 1 when the two files are stale; the shipped CI runs exactly
that until you finalize, and it's worth adding back to ci.yml after. Conventions covers how to put a node on the
graph that no file can imply.
The same map, as text
flowchart LR
subgraph modules["module"]
nmodule_data_react_query["data: react-query"]
nmodule_forms_react_hook_form["forms: react-hook-form"]
nmodule_i18n_i18next["i18n: i18next"]
nmodule_location_expo_location["location: expo-location"]
nmodule_onboarding_on["onboarding: on"]
nmodule_state_zustand["state: zustand"]
nmodule_storage_kv_store["storage: kv-store"]
nmodule_testing_jest["testing: jest"]
nmodule_ui_nativewind4["ui: nativewind4"]
end
subgraph providers["provider"]
nprovider_I18nProvider["I18nProvider"]
nprovider_QueryProvider["QueryProvider"]
nprovider_ToastHost["ToastHost"]
nprovider_UiThemeProvider["UiThemeProvider"]
end
subgraph routes["route"]
nroute__layout["/ (layout)"]
nroute__tabs___layout["/ (layout)"]
nroute__tabs__cities__layout["/cities (layout)"]
nroute__["/"]
nroute___not_found["/+not-found"]
nroute__cities["/cities"]
nroute__cities__id_["/cities/[id]"]
nroute__examples["/examples"]
nroute__examples__slug_["/examples/[slug]"]
nroute__examples_form["/examples/form"]
nroute__examples_i18n["/examples/i18n"]
nroute__examples_query["/examples/query"]
nroute__examples_store["/examples/store"]
nroute__explore["/explore"]
nroute__onboarding["/onboarding"]
nroute__settings["/settings"]
nroute_examples__layout["/examples (layout)"]
nroute_onboarding__layout["/onboarding (layout)"]
end
subgraph screens["screen"]
nscreen_examples_examples_screen["@/screens/examples/examples-screen"]
nscreen_examples_form_example_screen["@/screens/examples/form-example-screen"]
nscreen_examples_i18n_example_screen["@/screens/examples/i18n-example-screen"]
nscreen_examples_not_installed_screen["@/screens/examples/not-installed-screen"]
nscreen_examples_query_example_screen["@/screens/examples/query-example-screen"]
nscreen_examples_store_example_screen["@/screens/examples/store-example-screen"]
nscreen_explore_explore_screen["@/screens/explore/explore-screen"]
nscreen_home_home_screen["@/screens/home/home-screen"]
nscreen_onboarding_onboarding_screen["@/screens/onboarding/onboarding-screen"]
nscreen_settings_developer_tools["@/screens/settings/developer-tools"]
nscreen_settings_settings_screen["@/screens/settings/settings-screen"]
nscreen_weather_cities_screen["@/screens/weather/cities-screen"]
nscreen_weather_city_screen["@/screens/weather/city-screen"]
nscreen_weather_use_pro["@/screens/weather/use-pro"]
nscreen_weather_weather_view["@/screens/weather/weather-view"]
end
subgraph hooks["hook"]
nhook_use_auth_redirect["@/hooks/use-auth-redirect"]
nhook_use_example_query["@/hooks/use-example-query"]
nhook_use_forecast["@/hooks/use-forecast"]
nhook_use_onboarding_redirect["@/hooks/use-onboarding-redirect"]
nhook_use_sign_out_cleanup["@/hooks/use-sign-out-cleanup"]
end
subgraph stores["store"]
nstore_consent["@/stores/consent"]
nstore_create_store["@/stores/create-store"]
nstore_example_store["@/stores/example-store"]
nstore_onboarding["@/stores/onboarding"]
nstore_review_prompt["@/stores/review-prompt"]
nstore_theme_mode["@/stores/theme-mode"]
nstore_weather["@/stores/weather"]
nstore_zustand_storage["@/stores/zustand-storage"]
end
subgraph libs["lib"]
nlib_account_data["@/lib/account-data"]
nlib_analytics["@/lib/analytics"]
nlib_api_client["@/lib/api/client"]
nlib_auth["@/lib/auth"]
nlib_browser["@/lib/browser"]
nlib_cache["@/lib/cache"]
nlib_clipboard["@/lib/clipboard"]
nlib_confirm["@/lib/confirm"]
nlib_consent["@/lib/consent"]
nlib_crash["@/lib/crash"]
nlib_env["@/lib/env"]
nlib_i18n["@/lib/i18n"]
nlib_location["@/lib/location"]
nlib_native_toast["@/lib/native-toast"]
nlib_payments["@/lib/payments"]
nlib_privacy["@/lib/privacy"]
nlib_privacy_categories["@/lib/privacy-categories"]
nlib_push["@/lib/push"]
nlib_query["@/lib/query"]
nlib_readynative["@/lib/readynative"]
nlib_readynative_config["@/lib/readynative-config"]
nlib_share["@/lib/share"]
nlib_shims_account_data["@/lib/shims/account-data"]
nlib_shims_analytics["@/lib/shims/analytics"]
nlib_shims_auth["@/lib/shims/auth"]
nlib_shims_consent["@/lib/shims/consent"]
nlib_shims_crash["@/lib/shims/crash"]
nlib_shims_i18n["@/lib/shims/i18n"]
nlib_shims_location["@/lib/shims/location"]
nlib_shims_payments["@/lib/shims/payments"]
nlib_shims_push["@/lib/shims/push"]
nlib_shims_server_auth["@/lib/shims/server-auth"]
nlib_shims_tracking["@/lib/shims/tracking"]
nlib_shims_widgets["@/lib/shims/widgets"]
nlib_storage["@/lib/storage"]
nlib_storage_adapter["@/lib/storage-adapter"]
nlib_store_review["@/lib/store-review"]
nlib_tracking["@/lib/tracking"]
nlib_utils["@/lib/utils"]
nlib_weather_api["@/lib/weather/api"]
nlib_weather_conditions["@/lib/weather/conditions"]
nlib_weather_format["@/lib/weather/format"]
nlib_weather_types["@/lib/weather/types"]
nlib_widgets["@/lib/widgets"]
end
subgraph envs["env"]
nenv_EXPO_PUBLIC_API_URL["EXPO_PUBLIC_API_URL"]
nenv_EXPO_PUBLIC_APP_VARIANT["EXPO_PUBLIC_APP_VARIANT"]
end
nhook_use_example_query -->|imports| nlib_api_client
nhook_use_example_query -->|imports| nlib_env
nhook_use_example_query -->|reads| nenv_EXPO_PUBLIC_API_URL
nhook_use_forecast -->|imports| nlib_cache
nhook_use_forecast -->|imports| nlib_weather_api
nhook_use_forecast -->|imports| nlib_weather_types
nhook_use_onboarding_redirect -->|imports| nstore_onboarding
nhook_use_sign_out_cleanup -->|imports| nlib_auth
nhook_use_sign_out_cleanup -->|imports| nlib_crash
nhook_use_sign_out_cleanup -->|imports| nlib_privacy
nlib_api_client -->|imports| nlib_env
nlib_api_client -->|reads| nenv_EXPO_PUBLIC_API_URL
nlib_browser -->|imports| nlib_crash
nlib_cache -->|imports| nlib_storage
nlib_cache -->|imports| nlib_storage_adapter
nlib_clipboard -->|imports| nlib_crash
nlib_env -->|reads| nenv_EXPO_PUBLIC_API_URL
nlib_env -->|reads| nenv_EXPO_PUBLIC_APP_VARIANT
nlib_i18n -->|imports| nlib_storage
nlib_privacy -->|imports| nlib_analytics
nlib_privacy -->|imports| nlib_auth
nlib_privacy -->|imports| nlib_share
nlib_privacy -->|imports| nlib_storage
nlib_privacy_categories -->|imports| nlib_analytics
nlib_privacy_categories -->|imports| nlib_crash
nlib_privacy_categories -->|imports| nstore_consent
nlib_query -->|imports| nlib_privacy
nlib_share -->|imports| nlib_crash
nlib_shims_consent -->|imports| nstore_consent
nlib_storage -->|imports| nlib_storage_adapter
nlib_store_review -->|imports| nlib_crash
nlib_store_review -->|imports| nlib_readynative
nlib_store_review -->|imports| nstore_review_prompt
nmodule_data_react_query -->|provides| nprovider_QueryProvider
nmodule_i18n_i18next -->|provides| nprovider_I18nProvider
nprovider_I18nProvider -->|imports| nlib_i18n
nprovider_I18nProvider -->|renders| nprovider_ToastHost
nprovider_QueryProvider -->|imports| nlib_query
nprovider_QueryProvider -->|renders| nprovider_UiThemeProvider
nprovider_UiThemeProvider -->|renders| nprovider_I18nProvider
nroute__layout -->|imports| nhook_use_auth_redirect
nroute__layout -->|imports| nhook_use_onboarding_redirect
nroute__layout -->|imports| nhook_use_sign_out_cleanup
nroute__layout -->|imports| nlib_analytics
nroute__layout -->|imports| nstore_theme_mode
nroute__tabs___layout -->|imports| nlib_i18n
nroute__ -->|renders| nscreen_home_home_screen
nroute___not_found -->|imports| nlib_i18n
nroute__cities -->|renders| nscreen_weather_cities_screen
nroute__cities__id_ -->|renders| nscreen_weather_city_screen
nroute__examples -->|renders| nscreen_examples_examples_screen
nroute__examples__slug_ -->|renders| nscreen_examples_not_installed_screen
nroute__examples_form -->|renders| nscreen_examples_form_example_screen
nroute__examples_i18n -->|renders| nscreen_examples_i18n_example_screen
nroute__examples_query -->|renders| nscreen_examples_query_example_screen
nroute__examples_store -->|renders| nscreen_examples_store_example_screen
nroute__explore -->|renders| nscreen_explore_explore_screen
nroute__onboarding -->|renders| nscreen_onboarding_onboarding_screen
nroute__settings -->|renders| nscreen_settings_settings_screen
nscreen_examples_examples_screen -->|imports| nlib_i18n
nscreen_examples_form_example_screen -->|imports| nlib_i18n
nscreen_examples_i18n_example_screen -->|imports| nlib_i18n
nscreen_examples_not_installed_screen -->|imports| nlib_i18n
nscreen_examples_query_example_screen -->|imports| nhook_use_example_query
nscreen_examples_query_example_screen -->|imports| nlib_env
nscreen_examples_query_example_screen -->|imports| nlib_i18n
nscreen_examples_query_example_screen -->|reads| nenv_EXPO_PUBLIC_API_URL
nscreen_examples_store_example_screen -->|imports| nlib_i18n
nscreen_examples_store_example_screen -->|imports| nstore_example_store
nscreen_explore_explore_screen -->|imports| nlib_readynative
nscreen_home_home_screen -->|imports| nlib_cache
nscreen_home_home_screen -->|imports| nlib_i18n
nscreen_home_home_screen -->|imports| nlib_location
nscreen_home_home_screen -->|imports| nlib_weather_types
nscreen_home_home_screen -->|imports| nscreen_weather_weather_view
nscreen_home_home_screen -->|imports| nstore_weather
nscreen_onboarding_onboarding_screen -->|imports| nlib_i18n
nscreen_onboarding_onboarding_screen -->|imports| nlib_readynative
nscreen_onboarding_onboarding_screen -->|imports| nstore_onboarding
nscreen_settings_developer_tools -->|imports| nhook_use_onboarding_redirect
nscreen_settings_developer_tools -->|imports| nlib_auth
nscreen_settings_developer_tools -->|imports| nlib_consent
nscreen_settings_developer_tools -->|imports| nlib_crash
nscreen_settings_developer_tools -->|imports| nlib_env
nscreen_settings_developer_tools -->|imports| nlib_i18n
nscreen_settings_developer_tools -->|imports| nlib_payments
nscreen_settings_developer_tools -->|imports| nlib_privacy_categories
nscreen_settings_developer_tools -->|imports| nlib_push
nscreen_settings_developer_tools -->|imports| nstore_onboarding
nscreen_settings_developer_tools -->|reads| nenv_EXPO_PUBLIC_APP_VARIANT
nscreen_settings_settings_screen -->|imports| nhook_use_onboarding_redirect
nscreen_settings_settings_screen -->|imports| nlib_account_data
nscreen_settings_settings_screen -->|imports| nlib_analytics
nscreen_settings_settings_screen -->|imports| nlib_auth
nscreen_settings_settings_screen -->|imports| nlib_browser
nscreen_settings_settings_screen -->|imports| nlib_confirm
nscreen_settings_settings_screen -->|imports| nlib_consent
nscreen_settings_settings_screen -->|imports| nlib_crash
nscreen_settings_settings_screen -->|imports| nlib_i18n
nscreen_settings_settings_screen -->|imports| nlib_payments
nscreen_settings_settings_screen -->|imports| nlib_privacy
nscreen_settings_settings_screen -->|imports| nlib_privacy_categories
nscreen_settings_settings_screen -->|imports| nlib_readynative
nscreen_settings_settings_screen -->|imports| nlib_store_review
nscreen_settings_settings_screen -->|imports| nscreen_settings_developer_tools
nscreen_settings_settings_screen -->|imports| nstore_consent
nscreen_settings_settings_screen -->|imports| nstore_onboarding
nscreen_weather_cities_screen -->|imports| nlib_analytics
nscreen_weather_cities_screen -->|imports| nlib_confirm
nscreen_weather_cities_screen -->|imports| nlib_i18n
nscreen_weather_cities_screen -->|imports| nlib_share
nscreen_weather_cities_screen -->|imports| nlib_weather_api
nscreen_weather_cities_screen -->|imports| nlib_weather_types
nscreen_weather_cities_screen -->|imports| nstore_weather
nscreen_weather_city_screen -->|imports| nlib_i18n
nscreen_weather_city_screen -->|imports| nlib_weather_types
nscreen_weather_city_screen -->|imports| nstore_weather
nscreen_weather_use_pro -->|imports| nlib_crash
nscreen_weather_use_pro -->|imports| nlib_payments
nscreen_weather_weather_view -->|imports| nhook_use_forecast
nscreen_weather_weather_view -->|imports| nlib_analytics
nscreen_weather_weather_view -->|imports| nlib_i18n
nscreen_weather_weather_view -->|imports| nlib_push
nscreen_weather_weather_view -->|imports| nlib_share
nscreen_weather_weather_view -->|imports| nlib_weather_conditions
nscreen_weather_weather_view -->|imports| nlib_weather_format
nscreen_weather_weather_view -->|imports| nlib_weather_types
nscreen_weather_weather_view -->|imports| nlib_widgets
nscreen_weather_weather_view -->|imports| nstore_weather
nstore_consent -->|imports| nlib_storage
nstore_create_store -->|imports| nlib_storage_adapter
nstore_onboarding -->|imports| nlib_storage
nstore_review_prompt -->|imports| nlib_storage
nstore_theme_mode -->|imports| nlib_storage
nstore_weather -->|imports| nlib_storage
nstore_weather -->|imports| nlib_weather_types
nstore_weather -->|imports| nstore_create_store
nstore_zustand_storage -->|imports| nlib_storageFor agents
How Claude Code, Cursor or any coding agent should read a ReadyNative app - the graph, the shims, the generated files and the bundled skills.
Conventions
The rules a ReadyNative app expects you to follow: the @/lib shim contract, where code lives, the files setup owns, how to extend the graph