Skip to content

refactor: migrate backend to @comapeo/core-react-native + add iOS support (Expo SDK 56, New Architecture)#1994

Open
gmaclennan wants to merge 29 commits into
fix/rn-activity-indicatorfrom
refactor/core-react-native-module
Open

refactor: migrate backend to @comapeo/core-react-native + add iOS support (Expo SDK 56, New Architecture)#1994
gmaclennan wants to merge 29 commits into
fix/rn-activity-indicatorfrom
refactor/core-react-native-module

Conversation

@gmaclennan

Copy link
Copy Markdown
Member

Summary

Replaces the app's hand-rolled embedded Node backend (src/backend/ + the nodejs-mobile build pipeline) with the @comapeo/core-react-native native module (^1.0.0-pre.7), upgrades the app to Expo SDK 56 / React Native 0.85 / React 19 on the New Architecture, and brings the app up on iOS for the first time. Removes ~13k lines of backend/build/patch code.

FYI: The update the new architecture required switching out react-native-indicators with the RN native ActivityIndicator, and those changes make up a significant portion of the changes in this PR, all in commit 07ec4e5. This could be moved to a separate PR to reduce the review surface here.

Motivation

The previous setup bundled and built the backend in-tree (build-backend.mjs, download-prebuilds.mjs, a rollup pipeline, and several patch-package patches), which was Android-only and heavy to maintain. @comapeo/core-react-native ships the backend as a managed native module (Android dual-process foreground service; in-process on iOS) and unlocks iOS support. The expo update is required to support @comapeo/core-react-native and brings with it a requirement to update to the New Architecture.

Key changes

Backend → module

  • Adopt @comapeo/core-react-native@^1.0.0-pre.7; wire the app to its comapeo
    RPC client, state lifecycle, and comapeoServicesClient.mapServer.
  • Remove src/backend/, scripts/build-backend.mjs, scripts/download-prebuilds.mjs,
    @comapeo/nodejs-mobile-react-native, and the associated backend patches.
  • ServerLoading / App.tsx now react to the module's state instead of the
    old socket/RPC bootstrapping (initializeNodejs, MessagePortLike,
    ServerStateStore, createAppRpc, createMapeoApi removed).

Platform / deps

  • Expo SDK 56, RN 0.85, React 19, New Architecture (Fabric/TurboModules/bridgeless), Hermes.
  • react-native-reanimated 3 → 4 (pulls in the new react-native-worklets
    dependency); @sentry/react-native → 8.15, metro → 0.84. TypeScript stays
    at 5.9.3 (6.0 flagged ~36 spurious side-effect-import errors on untouched
    files; not worth bundling that churn into this PR).
  • MapLibre kept at v10.4.2 with a new-arch compatibility patch
    (patches/@maplibre+maplibre-react-native+10.4.2.patch): patches the Android
    EventEmitter to stop using ReactNativeHost (forbidden on new arch) and the
    AnimatedPoint JS to stop clobbering RN 0.85's _listeners Map.
  • .npmrc sets legacy-peer-deps=true, and package.json adds
    expo.install.exclude for @sentry/react-native, to hold the ecosystem at
    these versions through the upgrade.
  • metro.config.js drops the nodejs-mobile blockList entries and
    unstable_enablePackageExports (now the Metro default).

Module configuration (in app.config.js, moved out of app.json to read env)

  • defaultConfig — bundles @comapeo/default-categories so new projects get default presets.
  • defaultOnlineStyleUrl — Mapbox outdoors-v11 when MAPBOX_ACCESS_TOKEN is set, else MapLibre demo tiles.
  • sentry — DSN/environment(qa/production/development)/tracesSampleRate baked per APP_VARIANT.

Sentry

  • Migrate from the app-owned Sentry.init to the module's initSentry
    (@comapeo/core-react-native/sentry), which unifies the RN, Node-backend, and
    Android-FGS hubs under one release/environment.
  • scripts/upload-backend-sourcemaps.sh (new eas-build-on-success hook before
    upload-release.sh) uploads the embedded Node backend bundle's sourcemaps so
    backend stack traces symbolicate; the host app's own JS/native symbols are
    still handled by the @sentry/react-native plugin.

iOS bring-up & fixes

  • Request foreground location on iOS (was Android-only PermissionsAndroid); fix
    the GPS pill, which treated the Android-only gpsAvailable as required.
  • Fix splash never dismissing on fresh install (concurrent requestForegroundPermissionsAsync
    calls left LocationProvider blocked; made its query read-only + made splash
    dismissal robust on app-active).
  • Fix MapLibre SIGABRT on the map screen (legacy $type filter → geometry-type).
  • Track bottom-sheet now respects the safe-area inset so its action button clears the tab bar.
  • iOS a11y / Info.plist / status-bar tweaks; wdio.ios.config.js for the iOS e2e runner.

Android

  • expo-config-plugins/mergeBackupRules.js — resolve a manifest-merge conflict
    with expo-secure-store (the module's plugin does not own backup rules, so
    this stays app-side).

Docs

  • docs/iOSDeviceBuilds.md — build/install a standalone Release build on a physical iPhone.
  • E2E_IOS_ROADMAP.md — audit + roadmap for migrating the e2e suites to iOS.

Platforms

  • Android — functional (existing platform).
  • iOS — newly supported: boots, renders the Mapbox map, GPS, onboarding, categories.

Known gaps / follow-ups

  • getSentryUserId is now dead code@comapeo/core-react-native needs to update to handle this before we release.
  • e2e suites are not yet migrated to iOS — tracked in E2E_IOS_ROADMAP.md
    (authored Android-only; selector/keyboard/driver.back()/a11y work outstanding).
  • Sentry consent model is config/plumbing only for now; the full runtime consent
    model migrates later with an updated core (the app's per-month rotating user.id
    is currently dropped, as initSentry locks user.id).

@socket-security

socket-security Bot commented Jun 29, 2026

Copy link
Copy Markdown

Review the following changes in direct dependencies. Learn more about Socket for GitHub.

Diff Package Supply Chain
Security
Vulnerability Quality Maintenance License
Updatednpm/​babel-preset-expo@​54.0.11 ⏵ 56.0.1774100100100 +1100
Updatednpm/​expo-keep-awake@​15.0.8 ⏵ 56.0.374 +110082 +1100 +1100
Updatednpm/​expo-system-ui@​6.0.9 ⏵ 56.0.574 +110078 +1100100
Updatednpm/​expo-audio@​1.1.1 ⏵ 56.0.12100 +110075 +1100100
Updatednpm/​expo-document-picker@​14.0.8 ⏵ 56.0.475 +110088 +1100100
Updatednpm/​expo-localization@​17.0.9 ⏵ 56.0.676 +110084 +1100 +1100
Updatednpm/​expo-linking@​8.0.12 ⏵ 56.0.1476 +110080 +1100100
Updatednpm/​expo-font@​14.0.12 ⏵ 56.0.777 +110085 +1100 +1100
Updatednpm/​expo-asset@​12.0.13 ⏵ 56.0.177710080 +1100100
Updatednpm/​expo@​54.0.35 ⏵ 56.0.1277 +1100100 +23100100
Updatednpm/​expo-task-manager@​14.0.9 ⏵ 56.0.1977 +110083 +1100100
Updatednpm/​expo-build-properties@​1.0.10 ⏵ 56.0.197710085 +1100 +1100
Updatednpm/​expo-crypto@​15.0.9 ⏵ 56.0.477 +210084 +2100100
Updatednpm/​metro@​0.83.5 ⏵ 0.84.297 +110077 +194100
Updatednpm/​expo-splash-screen@​31.0.13 ⏵ 56.0.1078 +4100100100100
Updatednpm/​expo-image@​3.0.11 ⏵ 56.0.1178 +110091 +1100100
Updatednpm/​react-native-safe-area-context@​5.8.0 ⏵ 5.7.0991007887100
Updatednpm/​expo-application@​7.0.8 ⏵ 56.0.310010078 +1100100
Updatednpm/​expo-file-system@​19.0.23 ⏵ 56.0.879 +110086 +1100 +1100
Addednpm/​@​comapeo/​core-react-native@​1.0.0-pre.78110010095100
Updatednpm/​expo-device@​8.0.10 ⏵ 56.0.4100 +110081 +1100 +1100
Addednpm/​ts-node@​10.9.29610010082100
Updatednpm/​expo-secure-store@​15.0.8 ⏵ 56.0.4100 +110083100100
Updatednpm/​expo-image-manipulator@​14.0.8 ⏵ 56.0.19100 +110084 +1100100
Updatednpm/​react@​19.1.4 ⏵ 19.2.3100 +110084 +197100
Addednpm/​react-native-worklets@​0.10.0991008598100
Updatednpm/​expo-sensors@​15.0.8 ⏵ 56.0.6100 +110086 +1100100
Updatednpm/​react-native-restart@​0.0.27 ⏵ 0.0.28100 +1100100 +187 +2100
Updatednpm/​@​sentry/​react-native@​8.0.0 ⏵ 8.15.187 -11100100 +196100
Updatednpm/​react-native-svg@​15.15.5 ⏵ 15.15.49910010088100
Updatednpm/​react-native-reanimated@​3.19.5 ⏵ 4.5.0100 +110090 +198100
Updatednpm/​expo-location@​19.0.8 ⏵ 56.0.1810010092 +1100 +1100
See 4 more rows in the dashboard

View full report

@socket-security

socket-security Bot commented Jun 29, 2026

Copy link
Copy Markdown

Warning

Review the following alerts detected in dependencies.

According to your organization's Security Policy, it is recommended to resolve "Warn" alerts. Learn more about Socket for GitHub.

Action Severity Alert  (click "▶" to expand/collapse)
Warn High
Obfuscated code: npm @expo/cli is 90.0% likely obfuscated

Confidence: 0.90

Location: Package overview

From: package-lock.jsonnpm/expo@56.0.12npm/@expo/cli@56.1.20

ℹ Read more on: This package | This alert | What is obfuscated code?

Next steps: Take a moment to review the security alert above. Review the linked package source code to understand the potential risk. Ensure the package is not malicious before proceeding. If you're unsure how to proceed, reach out to your security team or ask the Socket team for help at support@socket.dev.

Suggestion: Packages should not obfuscate their code. Consider not using packages with obfuscated code.

Mark the package as acceptable risk. To ignore this alert only in this pull request, reply with the comment @SocketSecurity ignore npm/@expo/cli@56.1.20. You can also ignore all packages with @SocketSecurity ignore-all. To ignore an alert for all future pull requests, use Socket's Dashboard to change the triage state of this alert.

Warn High
Obfuscated code: npm @react-native/debugger-frontend is 90.0% likely obfuscated

Confidence: 0.90

Location: Package overview

From: package-lock.jsonnpm/react-native@0.85.3npm/expo@56.0.12npm/@react-native/debugger-frontend@0.85.3

ℹ Read more on: This package | This alert | What is obfuscated code?

Next steps: Take a moment to review the security alert above. Review the linked package source code to understand the potential risk. Ensure the package is not malicious before proceeding. If you're unsure how to proceed, reach out to your security team or ask the Socket team for help at support@socket.dev.

Suggestion: Packages should not obfuscate their code. Consider not using packages with obfuscated code.

Mark the package as acceptable risk. To ignore this alert only in this pull request, reply with the comment @SocketSecurity ignore npm/@react-native/debugger-frontend@0.85.3. You can also ignore all packages with @SocketSecurity ignore-all. To ignore an alert for all future pull requests, use Socket's Dashboard to change the triage state of this alert.

Warn High
Obfuscated code: npm @react-native/debugger-frontend is 90.0% likely obfuscated

Confidence: 0.90

Location: Package overview

From: package-lock.jsonnpm/react-native@0.85.3npm/expo@56.0.12npm/@react-native/debugger-frontend@0.85.3

ℹ Read more on: This package | This alert | What is obfuscated code?

Next steps: Take a moment to review the security alert above. Review the linked package source code to understand the potential risk. Ensure the package is not malicious before proceeding. If you're unsure how to proceed, reach out to your security team or ask the Socket team for help at support@socket.dev.

Suggestion: Packages should not obfuscate their code. Consider not using packages with obfuscated code.

Mark the package as acceptable risk. To ignore this alert only in this pull request, reply with the comment @SocketSecurity ignore npm/@react-native/debugger-frontend@0.85.3. You can also ignore all packages with @SocketSecurity ignore-all. To ignore an alert for all future pull requests, use Socket's Dashboard to change the triage state of this alert.

Warn High
Obfuscated code: npm @sentry/react-native is 90.0% likely obfuscated

Confidence: 0.90

Location: Package overview

From: package-lock.jsonnpm/@sentry/react-native@8.15.1

ℹ Read more on: This package | This alert | What is obfuscated code?

Next steps: Take a moment to review the security alert above. Review the linked package source code to understand the potential risk. Ensure the package is not malicious before proceeding. If you're unsure how to proceed, reach out to your security team or ask the Socket team for help at support@socket.dev.

Suggestion: Packages should not obfuscate their code. Consider not using packages with obfuscated code.

Mark the package as acceptable risk. To ignore this alert only in this pull request, reply with the comment @SocketSecurity ignore npm/@sentry/react-native@8.15.1. You can also ignore all packages with @SocketSecurity ignore-all. To ignore an alert for all future pull requests, use Socket's Dashboard to change the triage state of this alert.

View full report

@gmaclennan
gmaclennan force-pushed the refactor/core-react-native-module branch from 07ec4e5 to c55afc3 Compare June 30, 2026 09:22
@gmaclennan
gmaclennan changed the base branch from develop to fix/rn-activity-indicator June 30, 2026 09:22
@awana-lockfile-bot

awana-lockfile-bot Bot commented Jun 30, 2026

Copy link
Copy Markdown

package-lock.json changes

Summary

Status Count
ADDED 36
UPDATED 98
DOWNGRADED 2
REMOVED 65
Click to toggle table visibility
Name Status Previous Current
@0no-co/graphql.web REMOVED 1.3.2 -
@babel/highlight REMOVED 7.25.9 -
@babel/plugin-syntax-jsx UPDATED 7.27.1 7.29.7
@babel/plugin-syntax-typescript UPDATED 7.27.1 7.29.7
@babel/plugin-transform-react-jsx UPDATED 7.27.1 7.29.7
@babel/plugin-transform-typescript UPDATED 7.27.0 7.29.7
@babel/preset-react REMOVED 7.28.5 -
@babel/preset-typescript UPDATED 7.27.0 7.29.7
@babel/traverse--for-generate-function-map REMOVED 7.28.4 -
@comapeo/core-react-native ADDED - 1.0.0-pre.7
@comapeo/default-categories ADDED - 1.1.2
@comapeo/nodejs-mobile-react-native REMOVED 18.20.4-2 -
@cspotcode/source-map-support ADDED - 0.8.1
@expo/config-plugins UPDATED 54.0.4 56.0.13
@expo/config-types UPDATED 54.0.10 56.0.7
@expo/config UPDATED 12.0.13 56.0.12
@expo/devtools UPDATED 0.1.8 56.0.2
@expo/env UPDATED 2.0.8 2.4.2
@expo/expo-modules-macros-plugin ADDED - 0.2.2
@expo/fingerprint UPDATED 0.15.5 0.19.8
@expo/image-utils UPDATED 0.8.8 0.10.3
@expo/inline-modules ADDED - 0.0.14
@expo/json-file UPDATED 10.0.14 10.2.0
@expo/local-build-cache-provider ADDED - 56.0.10
@expo/metro-file-map ADDED - 56.0.3
@expo/metro UPDATED 54.2.0 56.0.0
@expo/osascript UPDATED 2.7.0 2.7.1
@expo/package-manager UPDATED 1.13.0 1.13.1
@expo/plist UPDATED 0.4.9 0.7.0
@expo/prebuild-config UPDATED 54.0.8 56.0.20
@expo/require-utils ADDED - 56.1.5
@expo/schema-utils UPDATED 0.1.8 56.0.2
@expo/ws-tunnel UPDATED 1.0.6 2.0.0
@jridgewell/gen-mapping UPDATED 0.3.12 0.3.13
@npmcli/agent REMOVED 2.2.2 -
@npmcli/fs REMOVED 3.1.1 -
@react-native/assets-registry UPDATED 0.81.6 0.85.3
@react-native/community-cli-plugin REMOVED 0.81.6 -
@react-native/debugger-frontend UPDATED 0.81.5 0.85.3
@react-native/debugger-shell ADDED - 0.85.3
@react-native/dev-middleware UPDATED 0.81.5 0.85.3
@react-native/gradle-plugin UPDATED 0.81.6 0.85.3
@react-native/jest-preset ADDED - 0.85.3
@react-native/normalize-colors UPDATED 0.81.5 0.85.3
@react-native/virtualized-lists ADDED - 0.85.3
@sentry-internal/browser-utils REMOVED 10.38.0 -
@sentry-internal/feedback REMOVED 10.38.0 -
@sentry-internal/replay-canvas REMOVED 10.38.0 -
@sentry-internal/replay REMOVED 10.38.0 -
@sentry/babel-plugin-component-annotate UPDATED 4.9.1 5.3.0
@sentry/browser-utils ADDED - 10.58.0
@sentry/browser UPDATED 10.38.0 10.58.0
@sentry/cli-darwin UPDATED 3.2.0 3.5.1
@sentry/cli-linux-arm UPDATED 3.2.0 3.5.1
@sentry/cli-linux-arm64 UPDATED 3.2.0 3.5.1
@sentry/cli-linux-i686 UPDATED 3.2.0 3.5.1
@sentry/cli-linux-x64 UPDATED 3.2.0 3.5.1
@sentry/cli-win32-arm64 UPDATED 3.2.0 3.5.1
@sentry/cli-win32-i686 UPDATED 3.2.0 3.5.1
@sentry/cli-win32-x64 UPDATED 3.2.0 3.5.1
@sentry/cli UPDATED 3.2.0 3.5.1
@sentry/core UPDATED 10.38.0 10.58.0
@sentry/expo-upload-sourcemaps ADDED - 8.15.1
@sentry/feedback ADDED - 10.58.0
@sentry/react-native UPDATED 8.0.0 8.15.1
@sentry/react UPDATED 10.38.0 10.58.0
@sentry/replay-canvas ADDED - 10.58.0
@sentry/replay ADDED - 10.58.0
@sentry/types REMOVED 10.38.0 -
@tsconfig/node10 ADDED - 1.0.12
@tsconfig/node12 ADDED - 1.0.11
@tsconfig/node14 ADDED - 1.0.3
@tsconfig/node16 ADDED - 1.0.4
@urql/core REMOVED 5.2.0 -
@urql/exchange-retry REMOVED 1.3.2 -
abbrev REMOVED 2.0.0 -
accepts UPDATED 1.3.8 2.0.0
agent-cli-detector ADDED - 0.1.2
aggregate-error REMOVED 3.1.0 -
any-promise REMOVED 1.3.0 -
async-limiter REMOVED 1.0.1 -
babel-preset-expo UPDATED 54.0.10 56.0.17
better-opn REMOVED 3.0.2 -
cacache REMOVED 18.0.4 -
chownr REMOVED 2.0.0 -
chromium-edge-launcher UPDATED 0.2.0 0.3.0
clean-stack REMOVED 2.2.0 -
create-require ADDED - 1.1.1
define-lazy-prop REMOVED 2.0.0 -
dnssd-advertise ADDED - 1.1.6
encoding REMOVED 0.1.13 -
env-editor REMOVED 0.4.2 -
env-paths REMOVED 2.2.1 -
err-code REMOVED 2.0.3 -
expo-application UPDATED 7.0.8 56.0.3
expo-asset UPDATED 12.0.13 56.0.17
expo-audio UPDATED 1.1.1 56.0.12
expo-build-properties UPDATED 1.0.10 56.0.19
expo-constants UPDATED 18.0.13 56.0.21
expo-crypto UPDATED 15.0.9 56.0.4
expo-device UPDATED 8.0.10 56.0.4
expo-document-picker UPDATED 14.0.8 56.0.4
expo-file-system UPDATED 19.0.23 56.0.8
expo-font UPDATED 14.0.12 56.0.7
expo-image-loader UPDATED 6.0.0 56.0.3
expo-image-manipulator UPDATED 14.0.8 56.0.19
expo-image UPDATED 3.0.11 56.0.11
expo-keep-awake UPDATED 15.0.8 56.0.3
expo-linking UPDATED 8.0.12 56.0.14
expo-localization UPDATED 17.0.9 56.0.6
expo-location UPDATED 19.0.8 56.0.18
expo-modules-autolinking UPDATED 3.0.26 56.0.20
expo-modules-core REMOVED 3.0.30 -
expo-modules-jsi ADDED - 56.0.12
expo-secure-store UPDATED 15.0.8 56.0.4
expo-sensors UPDATED 15.0.8 56.0.6
expo-server UPDATED 1.0.7 56.0.5
expo-splash-screen UPDATED 31.0.13 56.0.10
expo-system-ui UPDATED 6.0.9 56.0.5
expo-task-manager UPDATED 14.0.9 56.0.19
expo UPDATED 54.0.35 56.0.12
fb-dotslash ADDED - 0.5.8
fetch-nodeshim ADDED - 0.4.10
freeport-async REMOVED 2.0.0 -
fs-minipass REMOVED 3.0.3 -
glob UPDATED 10.4.5 10.5.0
hermes-compiler ADDED - 250829098.0.10
is-lambda REMOVED 1.0.1 -
jest-expo UPDATED 54.0.17 56.0.5
make-error ADDED - 1.3.6
make-fetch-happen REMOVED 13.0.1 -
metro-babel-transformer UPDATED 0.83.3 0.84.4
metro-cache-key UPDATED 0.83.3 0.84.4
metro-cache UPDATED 0.83.3 0.84.4
metro-core UPDATED 0.83.3 0.84.4
metro-file-map UPDATED 0.83.3 0.84.4
metro-minify-terser UPDATED 0.83.3 0.84.4
metro-resolver UPDATED 0.83.3 0.84.4
metro-source-map UPDATED 0.83.3 0.84.4
metro-symbolicate UPDATED 0.83.3 0.84.4
metro-transform-plugins UPDATED 0.83.3 0.84.4
metro-transform-worker UPDATED 0.83.3 0.84.4
metro UPDATED 0.83.7 0.84.2
minipass-collect REMOVED 2.0.1 -
minipass-fetch REMOVED 3.0.5 -
minipass-flush REMOVED 1.0.5 -
minipass-pipeline REMOVED 1.2.4 -
minipass-sized REMOVED 1.0.3 -
minizlib REMOVED 2.1.2 -
mkdirp REMOVED 0.5.6 -
multitars ADDED - 1.0.0
mz REMOVED 2.7.0 -
nanoid UPDATED 3.3.11 3.3.16
ncp REMOVED 2.0.0 -
nested-error-stacks REMOVED 2.0.1 -
node-gyp-build-mobile REMOVED 4.6.0-2 -
nodejs-mobile-gyp REMOVED 0.4.0 -
nopt REMOVED 7.2.1 -
ob1 UPDATED 0.83.3 0.84.4
p-map REMOVED 4.0.0 -
postcss UPDATED 8.4.49 8.5.19
pretty-bytes REMOVED 5.6.0 -
proc-log REMOVED 3.0.0 -
promise-retry REMOVED 2.0.1 -
qrcode-terminal REMOVED 0.11.0 -
react-native-is-edge-to-edge UPDATED 1.1.7 1.3.1
react-native-nitro-modules UPDATED 0.35.4 0.35.9
react-native-reanimated UPDATED 3.19.5 4.5.0
react-native-restart UPDATED 0.0.27 0.0.28
react-native-safe-area-context DOWNGRADED 5.8.0 5.7.0
react-native-screens UPDATED 4.24.0 4.25.2
react-native-svg DOWNGRADED 15.15.5 15.15.4
react-native-worklets ADDED - 0.10.0
react-native UPDATED 0.81.6 0.85.3
react-test-renderer ADDED - 19.2.3
react UPDATED 19.1.4 19.2.3
requireg REMOVED 0.2.2 -
resolve-global REMOVED 1.0.0 -
resolve-workspace-root UPDATED 2.0.0 2.0.1
retry REMOVED 0.12.0 -
rimraf REMOVED 3.0.2 -
scheduler UPDATED 0.26.0 0.27.0
sf-symbols-typescript UPDATED 2.1.0 2.2.0
ssri REMOVED 10.0.6 -
sucrase REMOVED 3.35.1 -
tar REMOVED 6.2.1 -
temp-dir REMOVED 2.0.0 -
terser UPDATED 5.44.0 5.49.0
thenify-all REMOVED 1.6.0 -
thenify REMOVED 3.3.1 -
toqr ADDED - 0.1.1
ts-interface-checker REMOVED 0.1.13 -
ts-node ADDED - 10.9.2
unimodules-app-loader UPDATED 6.0.8 56.0.1
unique-filename REMOVED 3.0.0 -
unique-slug REMOVED 4.0.0 -
v8-compile-cache-lib ADDED - 3.0.1
whatwg-url-minimum ADDED - 0.1.2
wonka REMOVED 6.3.6 -
yn ADDED - 3.1.1
zod UPDATED 3.25.75 3.25.76

Replace the embedded nodejs-mobile backend (rolled-up @comapeo/core server) with the @comapeo/core-react-native native module, and upgrade to Expo SDK 56 / React Native 0.85 / new architecture, which the new module requires.
Add iOS Info.plist entries for local-network sync discovery and the encryption-exempt flag, plus iOS device-build docs and the iOS e2e (wdio) config.
Bump react 19.2.3->19.2.7 and @react-navigation/native 7.2.4->7.3.4 to
satisfy peer ranges (react-dom, @react-navigation/elements), drop the
blanket legacy-peer-deps=true, and remove the orphaned
react-native-indicators patch.
@gmaclennan
gmaclennan force-pushed the refactor/core-react-native-module branch from c55afc3 to cc0924d Compare June 30, 2026 09:48
gmaclennan and others added 8 commits June 30, 2026 10:53
We continuously update the observation location if
the accuracy increases, and we check whether the
user might have moved away while recording the
observation by checking if the location moves by
more than 1.5x the initial position accuracy.

This previous behaviour is not ideal when taking
observations in a moving vehicle or boat. It means
that invariably observations will be 1.5x the
initial position accuracy away from their actual
location.

This commit checks the device speed in the
position update, and discards the position if the
device is moving at more than 3 m/s. The value was
chosen as "faster than walking, but slower than
most transport", and could be refined if needed.

Co-authored-by: ErikSin <67773827+ErikSin@users.noreply.github.com>
* Adds a refetch on window focus for storage in case it is updated. Adds the app state listener at the base of the app so that it works.

* Removes default because not needed
…1935)

startRecording awaits prepareToRecordAsync before calling record(). If the
recording screen is left during that await (e.g. starting then leaving in
quick succession), expo-audio's useReleasingSharedObject releases the
recorder's native object on unmount, and the subsequent record() call hits a
released shared object and crashes.

Skip record() when the hook has been torn down during the await.

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* fix: do not add the observation location to track

Previously, when the user saves an observation, we
would add the observation location to the track.
The observation location is from the moment the
user first adds the observation, so if the user is
moving, by the time they save the observation, the
track has advanced to the new location, and adding
the observation location makes the track "loop
back". This is more of a problem the faster the
user is moving.

The only reason I am aware of for adding the
observation location to the track is so that the
track and observation spatially/visually
coinincide. Without this code there is a chance
that an observation taken during a track will not
appear exactly on the track. I think this is fine,
and it's not very easy to "force" the observation
to appear on the track, without creating artifacts
like these track loops.

This commit removes the code that adds the
observation location to the track when you save
the observation

* chore: remove unused type

---------

Co-authored-by: ErikSin <67773827+ErikSin@users.noreply.github.com>
…es (#1985)

* Adds a connection lost title and message for download fails.

* Messages.
* Enables sentry replay on QA builds on error only.

* Removes optional replay which is default to 0

* Replays all sessions for QA in sentry.

* Prettier updating file.
@ErikSin ErikSin mentioned this pull request Jul 2, 2026
1 task
cimigree added 3 commits July 7, 2026 17:59
* Adds a QA device name screen. Adds a store for it. Sends the name to Sentry. Adds a context test.

* Tweaks to QA screen app screens and where logic sits for sending tag to Sentry. Adds an integration test. Removes unneeded provider.

* Messages

* No back button on initial screen. Use name in settings. Pass key.

* Trying again for no back button.

* Trying again for no back button. No QA name in app screens so it does not rerender when saving from the gate at the outset.

* Removes header shown. Removes extra screen.

* Trying new screen name for app screens. Adding margin top when not on app screen.

* Increases top margin.

* Adjusts tests.

* Tries to remove navigator key.

* Modifies the test for opening screen.

* Changes set qa device name to a component used outside of the navigator. Breaks it down so the settings piece can still access navigation.

* UPdates styles to account for being outside of navigator.

* Removes unnecessary prop.

* Simplifies store setting for qa name. Exports app variant as qa device. Expands comment. Fixes test.

* Fixes keyboard avoiding behavior.

* Uses exported variable. Adds keyboard avoiding view with padding just to edit screen.

* Removes callback and subscriber for setting the tag in sentry. Sets the tag within the Context file.
* Updates prettier. Bumps minor and patch versions in frontend and backend dev dependencies. Changes order of desription and message in messages. Adds params to querykey.

* Updates all easy minor updates.

* Teeny bump in expo.

* Update pevent and test that uses it.

* Updates lint staged.

* Updates type fest.

* Updates typescript.

* Reverts typescript so ci will pass.

* Updates expo packages per expo doctor.

* Updates expo linking
* Bumps core and core react for export flattening.

* Updates E2e tests for adding a qa name.

* adds scroll to early access to E2E tests
awana-release-bot Bot and others added 11 commits July 9, 2026 20:56
…1938)

navigation.replace only swapped the top screen, leaving YourTeam and
CollaboratorInfo mounted with active queries scoped to the left project.
Refetching those queries always fails because leaving closes the
project's non-auth data stores (Sentry COMAPEO-1TK, COMAPEO-223,
COMAPEO-20E). Also set the new active project before navigating so the
remounted Home targets the default project.

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-authored-by: ErikSin <67773827+ErikSin@users.noreply.github.com>
The device-diagnostics report (`device diagnostics v1`) carries no app
identifier, unlike the app-diagnostics report which already sends
`appId`/`appName`. As a result the device-hardware telemetry cannot be
filtered by release channel, so hardware stats (brand, model, screen,
memory, CPU arch) mix production installs with RC/dev/QA builds and
emulators. On the analytics side ~half of all app-diagnostics rows are
non-production, and device diagnostics currently has no way to exclude
that traffic at all.

Add `appId` (from `expo-application`'s `Application.applicationId`,
the same source app diagnostics uses) so downstream queries can scope
device-hardware metrics to `com.comapeo`. The field is optional and set
via `setIfNotNull`, mirroring the app-diagnostics implementation; older
clients simply omit it.
* Updates prettier. Bumps minor and patch versions in frontend and backend dev dependencies. Changes order of desription and message in messages. Adds params to querykey.

* Updates all easy minor updates.

* Teeny bump in expo.

* Update pevent and test that uses it.

* Updates lint staged.

* Updates type fest.

* Updates typescript.

* Reverts typescript so ci will pass.

* Updates expo packages per expo doctor.

* Updates expo linking

* Adds patch package to use eslint 10. Turns off unnecessary rules. Fixes setstate naming style. Updates eslint related dev dependencies.

* Follows two new rules as best as possible. Fixes implementation. Disables rules in specific files where the disable is needed.

* Updates package lock.

* Rmoves eslint plugin react native because it doesn't support the current version of eslint. Update the rules accordingly. Replace one of the rules with a custom file. Remove references to rule that we no longer have access to.

* Adds mapeo crypto as a dev dependency.

* Restores base branch package lock and reinstalled from there to fix hoisting of require addon.
* Updates prettier. Bumps minor and patch versions in frontend and backend dev dependencies. Changes order of desription and message in messages. Adds params to querykey.

* Updates all easy minor updates.

* Teeny bump in expo.

* Update pevent and test that uses it.

* Updates lint staged.

* Updates type fest.

* Updates typescript.

* Reverts typescript so ci will pass.

* Updates expo packages per expo doctor.

* Updates expo linking

* Adds patch package to use eslint 10. Turns off unnecessary rules. Fixes setstate naming style. Updates eslint related dev dependencies.

* Follows two new rules as best as possible. Fixes implementation. Disables rules in specific files where the disable is needed.

* Updates package lock.

* Rmoves eslint plugin react native because it doesn't support the current version of eslint. Update the rules accordingly. Replace one of the rules with a custom file. Remove references to rule that we no longer have access to.

* Adds mapeo crypto as a dev dependency.

* Restores base branch package lock and reinstalled from there to fix hoisting of require addon.

* Adds await where needed for api. New eslint ignore.

* Adds async awaits as needed for new API for test library 14.

* Fixes tests and linting.

* Removes unneeded react test renderer.
Co-Authored-By: ErikSin <67773827+ErikSin@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants