The mobile application for the Buttercup Credentials Manager.
This repository holds the source for the Buttercup mobile application, which is available for the following platforms:
- iOS 10+
- Android 8.0+
The mobile application allows for full integration with Buttercup archives stored on a variety of platforms. Like the other applications, this mobile application makes use of AES 256bit encryption with over 200k PBKDF2 password derivation iterations.
The Buttercup for Mobile application boasts the following features:
- On-device encryption and decryption
- Auto-hide screen when app is sent to background (like banking apps)
- Auto-lock vaults after a certain period of inactivity
- Add/Edit/Delete entries
- Unlock vaults even when offline (read-only)
- Autofilling of login forms in Safari (iOS only)
You can read about the changes and releases of the application in the changelog.
- React Native Router Flux
Ensure that you're using NodeJS 8 or newer on OSX. Android projects can be built and tested on Linux and Windows, but these platforms are not officially supported.
Before getting started, ensure you follow the official React Native Getting Started guide for your desired platform (iOS/Android). It is also recommended to have the react-native-cli installed:
npm install -g react-native-cli
Run the following to initialise the project:
Once all dependencies are installed and your target development environments are setup (Xcode for iOS and Android Studio for Android), it should be possible to begin development with virtual devices.
Important note about Node.js support: Development for this project should be performed on Node version 8. Although it may work on versions 6 and newer, we will not be supporting issues raised for these versions. Similarly, we do not currently support NodeJS version 9.
Providing Xcode is setup correctly, running the following will launch the application in an iPhone emulator:
npm run start:ios
Ensure that Android Studio is setup correctly and that an AVD has been created. The virtual device must be on API level 23 or greater running Android 6.0 or newer. You must have the AVD started before continuing with no other devices connected. To ensure you only have one device running, execute the following on the command-line:
To run the application in the virtual device, run the following:
npm run start:android
Running on an Android device
To run on an actual device, first terminate any AVDs that are running. Connect the phone over USB and run
adb devices to ensure that it shows up. You can then run
npm run start:android to launch the application on the device.
The same software version restrictions apply to real devices.
Building an APK
To build a signed APK:
- Close all other development resources for the project.
npm run build:androidto first build the project.
- In Android Studio, choose Build > Generate Signed APK.
- Build a release APK by following the instructions in the GUI.
Publishing error: duplicate resources
If you encounter a publishing error when generating a signed APK, follow these instructions.
Crypto Library Development
Buttercup Mobile's crypto functionality is written in Rust and lives under
./crypto directory. The binaries are already built and placed inside the relevant directories and you don't usually need to change those. However, if you want to work on the Rust library, the following are required:
- Install Rust & Cargo using
cargo lipoto build iOS binaries
- Add iOS and Android targets to your
# iOS rustup target add aarch64-apple-ios rustup target add armv7-apple-ios rustup target add i386-apple-ios rustup target add x86_64-apple-ios # Android rustup target add aarch64-linux-android rustup target add armv7-linux-androideabi rustup target add i686-linux-android
- Get Android NDK. We recommend installing it via Android Studio or
sdkmanager --verbose ndk-bundle
- Create the standalone NDKs.
cd crypto && ./create-ndk-standalone.sh
- Finally build the binaries:
We love contributions - anything from new features and bug fixes to suggestions and questions. Please follow our contribution guide.
Please keep in-line with the code style of each file, regardless of what tests are run (linting etc.). When creating new files their format is expected to closely resemble that of other existing source files.
This project exists thanks to all the people who contribute. [Contribute].
Thank you to all our backers!
Support this project by becoming a sponsor. Your logo will show up here with a link to your website. [Become a sponsor]