{"id":18808570,"url":"https://github.com/circlefin/w3s-react-native-sdk","last_synced_at":"2026-03-04T10:03:39.341Z","repository":{"id":234239272,"uuid":"763582531","full_name":"circlefin/w3s-react-native-sdk","owner":"circlefin","description":"The Circle React Native SDK enables your mobile application to provide user-controlled programmable wallets. By integrating this SDK, your users can securely input sensitive data like PINs or security answers. The SDK encrypts the request body using a secret key, protecting your users' information.","archived":false,"fork":false,"pushed_at":"2026-02-26T11:55:39.000Z","size":257,"stargazers_count":9,"open_issues_count":9,"forks_count":10,"subscribers_count":5,"default_branch":"master","last_synced_at":"2026-02-26T14:40:43.431Z","etag":null,"topics":["web3"],"latest_commit_sha":null,"homepage":"","language":"Swift","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/circlefin.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":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":"COPYRIGHT","agents":null,"dco":null,"cla":null}},"created_at":"2024-02-26T15:07:26.000Z","updated_at":"2026-02-25T04:21:28.000Z","dependencies_parsed_at":"2024-12-09T17:38:43.050Z","dependency_job_id":"a71ea461-e483-432b-ada7-dbce45076c1c","html_url":"https://github.com/circlefin/w3s-react-native-sdk","commit_stats":null,"previous_names":["circlefin/w3s-react-native-sdk"],"tags_count":12,"template":false,"template_full_name":null,"purl":"pkg:github/circlefin/w3s-react-native-sdk","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/circlefin%2Fw3s-react-native-sdk","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/circlefin%2Fw3s-react-native-sdk/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/circlefin%2Fw3s-react-native-sdk/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/circlefin%2Fw3s-react-native-sdk/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/circlefin","download_url":"https://codeload.github.com/circlefin/w3s-react-native-sdk/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/circlefin%2Fw3s-react-native-sdk/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30078307,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-04T08:01:56.766Z","status":"ssl_error","status_checked_at":"2026-03-04T08:00:42.919Z","response_time":59,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5: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":["web3"],"created_at":"2024-11-07T23:13:22.708Z","updated_at":"2026-03-04T10:03:39.334Z","avatar_url":"https://github.com/circlefin.png","language":"Swift","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Circle User-Controlled Wallets React Native SDK\n\n\u003e SDK for integrating Circle's user-controlled wallet into React Native applications\n\n\u003e [!IMPORTANT]\n\u003e This SDK supports both Expo and bare React Native projects. Select the appropriate guide based on your project type.\n\u003e\n\u003e - **Bare React Native** (manages native code manually) → Go to [Bare React Native Integration Guide](./BARE_REACT_NATIVE_GUIDE.md)\n\u003e - **Expo project** (uses `expo prebuild` and has `app.json`/`app.config.js`) ↓ Continue below\n\n---\n\n## Migrating from SDK v1 (Bare React Native)\n\nIf you have an existing bare React Native project using SDK v1 and want to upgrade to SDK v2, see the [SDK v1 Migration Guide](https://github.com/circlefin/w3s-react-native-sample-app-wallets/blob/master/MIGRATION_GUIDE.md).\n\nYou can also find the SDK v1 sample app in the sample app repository's [sdk-v1 branch](https://github.com/circlefin/w3s-react-native-sample-app-wallets/tree/sdk-v1).\n\n## System Requirements\n\n| Platform     | Minimum Version | Recommended Version |\n| ------------ | --------------- | ------------------- |\n| React Native | 0.60+           | 0.76-0.81           |\n| iOS          | 15.1+           | iOS 17+             |\n| Android      | API 21+         | API 33+             |\n| Expo SDK     | 49+             | 53+                 |\n\n## Installation\n\n\u003e [!IMPORTANT]\n\u003e **Prerequisites**: This SDK uses native modules and requires a [development build](https://docs.expo.dev/develop/development-builds/introduction). Expo Go is not supported.\n\nFollow these steps in order. The SDK will be fully configured after running `expo prebuild`.\n\n#### Step 1: Generate Native Projects (Skip if `android`/`ios` Already Exist)\n\nIf you don't have `android/` and `ios/` directories yet, generate them:\n\n```shell\nnpx expo prebuild\n```\n\n#### Step 2: Install the SDK Package\n\n```shell\nnpx expo install @circle-fin/w3s-pw-react-native-sdk\n```\n\n#### Step 3: Configure app.json\n\nAdd both required plugins to `app.json`:\n\n```json\n{\n  \"expo\": {\n    \"plugins\": [\n      [\n        \"@circle-fin/w3s-pw-react-native-sdk/plugins/withCopyFiles\",\n        {\n          \"sourceDir\": \"prebuild-sync-src\",\n          \"targetDir\": \".\",\n          \"overwrite\": true\n        }\n      ],\n      \"@circle-fin/w3s-pw-react-native-sdk/plugins/podfile-modifier\"\n    ]\n  }\n}\n```\n\n**What these plugins do:**\n\n- `withCopyFiles`: Preserves your Android/iOS configurations across rebuilds\n- `podfile-modifier`: Automatically configures iOS Podfile for Circle SDK\n\n\u003e [!TIP]\n\u003e Prefer manual setup? Skip `podfile-modifier` and follow the [iOS configuration](./BARE_REACT_NATIVE_GUIDE.md#step-3-configure-ios) in the **Bare React Native Integration Guide** after prebuild.\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eLearn more about withCopyFiles plugin\u003c/strong\u003e\u003c/summary\u003e\n\nThe `withCopyFiles` plugin copies files from a source directory to your native project during prebuild, ensuring custom configurations are preserved.\n\n**Directory structure example:**\n\n```\nprebuild-sync-src/\n├── android/\n│   └── build.gradle\n└── ios/\n    └── YourApp/Resources/\n        ├── CirclePWLocalizable.strings\n        └── CirclePWTheme.json\n```\n\nDuring `expo prebuild`, files from `prebuild-sync-src/android` → `android/` and `prebuild-sync-src/ios` → `ios/`.\n\n**Options:**\n\n| Option      | Default             | Description                                   |\n| ----------- | ------------------- | --------------------------------------------- |\n| `sourceDir` | `prebuild-sync-src` | Root directory with android/ and ios/ folders |\n| `overwrite` | `true`              | Whether to overwrite existing files           |\n\n**Note:** This solves the problem of `expo prebuild --clean` erasing manual changes.\n\n\u003c/details\u003e\n\n#### Step 4: Configure Android Repository\n\n\u003e [!NOTE]\n\u003e The SDK depends on `w3s-android-sdk` hosted on GitHub Gradle registry, which requires authentication.\n\n**4.1** Create `.env` in project root with your GitHub credentials:\n\n```bash\nPWSDK_MAVEN_URL=https://maven.pkg.github.com/circlefin/w3s-android-sdk\nPWSDK_MAVEN_USERNAME=\u003cYOUR_GITHUB_USERNAME\u003e\nPWSDK_MAVEN_PASSWORD=\u003cYOUR_GITHUB_PAT\u003e\n```\n\nGet a [Personal Access Token](https://github.com/settings/tokens) with `read:packages` permission.\n\n**4.2** Add to `android/build.gradle` (project-level) in the `repositories` block:\n\n```gradle\nrepositories {\n  // Keep your other repositories here\n  // google()\n  // mavenCentral()\n\n  maven {\n    url System.getenv('PWSDK_MAVEN_URL')\n    credentials {\n      username System.getenv('PWSDK_MAVEN_USERNAME')\n      password System.getenv('PWSDK_MAVEN_PASSWORD')\n    }\n  }\n}\n```\n\n#### Step 5: Create Sync Directory Structure\n\nCreate `prebuild-sync-src/` folder and copy your modified Android files:\n\n```shell\nmkdir -p prebuild-sync-src/android\ncp android/build.gradle prebuild-sync-src/android/\n```\n\n\u003e [!IMPORTANT]\n\u003e Place all manual Android/iOS changes in `prebuild-sync-src/` to preserve them across rebuilds.\n\n#### Step 6: Generate Native Code\n\n```shell\nnpx expo prebuild --clean\n```\n\nThis command generates native directories and applies all configurations automatically.\n\n\u003e [!TIP]\n\u003e **Verify iOS Configuration:** Check if the Circle SDK repository was added correctly:\n\u003e\n\u003e ```shell\n\u003e cat ios/Podfile | grep \"circlefin\"\n\u003e ```\n\u003e\n\u003e Expected output: `source 'https://github.com/circlefin/w3s-ios-sdk.git'`\n\n#### Step 7: Install iOS Dependencies\n\n```shell\ncd ios \u0026\u0026 pod install \u0026\u0026 cd ..\n```\n\n#### Step 8: Build and Run\n\n**Local development:**\n\nFor iOS:\n\n```shell\nnpx expo run:ios\n```\n\nFor Android:\n\n```shell\nnpx expo run:android\n```\n\n**EAS Build:**\n\nFirst, install EAS CLI globally (one-time setup):\n\n```shell\nnpm install -g eas-cli\n```\n\nThen build your app:\n\n```shell\neas build --profile development --platform all\n```\n\n\u003e [!TIP]\n\u003e **EAS Setup**: Add secrets `PWSDK_MAVEN_USERNAME` and `PWSDK_MAVEN_PASSWORD` to your EAS project. [Learn more](https://docs.expo.dev/build-reference/variables/)\n\n---\n\n## Additional Resources\n\n**Circle Resources:**\n\n- [User-Controlled Wallets Documentation](https://developers.circle.com/wallets/user-controlled) - Product overview and architecture\n- [React Native SDK Documentation](https://developers.circle.com/wallets/user-controlled/react-native-sdk) - Complete API reference\n- [UI Customization API](https://developers.circle.com/wallets/user-controlled/react-native-sdk-ui-customization-api) - Theming and localization options\n- [React Native Sample App](https://github.com/circlefin/w3s-react-native-sample-app-wallets) - Working Expo sample app with integration guide\n- [SDK v1 Migration Guide](https://github.com/circlefin/w3s-react-native-sample-app-wallets/blob/master/MIGRATION_GUIDE.md) - Complete guide for upgrading from bare React Native + SDK v1 to Expo Modules + SDK v2\n\n**Expo Resources:**\n\n- [Expo Development Build](https://docs.expo.dev/development/build/)\n- [EAS Build](https://docs.expo.dev/build/introduction/)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcirclefin%2Fw3s-react-native-sdk","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcirclefin%2Fw3s-react-native-sdk","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcirclefin%2Fw3s-react-native-sdk/lists"}