Drupal Fission IPFS Module

Description

A Drupal Module that supports IPFS using the Fission web API.

This may also result in an upgraded Fission PHP client library and/or work on a more general php-ipfs-client.

Overview

Drupal has a long history of doing interesting things with up and coming web protocols, especially those related to the distributed web and identity.

The goal is to make an initial Drupal module with basic features and functionality, including some “demo” / out of the box examples of how IPFS can work in a Drupal context.

This module can then be extended / depended on by other modules to add advanced IPFS functionality.

Exactly how IPFS can best work with classic LAMP / Web2 applications like Drupal is open for exploration. That is definitely in scope for this project. Here are some feature enabled by IPFS:

  • files uploaded are guaranteed to be unmodified — like a digital fingerprint, helpful for time stamping or anti-deep-fake
  • share files / content across many contents
  • offline support

The “brainstorming” section is meant to start the discussion. Please do use the comments to suggest more ideas and features.

Features

Fission Support

Integrate the Fission PHP client and config settings so that a Fission user can start using IPFS functionality in their Drupal site.

Other IPFS web APIs — eg. Piñata, Textile, Temporal, Infura, etc. — should ideally be able to be added in a similar way.

Generic IPFS Support / PHP Client

There are a variety of PHP IPFS libraries — eg. https://github.com/digitalkaoz/php-ipfs-api for one that seems moderately up to date.

Research which of them work, and set up config so that a “local” IPFS node can be used.

Ideally, this can be re-purposed for other PHP applications as well.

IPFS Browser Support Detection & js-ipfs loading

The in-browser JavaScript IPFS client could be included to have native IPFS support without a local IPFS client / detect support in browsers. Should use the Fission Get IPFS library https://github.com/fission-suite/get-ipfs

Brainstorming

Publish to IPFS

Publish a node / page to IPFS, or even an entire Drupal site. This means it can be browsed offline, cached automatically, and bandwidth shared by anyone running IPFS.

Even better for PDFs, large images, files, videos etc.

User Files on IPFS

When users upload images and other files, they are uploaded to IPFS, and referenced by hash and/or configurable gateway link. This would be like the Ghost IPFS Storage Adapter.

Also: users can also paste an IPFS hash to “upload” / attach / include in a Drupal node. Might need an IPFS hash “filter”, with optional prepend a gateway?

User IPFS “Folder” Sync

In a user profile, set an IPFS hash representing a folder.

As the user adds files to that folder from desktop, mobile, etc, those files become (optionally) browseable on Drupal, and easily able to be selected for inclusion in nodes.

There is an existing IPFS module for Drupal but it has no code published for it. Ideally, we’ll ask if we can use that namespace.

Left a comment now that we’re getting started with this: https://www.drupal.org/project/ipfs/issues/2980462#comment-13473889

The two existing modules to review / test / extend are: