A decentralized video sharing app powered by Nostr - the open social protocol.
Vlogstr is a mobile-first video sharing application that leverages the Nostr protocol for decentralized content distribution. Built with Flutter and powered by Purplestack, it provides a familiar short-form video experience while maintaining user sovereignty over their content and social graph.
- Built-in Camera Recording: Record videos directly within the app with front/back camera switching
- Gallery Upload: Select and share existing videos from your device
- Smart Video Compression: Automatically compresses videos by 60-80% for faster uploads
- Dual Progress Tracking: Real-time feedback during compression and upload phases
- NIP-71 Compliant: Full support for Nostr video events (kinds 21 & 22)
- Home Feed: Discover videos from the Nostr network
- User Profiles: View and edit profile information including display name, bio, and avatar
- Video Player: Full-featured video playback with controls
- Engagement Metrics: Track likes, reactions, and engagement on videos
- Dashboard: Personal analytics showing your videos, followers, and engagement stats
- Amber Signer Integration: Secure key management via NIP-55 compatible Android signer
- Multi-account Support: Switch between multiple Nostr identities
- Private Key Security: Keys handled securely with no permanent storage
- Unified Share Modal: Single share button with two options - copy URL or share to Nostr
- Share to Nostr: Create kind 1 notes referencing your videos with unified vlogstr.com URLs
- Quick Insert Tools: Easily add video URLs and metadata to posts
- Delete Videos: Remove your content with NIP-09 deletion events
- Follow System: Build your social graph on the decentralized network
- Material 3 Design: Modern, clean interface following latest Material Design guidelines
- Dark/Light Theme: Automatic theme switching based on system preferences
- Responsive Layouts: Optimized for various screen sizes
- Skeleton Loading: Smooth loading states that match content structure
- Pull-to-refresh: Update feeds with familiar gestures (where appropriate)
- Double-tap to Like: Intuitive gesture controls - single tap to play/pause, double-tap to like videos
- Lightning Wallet Integration: Connect Nostr Wallet Connect (NWC) compatible wallets for zap functionality
- Local-first Architecture: Content cached locally for offline viewing
- Relay Pool Management: Efficient connection to multiple Nostr relays
- Blossom Protocol: Decentralized file storage for video content
- State Persistence: Maintains app state across sessions
- Deep Linking: Support for vlogstr.com URLs
- Flutter: Cross-platform mobile framework
- Riverpod: State management and dependency injection
- Purplestack: Nostr development framework
- Models Package: Domain models for Nostr events
- Purplebase: SQLite-powered local storage and relay pool
- Amber Signer: NIP-55 authentication
- Blossom: Decentralized file upload protocol
- Flutter SDK (3.8.1 or higher)
- Android Studio or VS Code with Flutter plugins
- Android device or emulator
- Amber app for authentication
# Clone the repository
git clone https://github.com/patrickulrich/vlogstr-android.git
cd vlogstr-android
# Install dependencies
flutter pub get
# Run the app
flutter run
# Build APK for Android
flutter build apk --target-platform android-arm64 --split-per-abi
# The APK will be available at:
# build/app/outputs/flutter-apk/app-arm64-v8a-release.apk
lib/
├── screens/ # UI screens
│ ├── main_screen.dart # Bottom navigation container
│ ├── home_screen.dart # Video feed
│ ├── discover_screen.dart # Discovery/explore
│ ├── recorder_screen.dart # Video recording/upload
│ ├── dashboard_screen.dart # User analytics
│ ├── camera_recording_screen.dart # Built-in camera
│ ├── video_publish_screen.dart # Video metadata editor
│ ├── note_composer_screen.dart # Share to Nostr composer
│ ├── contact_selection_screen.dart # DM contact selection
│ ├── settings_screen.dart # App settings and wallet config
│ └── ...
├── providers/ # Riverpod providers
├── widgets/ # Reusable UI components
├── services/ # Business logic services
└── utils/ # Utility functions
The app uses a relay pool configuration for connecting to Nostr relays. Default relays include:
- wss://relay.damus.io
- wss://relay.primal.net
These can be configured in the storage configuration.
Contributions are welcome! Please feel free to submit pull requests or open issues for bugs and feature requests.
Consider distributing through Zapstore for a freedom-focused app store experience.
MIT
Powered by Purplestack - Development stack for building Nostr-enabled applications