{"id":19220095,"url":"https://github.com/nativescript-community/expo-nativescript","last_synced_at":"2025-05-13T01:12:44.008Z","repository":{"id":94067888,"uuid":"324208945","full_name":"nativescript-community/expo-nativescript","owner":"nativescript-community","description":"A monorepo of various libraries from the Expo ecosystem, ported to NativeScript.","archived":false,"fork":false,"pushed_at":"2020-12-24T17:51:09.000Z","size":1617,"stargazers_count":24,"open_issues_count":0,"forks_count":1,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-05-13T01:12:36.730Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/nativescript-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}},"created_at":"2020-12-24T17:47:34.000Z","updated_at":"2025-02-13T16:55:44.000Z","dependencies_parsed_at":"2023-07-26T16:15:51.320Z","dependency_job_id":null,"html_url":"https://github.com/nativescript-community/expo-nativescript","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nativescript-community%2Fexpo-nativescript","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nativescript-community%2Fexpo-nativescript/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nativescript-community%2Fexpo-nativescript/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nativescript-community%2Fexpo-nativescript/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nativescript-community","download_url":"https://codeload.github.com/nativescript-community/expo-nativescript/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253851071,"owners_count":21973674,"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","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":[],"created_at":"2024-11-09T14:33:59.820Z","updated_at":"2025-05-13T01:12:43.981Z","avatar_url":"https://github.com/nativescript-community.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# @nativescript-community/expo-nativescript\n\n## About\n\nThis is a monorepo of various libraries from the [Expo ecosystem](https://docs.expo.io/versions/latest/), which is primarily a React Native ecosystem, adapted for use with NativeScript. The endgame is for the Expo ecosystem (or at least Expo [Unimodules](https://www.youtube.com/watch?v=-9CJZRv7uOY), which are [a large part of it](https://docs.expo.io/bare/unimodules-full-list/)) to be fully supported on NativeScript as it is on React Native. But this is a long way off for now!\n\n## Getting involved\n\nFor more information on this project (and particularly if you'd like to help – especially so if it's for getting the Android side working), you can contact Jamie Birch on Twitter via [@LinguaBrowse](https://twitter.com/intent/follow?screen_name=LinguaBrowse), or on the [NativeScript Slack](https://app.slack.com/client/T0L97VCSY/CJ2B77CJ1) in the `#react` channel, or on the [NativeScript Discord](https://discord.com/channels/603595811204366337/606457751995940866), again in the `#react` channel.\n\n\u003cp align=\"center\"\u003e\n    \u003ca href=\"https://twitter.com/intent/follow?screen_name=LinguaBrowse\"\u003e\n        \u003cimg src=\"https://img.shields.io/twitter/follow/LinguaBrowse.svg?style=social\u0026logo=twitter\"/\u003e\n    \u003c/a\u003e\n\u003c/p\u003e\n\n## ⚠️ Before you start ⚠️\n\nBe warned: It's in proof-of-concept stage right now. Expo \u003ca href=\"https://docs.expo.io/versions/v39.0.0/sdk/contacts/\"\u003eContacts\u003c/a\u003e (and Expo \u003ca href=\"https://docs.expo.io/versions/v39.0.0/sdk/permissions/\"\u003ePermissions\u003c/a\u003e, which it depends upon) is working fully on iOS. Android support is blocked, however – [see details](packages/expo-nativescript-adapter/README.md) in the `expo-nativescript-adapter` project.\n\nPlease don't look too closely at [apps/demo](apps/demo) and [apps/demo-angular](apps/demo-angular), as I have only been developing with [demo-react](apps/demo-react). They're there only as templates to be filled in properly later.\n\nI hope at some point to simplify this monorepo by removing the packages [expo-permissions](packages/expo-permissions) and [expo-nativescript-react-native-shim](packages/expo-nativescript-react-native-shim), which only exist to support Android. But for now, we have to put up with them.\n\nAnd as Android support still isn't working even with best-effort hacks, I'll only be publishing [expo-nativescript-adapter](packages/expo-nativescript-adapter), [expo-permissions-nativescript-plugin](packages/expo-permissions-nativescript-plugin), and [expo-contacts-nativescript-plugin](packages/expo-contacts-nativescript-plugin) to npm for now.\n\n## Monorepo setup\n\nRun these commands:\n\n```sh\n# Installs all dependencies (will likely take several minutes):\nnpm run setup\n\n# Builds the packages that the demo apps will use:\nnpm start\n# Select: @nativescript-community.build-all\n\n# Runs the React demo on an iOS simulator (or device, if connected):\nnpm start\n# Select: apps.demo-react.ios\n```\n\n# What are these packages?\n\nAs this project grows, we aim to implement, for each Expo Unimodule such as `expo-contacts`, a corresponding `@nativescript-community/expo-contacts-nativescript-plugin` NativeScript plugin.\n\n\u003ctable\u003e\n    \u003ctbody\u003e\n        \u003ctr\u003e\n            \u003ctd align=\"right\"\u003e\n                \u003ca href=\"/nativescript-community/expo-nativescript/packages/expo-contacts-nativescript-plugin\"\u003eexpo-contacts-nativescript-plugin\u003c/a\u003e\n            \u003c/td\u003e\n            \u003ctd align=\"left\"\u003e\n                The Expo SDK's \u003ca href=\"https://docs.expo.io/versions/v39.0.0/sdk/contacts/\"\u003eContacts\u003c/a\u003e API, implemented for NativeScript, using the exact same \u003ca href=\"https://github.com/expo/expo/tree/master/packages/expo-contacts\"\u003eexpo-contacts\u003c/a\u003e native code and largely a copy-paste of the TypeScript code. Developed with reference to the now-removed \u003ca href=\"https://github.com/expo/expo/tree/a2aad4ea6e9f327d03a9852102e18387420f3254/packages/expo-contacts-flutter-plugin\"\u003eexpo-contacts-flutter-plugin\u003c/a\u003e.\n            \u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n            \u003ctd align=\"right\"\u003e\n                \u003ca href=\"/nativescript-community/expo-nativescript/packages/expo-nativescript-adapter\"\u003eexpo-nativescript-adapter\u003c/a\u003e\n            \u003c/td\u003e\n            \u003ctd align=\"left\"\u003e\n                An implementation of all the Expo APIs (e.g. module registration and function-calling) for NativeScript. Essentially a port of \u003ca href=\"https://github.com/expo/expo/tree/master/packages/%40unimodules/react-native-adapter\"\u003e@unimodules/react-native-adapter\u003c/a\u003e to Nativescript (with reference to the now-removed \u003ca href=\"https://github.com/expo/expo/tree/a2aad4ea6e9f327d03a9852102e18387420f3254/packages/expo-flutter-adapter\"\u003eexpo-flutter-adapter\u003c/a\u003e).\n            \u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n            \u003ctd align=\"right\"\u003e\n                \u003ca href=\"/nativescript-community/expo-nativescript/packages/expo-nativescript-react-native-shim\"\u003eexpo-nativescript-react-native-shim\u003c/a\u003e\n            \u003c/td\u003e\n            \u003ctd align=\"left\"\u003e\n                A shim for any interfaces from the React Native ecosystem that Expo plugins rely upon. Currently only relevant to the Android implementation of expo-permissions, implementing the \u003ca href=\"https://github.com/facebook/react-native/blob/3b31e69e284074da72108edfb11e41ee74d7100e/ReactAndroid/src/main/java/com/facebook/react/modules/core/PermissionAwareActivity.java\"\u003ePermissionAwareActivity\u003c/a\u003e and \u003ca href=\"https://github.com/facebook/react-native/blob/3b31e69e284074da72108edfb11e41ee74d7100e/ReactAndroid/src/main/java/com/facebook/react/modules/core/PermissionListener.java\"\u003ePermissionListener\u003c/a\u003e interfaces.\n            \u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n            \u003ctd align=\"right\"\u003e\n                \u003ca href=\"/nativescript-community/expo-nativescript/packages/expo-permissions\"\u003eexpo-permissions\u003c/a\u003e\n            \u003c/td\u003e\n            \u003ctd align=\"left\"\u003e\n                A fork of \u003ca href=\"https://github.com/expo/expo/tree/master/packages/expo-permissions\"\u003eexpo-permissions\u003c/a\u003e (distinguished by namespacing it under the @nativescript-community organisation), differing only by changing the Android code to make it easier for NativeScript to build. No success yet.\n            \u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n            \u003ctd align=\"right\"\u003e\n                \u003ca href=\"/nativescript-community/expo-nativescript/packages/expo-permissions-nativescript-plugin\"\u003eexpo-permissions-nativescript-plugin\u003c/a\u003e\n            \u003c/td\u003e\n            \u003ctd align=\"left\"\u003e\n                The Expo SDK's \u003ca href=\"https://docs.expo.io/versions/v39.0.0/sdk/permissions/\"\u003ePermissions\u003c/a\u003e API, implemented for NativeScript, using the exact same \u003ca href=\"https://github.com/expo/expo/tree/master/packages/expo-permissions\"\u003eexpo-permissions\u003c/a\u003e native code and largely a copy-paste of the TypeScript code. Developed with reference to the now-removed \u003ca href=\"https://github.com/expo/expo/tree/a2aad4ea6e9f327d03a9852102e18387420f3254/packages/expo-permissions-flutter-plugin\"\u003eexpo-permissions-flutter-plugin\u003c/a\u003e.\n            \u003c/td\u003e\n        \u003c/tr\u003e\n    \u003c/tbody\u003e\n\u003c/table\u003e\n\n# How to operate this monorepo?\n\nThis workspace manages the suite of plugins listed above.\n\nIn general, when in doubt with what to do, just `npm start`.\n\n## How to add a new package to workspace?\n\n```\nnpm run add\n```\n\nAt the prompt, enter the name of the new package.\n\n- This adds a plugin harness in `packages` with the necessary boilerplate to just start developing\n- Updates all demo app flavors to support demoing the new package\n- Adds shared code in `tools/demo` where you can write demo code **once** and share across all demo flavors\n- Updates build tooling to support the new package\n- Updates the `npm start` interactive display\n- Updates the README here to list the new package\n\n## How to add Angular compatibility to a package\n\n```\nnpm run add-angular\n```\n\nAt the prompt, enter the name of the package to add an `angular` folder to it with the necessary boilerplate to provide Angular support to the package.\n\n## How to focus on just 1 package to develop in isolation\n\n```\nnpm start\n```\n\n- Choose the focus commands for the package you wish to focus on and hit enter.\n- All the demo app's will be updated to isolate that 1 package and for supported IDE's (currently VS Code), the source code will also become isolated in the workspace.\n\nNote: _good to always clean the demo you plan to run after focusing. (You can clean any demo from `npm start` as well)_\n\n## How to publish packages?\n\n```\nnpm run publish-packages\n```\n\n- You will be prompted for the package names to publish. Leaving blank and hitting enter will publish them all.\n- You will then be prompted for the version to use. Leaving blank will auto bump the patch version (it also handles prerelease types like alpha, beta, rc, etc. - It even auto tags the corresponding prelease type on npm).\n- You will then be given a brief sanity check 🧠😊\n\n\u003ch3 align=\"center\"\u003eMade with ❤️\u003c/h3\u003e\n\n## Why don't we hoist `@nativescript/android` and `@nativescript/ios` in this monorepo?\n\nSee https://github.com/NativeScript/nativescript-cli/issues/5444\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnativescript-community%2Fexpo-nativescript","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnativescript-community%2Fexpo-nativescript","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnativescript-community%2Fexpo-nativescript/lists"}