datmobile

Mobile app for viewing Dats. Pronounced like the famous hero's car.

MIT License

Stars
46
Committers
1

Datmobile (download)

A mobile app for viewing Dat Archives. Drive all around the P2P web with your phone. Pronounced like the famous hero's car.

Status:

I've run into performance issues with keeping the Dat logic within the React-Native thread.

Protocol interception seems to be working, but I'll be putting this on hold until I can refactor it to use nodejs-mobile.

Plans:

  • Set up RN project (Start with Android for now)
  • Get hyperdrive running in RN
  • Get hyperdrive replicating with dat-gateway through websockets
  • Make a viewer similar to dat-js-example
    • Load Dat from URL bar
    • View with some default URLs to visit
    • Directory listing
    • View text files in a Text element
    • Image viewing
    • Markdown support through some component
    • HTML viewier with a webview (Won't support relative URLs or dat://protocol)
    • Make it actually work on the device without remote debugging Thanks @mafintosh!
  • Release to playstore
  • Get discovery-swarm to work with RN in the JS thread
    • dat-dns
    • Identify the node modules that need to run in RN
    • Use discovery-swarm instead of gateway
      • Test dns tracker functionality
      • Test DHT (Bootstraps into the DHT, doesn't find peers)
      • Test MDNS
  • Support dat protocol as a browser
    • Find how to support custom protocols in Webview (Android)
      • shouldInterceptRequest
      • Add a registerStreamProtocol API based on electron's protocol API
      • Follow guide for customizing react-native-webview
      • Create Java ReactNativeProtocolViewManager
        • Custom WebViewClient to intercept requests
        • Extend RNCWebView commandMap with commands for sending responses
        • Generate events for intercepting requests
        • Add props for protocol scheme list
      • Create ProtocolWebView JS API
        • static registerProtocol and unregisterProtocol
        • pass list of protocols to native props
        • add an event listener for intercepted requests to use the protocol handlers
      • Test it out with a dummy protocol
    • Update fork of react-native-webview that supports intercepting URLs
    • Create DatWebview which adds support for dat:// protocol
    • Make browser UI with the new webview, replacing the viewer functionality
    • Support version portion of dat:// URL
  • Keep track of history and view / clear it
  • DatArchive API
  • Extract WebView into own library
  • Extract Dat mechanics into react-native-dat
  • Extras!
    • experimental.datPeers API
    • Add Blocklist for trackers and ads
  • Perormance improvements
    • Close repos when they're not in use
    • Don't upload to discovery-swarm while on battery
    • Download bookmarked site updates when charging and not on metered wifi
    • Keep an LRU of archies to seed in the background
    • Prioritize local network over internet
    • DNS caching

Contributing:

  • Changes are very much welcome!
  • Please open an issue if you have an idea for a big change before doing a PR.
  • Please use the "standard" code style.

Building

  • npm install
  • npm run nodeify
  • react-native link react-native-randombytes
  • react-native link react-native-tcp
  • react-native link react-native-udp
  • react-native link react-native-os
  • react-native link react-native-webview
  • react-native run-android

Privacy:

Datmobile does not collect or save any of your personal data, or share it with third parties.