Wafrn React Native App
This is an Expo project created with create-expo-app.
Main repo has moved to Codeberg on wafrn/wafrn-rn. The Github repo juandjara/wafrn-rn is still going to be up as a mirror.
You can get the app in the following places:
For Android there are many choices, but I recommend using Droid-ify to install the versions from F-Droid (or IzyyOnDroid) and keep them updated with some extra stability. But if you want to get the latest version as soon as possible and still be notified of updates, you can use Obtanium.
APK Certificate fingerprint
The APK certificate fingerprint is:
SHA1: 75:81:D0:4E:5F:1A:87:D6:35:33:8B:72:CC:04:84:DF:20:EA:27:2F
SHA256: 09:1A:D9:44:84:3E:18:0C:43:22:ED:E2:02:A7:33:09:4C:DC:07:DD:1A:CD:51:52:3F:E8:13:EA:E9:04:F4:87
This is the fingerprint of the certificate used to sign the APKs. It can be used to verify the authenticity of the APKs with the APKVerifier app or with the following command (replace app-arm64-v8a-release.apk with the path to the APK you want to verify):
keytool -printcert -jarfile app-arm64-v8a-release.apk
NOTE: Only APKs distributed by IzzyOnDroid and Obtanium are signed with this certificate. APKs distributed by F-Droid use a different certificate and are signed by F-Droid themselves.
Get started for development
- Install dependencies
pnpm install
- Start the app
pnpm start
In the output, you'll find options to open the app in a
You can start developing by editing the files inside the app directory. This project uses file-based routing.
NOTE: This project contains custom native modules, so you cannot run the app with Expo Go. You need to use a real device or an emulator.
Environment Variables
There are a couple variables this project can read from a .env file. None are required to be set, they have some defaults, but this is just an easy way to customize some hardcoded URLs or keys.
| Variable | Description | Default |
|---|---|---|
EXPO_PUBLIC_TENOR_KEY |
Tenor API key for GIF support. If set, GIF search is enabled automatically. | empty |
RELEASES_URL |
URL for checking the latest app release. | Codeberg Releases API for this repo (wafrn/wafrn-rn) |
INSTANCES_URL |
URL for fetching the list of Wafrn instances. | https://join.wafrn.net/instances.json |
Support for EXPO_PUBLIC_TENOR_KEY might be removed in the future, as this can be configured in the settings UI, and no API Key is included by default to respect FOSS principles.
Btw, if you have a .env.local file in your project it will also work but it will be ignored by git.
Build from source a local version of the production release (only for Android)
You need to have your android environment setup to build the app. See the expo docs for more info.
For the production release build process to work, you will need to define some variables for signing the resulting apk or aab file.
You should create a ~/.gradle/gradle.properties file with the following: (Where ~ is your home directory)
WAFRN_UPLOAD_STORE_FILE=production.keystore
WAFRN_UPLOAD_STORE_PASSWORD=13132423
WAFRN_UPLOAD_KEY_ALIAS=1232342
WAFRN_UPLOAD_KEY_PASSWORD=3224242
These are the values that will be used to sign the resulting apk or aab file with your upload key. You can see more info about this in the Android documentation.
The WAFRN_UPLOAD_STORE_FILE variable is a path relative to the android/app/ directory inside this repo pointing to the keystore file. Make sure the path is correct and the file exists before running the build. This file should not be included in version control.
Then, you can run the following command to build the production release:
pnpm run build:prod:android
This will create a series of APK files in the android/app/build/outputs/apk/release directory.
If you want to know more about the Version Release Process, read here
About UnifiedPush
This app uses UnifiedPush for sending its notifications (via expo-unified-push). You can read more about UnifiedPush in https://unifiedpush.org. After a sucessfull login, the Wafrn App will ask for notification permission and try to register with the first UnifiedPush distributor available in your device. You can change this later in settings. If no UnifiedPush distributor is installed in your device, the Wafrn App will use the embedded Firebase Cloud Messaging distributor, but only as a last resource.
Contributing
You can contribute to the project by creating a PR or by opening an issue for discussion.
Join the community
Discussions and contributions about the development of the app are welcome on the Discord server. (or the fluxxer bridge) and on Wafrn itself. When adding your feedback, please consider that the app continues to be in development and some things might change. If have a more solid issue, bug or request, is best for the team if you write it in the Codeberg Issues
If you want to ensure a quick response, you can always ping @[email protected] using any fediverse software or ping @djara.dev using any ATProto software.
License
This project is licensed under the AGPL-3.0 License. See the LICENSE file for details.
Donations
If you want to support the development of the app, you can donate to the developer on Ko-fi using this link: https://ko-fi.com/juandjara


