Android app to locally store and watch videos.
- Import videos directly from your device.
- Store and watch videos entirely offline.
- Custom video player with enhanced controls.
- Thumbnail generation and metadata extraction.
- Lightweight and privacy-friendly — no cloud or network access.
- React Native/Expo
- DB: Drizzle ORM with SQLite
- State and storage: Zustand + react-native-mmkv
- UI libraries: RN Primitives, RN Reusables, Nativewind
- This app is intended for local use only. No data leaves your device.
- Requires expo-dev-client; not compatible with Expo Go.
- See the app design overview for themes, logos, and asset generation details.
Download the latest APK from the Releases page and install it on your Android device.
You can generate a smaller, optimized APK for your specific device using the provided generate-device-apk.sh script:
-
Build the AAB with EAS
# use --local to build on device. eas build -p android --profile preview -
Download the .aab file (if built via expo.dev)
- Place it in the root directory. You can skip this step if you built it locally.
-
Get credentials.json and keystore.jks
eas credentials -p android
-
Create .env.local
- Copy the example .env file and update its values with those from credentials.json.
cp example.env .env.local
-
Make script executable
chmod +x generate-device-apk.sh
-
Run script
./generate-device-apk.sh
- Save timestamp of last view of video.
- key =
videoProgress:${videoId} - value =
10(player.currentTime | number | seconds)
- key =


