---
# System prepended metadata

title: A Better IPFS

---

# A Better IPFS

### 1. Next-Gen MerkleDAG service
**A MerkleDAG service with sub-second resolution time for any CID Path available on the network at time of request.**

If IPFS can resolve 80% of all available CIDs in less than a second, and complete 80% of block transfers in the 0.9-1.2sec range, indepdendant of network node count, we have a reliable primitive to build on top of.

If the 95th percentile response time is less than 4 seconds, request deadlines for unavailable/nonexistent content can be dropped into the 5-10 second range.

Ideally deep paths would add a negligable overhead to response times: fetching `bafyHash/foo/bar/baz` would be only slightly slower than fetching `bafyHash`.

These requirements assume a network constructed only of nodes running this same new, improved implementation. Users of this new tech should signal over the network & default to prioritizing nodes running better tech within the connection manager.


### 2. Improved & Predictable Resource Consumption
Along with improved response times, I would like to see orders-of-magnitude better resource consumption.

* 95% of process time consumes less than 100Mb of RAM when running in default configuration 
* less than 5% of CPU when running in the background. User requests burst to high CPU
* all services come with a default implementation, configurable to call out to a network-backed implementation

### 3. Network-Backed Subservices
Configuration should allow me to specify a multiaddr for a network-backed implementation of all subservices. This binary should not support plugins.

### 4. Better libp2p host sharing story
We need to figure out how multiple processes can share the same libp2p "host", while also accounting for challenges in multi-tenancy. I should be able to run multiple copies of IPFS locally and have them "split" a total pool of peer connections, using local networking to connect the two processes for pass-through requests.

I should also be able to run my own custom libp2p protocols, registered and consumed per-process.

### 5. Peering API
* peer commands should provide a better foundation for decentralized Identity.
* User-defined timeouts on all requests, requesting peerID is attached to all requests & propagated through all subsystems
* process-external connection manager API
* peer management is _not_ stored in configuration.

### 6. Selector API
We need a better way to express DAG selections. The same API should be used to construct requests and pin DAGs / subDAGs.

### Kitchen sink of nice-to-haves

#### Persistence / Repo layout
* **all local state is stored in a database** ideally defaulting to sqlite but swappable for postgres
* * No external repo migration binary. Easier if we're using a DB & just need to migrate schemas.

#### CLI
* Fewer commands please.
* Javascript REPL? Can we avoid command line bloat with a javascript REPL, similar to GETH?

#### Adding Data
* Data adding rate is ~1Gb/sec
* DAG construction APIs are IPLD native
* Cannot construct new CIDv0 hashes