{"id":25024907,"url":"https://github.com/expo-community/expo-firebase-starter","last_synced_at":"2025-10-08T07:06:23.687Z","repository":{"id":39670164,"uuid":"206244665","full_name":"expo-community/expo-firebase-starter","owner":"expo-community","description":"🔥⚛️📱 Expo + Firebase Starter Kit","archived":false,"fork":false,"pushed_at":"2025-04-07T21:20:27.000Z","size":3701,"stargazers_count":522,"open_issues_count":5,"forks_count":132,"subscribers_count":23,"default_branch":"master","last_synced_at":"2025-05-22T13:30:25.143Z","etag":null,"topics":["authentication","expo","expo-firebase","firebase","firestore","formik","react-native","react-navigation","yup"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/expo-community.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2019-09-04T06:10:54.000Z","updated_at":"2025-05-19T19:03:43.000Z","dependencies_parsed_at":"2024-03-30T20:31:37.628Z","dependency_job_id":"493468ac-5316-4a97-bbfa-14620e2ed5a7","html_url":"https://github.com/expo-community/expo-firebase-starter","commit_stats":null,"previous_names":[],"tags_count":19,"template":false,"template_full_name":null,"purl":"pkg:github/expo-community/expo-firebase-starter","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/expo-community%2Fexpo-firebase-starter","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/expo-community%2Fexpo-firebase-starter/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/expo-community%2Fexpo-firebase-starter/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/expo-community%2Fexpo-firebase-starter/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/expo-community","download_url":"https://codeload.github.com/expo-community/expo-firebase-starter/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/expo-community%2Fexpo-firebase-starter/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":278903036,"owners_count":26065786,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-08T02:00:06.501Z","response_time":56,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["authentication","expo","expo-firebase","firebase","firestore","formik","react-native","react-navigation","yup"],"created_at":"2025-02-05T16:33:20.760Z","updated_at":"2025-10-08T07:06:23.658Z","avatar_url":"https://github.com/expo-community.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# expo-firebase-starter 🔥\n\n![Supports Expo iOS](https://img.shields.io/badge/iOS-4630EB.svg?style=flat-square\u0026logo=APPLE\u0026labelColor=999999\u0026logoColor=fff)\n![Supports Expo Android](https://img.shields.io/badge/Android-4630EB.svg?style=flat-square\u0026logo=ANDROID\u0026labelColor=A4C639\u0026logoColor=fff)\n[![runs with Expo Go](https://img.shields.io/badge/Runs%20with%20Expo%20Go-4630EB.svg?style=flat-square\u0026logo=EXPO\u0026labelColor=f3f3f3\u0026logoColor=000)](https://expo.dev/client)\n\nIs a quicker way to start with Expo + Firebase (using JS SDK) projects. It includes:\n\n- based on Expo SDK `50`\n- navigation using `react-navigation` 6.x.x\n- Firebase JS SDK v9\n- Firebase as the backend for email auth\n- custom and reusable components\n- custom hook to toggle password field visibility on a TextInput\n- handles server errors using Formik\n- Login, Signup \u0026 Password Reset form built using Formik \u0026 yup\n- show/hide the Password Field's visibility 👁\n- uses a custom Provider using Context API \u0026 Firebase's `onAuthStateChanged` handler to check the user's auth state with\n- handles Forgot Password Reset using the Firebase email method\n- uses [Expo Vector Icons](https://icons.expo.fyi/)\n- uses [KeyboardAwareScrollView](https://github.com/APSL/react-native-keyboard-aware-scroll-view) package to handle keyboard appearance and automatically scrolls to focused TextInput\n- uses `dotenv` and `expo-constants` packages to manage environment variables (so that they are not exposed on public repositories)\n- all components are now functional components and use [React Hooks](https://reactjs.org/docs/hooks-intro.html)\n\n## Installation\n\n1. Create a new project using the firebase starter template.\n\n```bash\nnpx create-react-native-app --template https://github.com/expo-community/expo-firebase-starter\n```\n\n2. Rename the file `example.env` to `.env`\n3. Update `.env` with your own configuration, e.g.:\n\n```shell\n# Rename this file to \".env\" before use\n# Replace XXXX's with your own Firebase config keys\nAPI_KEY=XXXX\nAUTH_DOMAIN=XXXX\nPROJECT_ID=XXXX\nSTORAGE_BUCKET=XXXX\nMESSAGING_SENDER_ID=XXXX\nAPP_ID=XXXX\n```\n\n## Run project\n\nTo start the development server and run your project:\n\n```\nnpx expo start\n```\n\nAlternate to using Expo Go, if you are building more than a hobby project or a prototype, make sure you [create a development build](https://docs.expo.dev/develop/development-builds/introduction/). You can either [locally compile your project](https://docs.expo.dev/guides/local-app-development/#local-builds-with-expo-dev-client) or [use EAS](https://docs.expo.dev/develop/development-builds/create-a-build/).\n\nTo locally compile your app, run:\n\n```\n# Build native Android project\nnpx expo run:android\n\n# Build native iOS project\nnpx expo run:ios\n```\n\n## File Structure\n\n```shell\nExpo Firebase Starter\n├── assets ➡️ All static assets, includes app logo\n├── components ➡️ All re-suable UI components for form screens\n│   └── Button.js ➡️ Custom Button component using Pressable, comes with two variants and handles opacity\n│   └── TextInput.js ➡️ Custom TextInput component that supports left and right cons\n│   └── Icon.js ➡️ Icon component\n│   └── FormErrorMessage.js ➡️ Component to display server errors from Firebase\n│   └── LoadingIndicator.js ➡️ Loading indicator component\n│   └── Logo.js ➡️ Logo component\n│   └── View.js ➡️ Custom View component that supports safe area views\n├── hooks ➡️ All custom hook components\n│   └── useTogglePasswordVisibility.js ➡️ A custom hook that toggles password visibility on a TextInput component on a confirm password field\n├── config ➡️ All configuration files\n│   └── firebase.js ➡️ Configuration file to initialize firebase with firebaseConfig and auth\n│   └── images.js ➡️ Require image assets, reusable values across the app\n│   └── theme.js ➡️ Default set of colors, reusable values across the app\n├── providers ➡️ All custom providers that use React Context API\n│   └── AuthenticatedUserProvider.js ➡️ An Auth User Context component that shares Firebase user object when logged-in\n├── navigation\n│   └── AppStack.js ➡️ Protected routes such as Home screen\n│   └── AuthStack.js ➡️ Routes such as Login screen, when the user is not authenticated\n│   └── RootNavigator.js ➡️ Switch between Auth screens and App screens based on Firebase user logged-in state\n├── screens\n│   └── ForgotPassword.js ➡️ Forgot Password screen component\n│   └── HomeScreen.js ➡️ Protected route/screen component\n│   └── LoginScreen.js ➡️ Login screen component\n│   └── SignupScreen.js ➡️ Signup screen component\n├── App.js ➡️ Entry Point for Mobile apps, wrap all providers here\n├── app.config.js ➡️ Expo config file\n└── babel.config.js ➡️ Babel config (should be using `babel-preset-expo`)\n```\n\n## Screens\n\nMain screens:\n\n- Login\n- Signup\n- Forgot password\n- Home (Bare Minimum) with a logout button\n\n\u003cimg src=\"./screenshots/img1.png\" height=\"640\" alt=\"Login screen with validation\"\u003e\n\n\u003cimg src=\"./screenshots/img2.png\" height=\"640\" alt=\"Successful sign up attempt\"\u003e\n\n\u003cimg src=\"./screenshots/img3.png\" height=\"640\" alt=\"Forgot password screen\"\u003e\n\n\u003cimg src=\"./screenshots/img4.png\" height=\"640\" alt=\"Validation on Signup screens\"\u003e\n\n## Development builds and React Native Firebase library\n\nThis project uses Firebase JS SDK, which doesn't support all services (such as Crashlytics, Dynamic Links, and Analytics). However, you can use the `react-native-firebase` library in an Expo project by [creating a development build](https://docs.expo.dev/develop/development-builds/introduction/).\n\nBoth of these libraries can satisfy different project requirements. To learn about the differences between using Firebase JS SDK and React Native Firebase library when building your app with Expo, see the following sections from Expo's official documentation:\n\n- [When to use Firebase JS SDK](https://docs.expo.dev/guides/using-firebase/#when-to-use-firebase-js-sdk)\n- [When to use React Native Firebase](https://docs.expo.dev/guides/using-firebase/#when-to-use-react-native-firebase)\n\n---\n\n\u003cstrong\u003eBuilt with 💜 by [@amanhimself](https://twitter.com/amanhimself)\u003c/strong\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fexpo-community%2Fexpo-firebase-starter","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fexpo-community%2Fexpo-firebase-starter","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fexpo-community%2Fexpo-firebase-starter/lists"}