Split package into core, node and app #2580
Description
- Version: 0.39.0
- Platform: All
- Subsystem: Package
Type: Enhancement
Severity: Medium
Description:
This issue is a continuation of the #2550. Current ipfs
package is overloaded and violates SOLID and KISS principles. It has too much responsibilities: run IPFS node, run web interface, serve as a library, etc.
I propose to split the package into submodules according to functionality:
- IPFS core: for build IPFS into another products.
- IPFS node: for running standalone node as a micro/web-service as a daemon. This is what ipfs package should be, as I think.
- IPFS webapp: for node management and inspection.
Use cases
Built-in node
I'm using IPFS in my product for readonly downloads and as a local cache for the downloaded data. This is running inside of the client application which has its' own management tools and interfaces. Thus there is no need in web interface, cli tools or keys management. I need only minimal IPFS installation.
Overlays
Also I've created an overlay which serves only exact type of content received via IPFS. It validates data before serving it. Such content type could be one from limited set e.g. JSON schemas, JS bundles, git repo. So I need to preserve common interface and add custom error codes over provided by IPFS. And I have my own web interface and management tools.
Shards
Using IPFS as a part of a distributed file storage requires only network interface and core functionality.