Today we are excited to announce Durin, a native mobile application for iOS (opens new window) and Android (opens new window) built to give users a new way to read and share with IPFS. It also serves as a sandbox for the Browsers & Platforms team to experiment with IPFS in a mobile environment.
To date, it's been difficult to access, upload, and share IPFS content using a mobile device. This is for a number of reasons, one of which is that Kubo (opens new window)(the initial implementation of the protocol) was simply not built with mobile in mind. The IPFS approach to P2P for many years was about running servers, but that is changing (opens new window). In the meantime, we wanted to provide a quick and easy way for users to access basic IPFS features on mobile and set up a testing ground for future explorations.
# Accessing IPFS Content
The transport-agnostic nature of IPFS content addresses means there are many ways to find and retrieve content on the IPFS public network. On a mobile device, the best balance of decentralization and device performance is to align with the network model of the device OS - transient connectivity.
We do this in Durin by connecting to the IPFS network via multiple HTTP gateways. On app launch, Durin pings a list of public gateways, and determines which route is the most reliable and fastest way to access the network. This approach is functional but not optimal. We're working on specifications for multi-gateway connectivity patterns which balance a number of factors - such as verifiability guarantees, reader privacy, and not overloading gateways.
IPFS addresses are not natively supported in most web browsers or any mobile operating systems today. Durin registers as an
ipfs scheme handler so that addresses are handled when encountered in applications and on the web.
On iOS Safari
ipfs:// protocol links will be redirected to Durin, where the app will translate and redirect the user to the fastest public gateway, making the content available on mobile. Unfortunately the auto-redirects do not work using Chrome's android app. They have not yet implemented
registerProtocolHandler (opens new window)).
# Sharing to IPFS from Mobile
Mobile devices are transiently connected and low-powered, so they do not make good servers. For sharing files and data to IPFS, Durin uses a pinning service (opens new window) to do this on behalf of the user.
We currently rely on web3.storage (opens new window) for file uploads.
web3.storage is a service that makes decentralized file storage accessible by hosting data on IPFS for the user, the way a web host does for HTTP today. NOTE: Using a single service like this is not ideal, as users don’t hold those keys. We plan to experiment with approaches to ensuring maximal user ownership of their data while also providing remote storage and data availability.
Durin also saves a local history of uploads already shared.
Using a single remote service is a usable first step, but doesn't provide long term user control of the data published. We're looking at tighter integration with local OS data storage, local sharing between devices when possible, and pluggable remote service support.
# Install Durin
# The Future
Durin is an experiment in learning how to expose and integrate IPFS features into mobile operating systems in ways which align optimally with those environments. We're trying out variety of ideas from contacts integration, photo sync & backup, filecoin storage, peer to peer bluetooth connectivity.
We'd love to hear your ideas and feedback, and have you participate!
- ipfs-shipyard/durin on Github (opens new window)
- HackMd project document (opens new window)
- Feedback link (opens new window)
Checkout the IPFS Thing talk, discussing Durin's role and some future ideas for the app.
Shout out to Trigram (opens new window) for continued work on Durin.