Loading repository data…
Loading repository data…
tetherto / repository
PearPass is an open-source, privacy-first password manager with peer-to-peer syncing and end-to-end encryption.
The mobile app for PearPass, an open-source, end-to-end encrypted password and identity manager built on Pear Runtime.
PearPass is an open-source, privacy-first password and identity manager that gives you full control over your sensitive information. It makes storing and managing your credentials simple, secure, and private. PearPass encrypts and stores all data locally on your device.
Unlike traditional password managers that rely on centralized servers, PearPass is built on Pear Runtime and uses peer-to-peer technology to sync your credentials directly between your devices, ensuring they remain private, secure, and always under your control.
.nvmrc and verify with:node --version
# 1. Clone the repository
git clone git@github.com:tetherto/pearpass-app-mobile.git
# 2. Go to the cloned directory
cd pearpass-app-mobile
# 3. Install dependencies
npm install
# 4. Generate translation keys
npm run lingui:extract
npm run lingui:compile
# 5. Generate worklet bundles
npm run bundle-bare
# 6. Generate native iOS and Android directories (see Prebuild below)
npx expo prebuild --clean
Visit the official PearPass documentation for step-by-step guides on setup, vault management, syncing across devices, browser extension usage, and all other PearPass features:
This project uses Expo Plugins to manage native iOS and Android configurations. Git does not track the ios/ and android/ directories — Expo's prebuild system generates them dynamically.
ios/ and android/).plugins/ directory manage all native configurations.npx expo prebuild --clean generates the native directories with all necessary configurations.Before starting the application, build it first. The build command produces bundles for iOS, iOS extension, and Android, and runs the custom prebuild:
# Build the application
npm run build
# Then start on your preferred platform
npm run ios # For iOS
npm run android # For Android
This repo is Expo-managed. Prebuild generates the native android/ and ios/ folders; they are not committed.
npm run bundle-bare
npx expo prebuild --platform android --clean
npm run bundle-bare
PEARPASS_DISTRIBUTION=fdroid npx expo prebuild --platform android --clean
More details:
Run unit tests with Jest:
npm test
PearPass uses WebdriverIO + Appium for end-to-end testing on Android and iOS, with optional BrowserStack execution and Qase test management.
See e2e/SETUP_AND_RUN_GUIDE.md for the full setup and run instructions, and e2e/AUTOMATED_TEST_CASES.md for the test catalog.
| Project | Description |
|---|---|
pearpass-app-desktop | Desktop app for PearPass |
pearpass-lib-vault | Vault management library |
pearpass-lib-vault-core | Bare worker and client for PearPass vaults |
pearpass-lib-ui-react-native-components | React Native UI component library |
pearpass-lib-ui-react-components | React UI component library |
tether-dev-docs | Developer documentation and guides |
We welcome contributions. See CONTRIBUTING.md for the development workflow and coding conventions.
Logging is off by default. When enabled, logs are written to the app's cache directory — main.log from the JS host (React Native side) and core-logs.txt from the Bare vault worker. The worker's sink redacts known sensitive fields (passwords, keys, tokens, etc.) before writing to core-logs.txt. The host logger does not redact, so treat anything passed to logger.* on the JS side as on-disk-visible in main.log.
Two ways to enable:
PearPass-nightly): logging defaults to debug on first launch so testers don't have to opt in. The toggle still works to disable it.Logs can be shared via Diagnostics screen Share logs action that zips both files plus a small metadata file (app version, distribution channel).
PearPass mobile is open source. Public releases and self-built versions never send any data anywhere. Sentry is only enabled on our nightly distribution channel for catching crashes during pre-release testing.
Verifying:
isNightly() from src/constants/distribution.js. Returns false unless the distribution channel is nightly.PEARPASS_DISTRIBUTION=nightly at build time. app.config.ts. app.json has no Sentry plugin entry, so standard / F-Droid builds never include it.sentry-bare) is an optional peer dependency of pearpass-lib-vault-core — public builds don't install it.This project is licensed under the Apache License, Version 2.0. See the LICENSE file for details.