{"id":18762594,"url":"https://github.com/hummingbird-me/kitsu-mobile","last_synced_at":"2026-03-06T20:32:28.778Z","repository":{"id":22890854,"uuid":"91606387","full_name":"hummingbird-me/kitsu-mobile","owner":"hummingbird-me","description":"📱 Kitsu mobile app for iOS and Android","archived":false,"fork":false,"pushed_at":"2024-09-22T22:25:23.000Z","size":65129,"stargazers_count":154,"open_issues_count":22,"forks_count":36,"subscribers_count":12,"default_branch":"develop","last_synced_at":"2025-10-23T19:45:15.656Z","etag":null,"topics":["anime","hacktoberfest","kitsu","kitsu-mobile","manga","react-native"],"latest_commit_sha":null,"homepage":"https://kitsu.io","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/hummingbird-me.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}},"created_at":"2017-05-17T18:11:00.000Z","updated_at":"2025-10-08T04:12:57.000Z","dependencies_parsed_at":"2024-09-08T07:31:13.374Z","dependency_job_id":"b4d6e6cb-4c4f-4879-ade8-64429508e0fe","html_url":"https://github.com/hummingbird-me/kitsu-mobile","commit_stats":null,"previous_names":[],"tags_count":12,"template":false,"template_full_name":null,"purl":"pkg:github/hummingbird-me/kitsu-mobile","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hummingbird-me%2Fkitsu-mobile","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hummingbird-me%2Fkitsu-mobile/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hummingbird-me%2Fkitsu-mobile/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hummingbird-me%2Fkitsu-mobile/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/hummingbird-me","download_url":"https://codeload.github.com/hummingbird-me/kitsu-mobile/tar.gz/refs/heads/develop","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hummingbird-me%2Fkitsu-mobile/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30196173,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-06T19:07:06.838Z","status":"ssl_error","status_checked_at":"2026-03-06T18:57:34.882Z","response_time":250,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["anime","hacktoberfest","kitsu","kitsu-mobile","manga","react-native"],"created_at":"2024-11-07T18:22:15.076Z","updated_at":"2026-03-06T20:32:28.739Z","avatar_url":"https://github.com/hummingbird-me.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Kitsu Mobile\n\n---\n\n**\u003cp align=\"center\"\u003eThis is our mobile repository. It contains the Expo (React Native) app.\u003cbr /\u003eCheck out the [tools], [web], [server] and [api docs] repositories.\u003c/p\u003e**\n\n[tools]: https://github.com/hummingbird-me/kitsu-tools\n[web]: https://github.com/hummingbird-me/hummingbird-client\n[server]: https://github.com/hummingbird-me/kitsu-server\n[api docs]: https://github.com/hummingbird-me/api-docs\n\n---\n\n## Setup\n\nInstall [Node 22](https://nodejs.org/en/download) and\n[Ruby 3.3](https://www.ruby-lang.org/en/documentation/installation/).\n\nFollow the [Expo setup guide](https://docs.expo.dev/get-started/set-up-your-environment/). Make sure\nto select your intended platform (iOS or Android), \"Development Client\" (not \"Expo Go\"), and uncheck\nExpo Application Services (EAS), which we only really use for release builds right now.\n\nRemember: this is a cross-platform app, so you can develop with Android on any OS, or iOS on a Mac.\nIf you don't have a Mac, just develop on Android and let us know so we can test your stuff on iOS!\n\nAlso, they don't mention it everywhere, but [Expo Orbit](https://docs.expo.dev/develop/tools/#orbit)\nis a great tool for managing your development environment, especially if you're testing against\nmultiple emulators!\n\n### Running it\n\n1. Run `npm install`\n2. Run `bundle install`\n3. Run `npx expo prebuild` to generate the native app code\n4. Run `npx expo run:ios` or `npx expo run:android` to start the app in an emulator\n   - If you're doing both at the same time, you can run `npx expo start` to start the Metro bundler,\n     then run the above `run:*` commands in separate tabs with `--no-bundler` to skip starting the\n     bundler again for each OS.\n   - If you're running on a physical device, you can also pass `--device` to the `run:*` commands.\n\n### Navigating the Codebase\n\nWhile Kitsu is an Expo application, it's inherited a lot of cruft from the React Native days. As\nsuch, the codebase is structured a bit oddly right now as we work to modernize it.\n\n#### Entry Point\n\nThe application starts at `index.js`, which pretty much just calls the top level `App` component and\nregisters it as the root.\n\n#### Application Source Code\n\n- [`src/App.tsx`](./src/App.tsx) — the main application component, renders the initializer,\n  contexts, and navigator.\n- [`src/assets/`](./src/assets/) — static assets like icons, illustrations, and animations imported\n  by the application.\n- [`src/components/`](./src/components/) — common, reusable components\n  - [`src/components/content/`](./src/components/content/) — simple components for rendering\n    content. Generally have minimal interactivity logic, but may navigate or contain other\n    interactive components.\n  - [`src/components/controls/`](./src/components/controls/) — interactive components, such as\n    inputs, buttons, checkboxes, switches, etc.\n  - [`src/components/feedback/`](./src/components/feedback/) — components for providing feedback to\n    the user, such as toasts, modals, and loading spinners. Capitalized until we replace the\n    Feedback component with a more modern solution. Please pretend you do not see it.\n- [`src/screens/`](./src/screens/) — components rendering a whole screen in the application.\n- [`src/navigation/`](./src/navigation/) — the application's navigation setup, including the nested\n  navigators for the main app, onboarding flow, modals, etc.\n- [`src/contexts/`](./src/contexts/) — React contexts for sharing state between components and\n  initializing said shared state (loading account, loading locale data, etc.)\n- [`src/initializers/`](./src/initializers/) — imperative code which runs during app boot, such as\n  loading fonts, setting up Android Edge-to-Edge mode, initializing Sentry, etc. Gets wrapped by the\n  [`Initializer`](./src/screens/BootAnimation/Initializer.tsx) component (which is also our\n  top-level suspense and error boundary).\n- [`src/graphql/`](./src/graphql/) — GraphQL support code, such as the generated schema types,\n  scalars, and urql exchanges.\n- [`src/hooks/`](./src/hooks/) — custom react hooks for the application\n- [`src/locales/`](./src/locales/) — data for every locale we support (translations, date-fn\n  locales, zxcvbn-ts locales, etc.)\n- [`src/errors/`](./src/errors/) — all our error subclasses\n- [`src/utils/`](./src/utils/) — non-hook utility functions and classes. Much of this is still\n  legacy code, beware.\n- [`src/store/`](./src/store/) — the legacy Redux store, which we're in the process of replacing\n  with Urql and React Contexts and useState. We still have Redux installed and configured, so if\n  it's helpful you can still refactor an existing set of actions to `createSlice` and\n  `createAsyncThunk`, but it's often faster to just ditch it entirely.\n\n#### Key Libraries\n\n- **Language:** [TypeScript](https://www.typescriptlang.org/)\n- **Framework:** [Expo](https://expo.dev/) (based on [React Native](https://reactnative.dev/))\n- **Testing:** [Jest](https://jestjs.io/) w/ [React Testing Library](https://testing-library.com/docs/react-testing-library/intro/)\n- **Navigation:** [React Navigation](https://reactnavigation.org) v7 (but lots of dead code references\n  [React Native Navigation](https://wix.github.io/react-native-navigation/) still)\n- **GraphQL Client:** [Urql](https://formidable.com/open-source/urql/) with\n  [Graphcache](https://formidable.com/open-source/urql/docs/graphcache/) enabled and\n  [gql.tada](https://gql-tada.0no.co) for typing.\n- **Internationalization/Localization:** [React Intl](https://formatjs.io/docs/react-intl/)\n- **Time:** [date-fns](https://date-fns.org)\n\n#### Debugging\n\nExpo has an [excellent guide on debugging](https://docs.expo.dev/debugging/tools/) that you can use!\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhummingbird-me%2Fkitsu-mobile","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhummingbird-me%2Fkitsu-mobile","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhummingbird-me%2Fkitsu-mobile/lists"}