Atomic-Server + Content Addressing (like IPFS)
Since Atomic Data uses a lot of (non-local) HTTP resources, there is a risk of remote errors that make data unfetchable. When a server goes down, a resource has changed or a domain name hasn't been paid for - the request will fail. That is part of the web, and we have a chance to encounter this every time we open a webpage.
With Atomic Data, however, we rely even more intensely on remote data. Atomic Properties, for example, tell us something about the datatype of an Atom. When parsing triples with new properties for a client, the properties need to resolve. IPFS might help with this, as it can enable 'freezing' of resources. The frozen resources could still contain a link to the original source (HTTPS address) which can be used for updating properties.
Responsibilities of IPFS module in server
- Store Commits in ipfs (these are always immutable) - no reason to store these using other mechanism.
- Store versioned representations of resources n0-computer/iroh#42. I think storing all versions is a good first step, but in the end the server might decide to only store the latest version of a resource.
- Resolve
/ipfsurls (at least - if they are Atomic Resources, maybe skip non-atomic data?) - When using some property URL, freeze it and convert it to IPFS (if this is set, maybe this should be optional).
Implementation
Full ipfs node in app (depracated)
The rust-ipfs crate seems to be the only true option. I've been following it for quite some time. I think it still needs the add feature, though. Lacks a DHT implementation, and it might take a while before this is realized.
EDIT: It's no longer maintained
Client-only - use external gateway
ipfs-embed is lighter weight, but requires an external ipfs node.
ipfs-api is an interesting one. Connect to an external gateway, and use that as both storage and resolve mechanism.
https://docs.rs/ipfs-api/0.11.0/ipfs_api/#writing-a-file-to-ipfs
IROH
From creators of IPFS & Filecoin. Written in rust, is embeddable, uses this cool new hashing algorithm, does hole-punching and has iroh-blobs. It outputs 'tickets' which point to a node + file hash.
It seems like a true schema (like ipfs / ipns) for resolving files is still missing, though.
I'm also unsure as to how performant this would be in practice. Is node discovery fast? Is only the first request slow? Can the network get clogged easily?