A fully open-source, decentralized .NET MAUI media player for Bitcoin testnet3 and IPFS
A .NET MAUI-based mini player application that integrates with Bitcoin testnet3 and IPFS for decentralized media distribution.
SupStick is a cross-platform media player and P2FK (Pay-to-Future-Key) message indexer that:
- Connects directly to Bitcoin testnet3 P2P network (no RPC server required)
- Real-time transaction monitoring via peer-to-peer protocol
- Parses P2FK messages embedded in Bitcoin transactions
- Downloads and indexes media files from IPFS
- Provides seamless audio and video playback with playlist management
- Works offline without reliance on third-party services
- Supports devices from iPod Watch to PC monitors with full-screen capability
- Direct P2P connection to Bitcoin testnet3 network
- No Bitcoin node or RPC server required
- Real-time transaction monitoring via network gossip
- Mempool transaction tracking
- P2FK message parsing from transaction data
- Extracts messages and files from Bitcoin transactions
- Parses P2FK protocol messages using adapted Root.cs logic
- Identifies IPFS links in messages (e.g.,
<<IPFS:QmHash\filename.ext>>) - Supports both text messages and file attachments
- Direct IPFS P2P network connection
- No reliance on HTTP gateways
- Connects to IPFS bootstrap nodes
- Downloads files directly from IPFS peers
- Automatic retry with peer reconnection
- File indexing and local storage
- Seamless playback between audio and video tracks
- Full playback controls: Play, Pause, Stop, Next, Previous
- Playlist management: Create, edit, and delete playlists
- Mixed audio/video playlists with uninterrupted playback
- Repeat and shuffle modes
- Volume control
- Full-screen mode support for all devices
- Progress tracking with seek capability
- Encrypted local SQLite database
- View all indexed files and messages
- Search by address or P2FK handle
- Delete specific items or clear all data
- Block addresses to prevent unwanted content
- Input sanitization for all user inputs
- Encrypted local data storage
- Address blocking to filter content
- Secure file handling
- Status Screen: Latest indexed files/messages and monitoring status
- Media Player Screen: Full-featured player with library, queue, and playlist management
- Search Screen: Find messages/files by P2FK handle or address
- Setup Screen: Configure Bitcoin RPC, manage monitored addresses, and settings
- ✅ PC (Windows)
- ✅ Mac (macOS via MacCatalyst)
- ✅ Linux (planned)
- ✅ Android
- ✅ iPhone (iOS)
- ✅ iPod Watch (watchOS - UI optimized for small screens)
- BitcoinService: Bitcoin testnet3 RPC client
- P2FKService: P2FK message parser
- IpfsService: IPFS gateway client with retry logic
- DataStorageService: Encrypted local database operations
- TransactionMonitorService: Real-time transaction monitoring and indexing
- MediaPlayerService: Media library and playlist management
- P2FKRoot: P2FK message structure
- IndexedItem: Stored messages and files
- MediaItem: Media file metadata
- Playlist: Playlist definitions
- MonitoredAddress: Addresses to monitor
- BlockedAddress: Blocked addresses
- StatusViewModel: Transaction monitoring status
- MediaPlayerViewModel: Media playback and playlist management
- SearchViewModel: Search functionality
- SetupViewModel: Configuration and settings
For complete step-by-step instructions starting from a fresh Windows 11 installation, see the BUILD_GUIDE.md which includes:
- Installing Visual Studio 2022 with .NET MAUI
- Building for Windows PC
- Testing on Android emulator
- Testing on iPhone (via Mac)
- Troubleshooting common issues
- .NET 9.0 SDK or later
- MAUI workloads installed
- No Bitcoin node required - connects directly to P2P network
Windows PC:
git clone https://github.com/embiimob/SupStick.git
cd SupStick
dotnet restore
dotnet build -f net9.0-windows10.0.19041.0
dotnet run -f net9.0-windows10.0.19041.0Android:
dotnet build -f net9.0-android
# Then deploy via Visual Studio or ADBiOS (on Mac):
dotnet build -f net9.0-ios
dotnet run -f net9.0-ios- Launch the app on your target platform
- The app will automatically connect to Bitcoin testnet3 P2P network
- Navigate to the Setup screen to:
- Check connection status
- Add addresses to monitor
- Manage blocked addresses
- Navigate to Status screen and start monitoring
No RPC configuration required! The app connects directly to Bitcoin testnet3 peers.
- Go to Status screen
- Tap Start Monitoring to begin indexing P2FK messages
- View newly indexed items in real-time
- Swipe items to delete unwanted content
- Go to Media Player screen
- Browse the Library tab to see all media files
- Tap ▶ to play a track or swipe to add to queue
- Use the Queue tab to manage current playlist
- Create playlists in the Playlists tab
- Use playback controls:
- ▶ Play / ⏸ Pause / ⏹ Stop
- ⏮ Previous / ⏭ Next
- 🔀 Shuffle / 🔁 Repeat
- ⛶ Full Screen (for video)
- Add tracks to queue from Library
- Tap New Playlist button
- Enter playlist name and description
- Tap Save Playlist
- Load playlists by tapping ⏯ icon
- Playlists seamlessly play audio and video tracks
- Go to Search screen
- Enter Bitcoin address or P2FK handle
- Tap Search
- View results and swipe to delete
- Go to Setup screen
- Swipe a monitored address
- Or view blocked addresses section
- Swipe to unblock if needed
The application parses P2FK (Pay-to-Future-Key) messages embedded in Bitcoin testnet3 transactions using micro-transactions with specific values (0.00000001, 0.00000546, etc.). Messages are encoded in the payload of Bitcoin addresses.
The app connects directly to Bitcoin testnet3 peer-to-peer network using NBitcoin's P2P protocol implementation:
- Discovers and connects to testnet3 peers
- Subscribes to transaction inventory messages
- Downloads transactions directly from peers
- No dependency on external RPC servers or blockchain APIs
- Fully decentralized operation
Files referenced with IPFS hashes are automatically downloaded using direct P2P connection to the IPFS network:
- Initializes local IPFS engine with repository
- Connects to IPFS bootstrap nodes
- Downloads files directly from IPFS peers
- No dependency on HTTP gateways (ipfs.io, etc.)
- Fully decentralized file retrieval
- Automatic retry with peer reconnection
The media player supports:
- Audio formats: MP3, WAV, OGG, M4A, AAC, FLAC, WMA, OPUS
- Video formats: MP4, AVI, MKV, MOV, WMV, FLV, WEBM, M4V, MPG, MPEG
Playlists can contain both audio and video tracks, and playback continues seamlessly between different media types.
The media player adapts to all screen sizes:
- Small screens (iPod Watch): Optimized compact UI
- Mobile (iPhone/Android): Touch-optimized controls
- Tablets: Enhanced layout
- Desktop (PC/Mac): Full-featured interface with keyboard support
- Microsoft.Maui.Controls (9.0.10): Cross-platform UI framework
- NBitcoin (7.0.40): Bitcoin library for P2P networking and transaction parsing
- Newtonsoft.Json (13.0.3): JSON serialization
- SQLite-net-pcl (1.9.172): Local database
- sqlite-net-sqlcipher (1.9.172): Encrypted database support
- Ipfs.Core (0.97.0): IPFS core library
- Ipfs.Engine (0.97.0): IPFS engine for direct P2P
- Ipfs.Http.Client (0.97.0): IPFS HTTP client fallback
- All user inputs are sanitized to prevent injection attacks
- Local database is encrypted using SQLCipher
- File paths are validated before access
- Address blocking prevents malicious content indexing
- No external service dependencies for core functionality
This project is 100% open source and licensed under the MIT License.
SupStick is committed to being fully open source:
- ✅ No proprietary code - All source code is freely available
- ✅ No vendor lock-in - Use and modify as you need
- ✅ Community-driven - Contributions welcome
- ✅ Transparent - All code is auditable
- ✅ Free forever - No paid tiers or premium features
You are free to:
- ✓ Use this software for any purpose
- ✓ Study how the software works
- ✓ Modify the software to suit your needs
- ✓ Distribute copies of the software
- ✓ Distribute modified versions of the software
We welcome contributions! This is an open-source project and community participation is encouraged.
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
- Be respectful and inclusive
- Provide constructive feedback
- Focus on the code, not the person
- Help make this project better for everyone
- Issues: Report bugs or request features via GitHub Issues
- Discussions: Join conversations in GitHub Discussions
- Documentation: Check the README and code comments
Made with ❤️ by the open-source community
This project is completely open source and free to use under the MIT License.