Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

List of experimental IPFS features #3397

Closed
whyrusleeping opened this issue Nov 18, 2016 · 16 comments
Closed

List of experimental IPFS features #3397

whyrusleeping opened this issue Nov 18, 2016 · 16 comments
Labels
need/analysis Needs further analysis before proceeding

Comments

@whyrusleeping
Copy link
Member

whyrusleeping commented Nov 18, 2016

Update 23-Jul-2017 -- Since #4036 experimental features are documented in docs/experimental-features.md.


IPFS currently has a few different features that are in the 'experimental' phase. This might be because we arent fully confident in releasing the code as an official feature yet, or because we don't want to make a certain change to the network yet. Whatever the case, we should have a log of all of those features and their states.

Lets use this issue to track the state of these features, and maybe think about putting this info in a doc that we commit to version control.

@whyrusleeping
Copy link
Member Author

whyrusleeping commented Nov 18, 2016

ipfs pubsub

State

experimental, default-disabled.

In Version

0.4.5

How to enable

run your daemon with the --enable-pubsub-experiment flag. Then use the ipfs pubsub commands.

Road to being a real feature

  • Needs more people to use and report on how well it works
  • Needs authenticated modes to be implemented
  • needs performance analyses to be done

@whyrusleeping
Copy link
Member Author

whyrusleeping commented Nov 21, 2016

Client mode DHT routing

Allows the dht to be run in a mode that doesnt serve requests to the network, saving bandwidth.

State

experimental.

In Version

0.4.5

How to enable

run your daemon with the --routing=dhtclient flag.

Road to being a real feature

  • Needs more people to use and report on how well it works.
  • Needs analysis of effect it has on the network as a whole.

@whyrusleeping whyrusleeping added the need/analysis Needs further analysis before proceeding label Nov 28, 2016
@whyrusleeping
Copy link
Member Author

whyrusleeping commented Dec 5, 2016

go-multiplex stream muxer

Adds support for using the go-multiplex stream muxer alongside (or instead of) yamux and spdy. This multiplexer is far simpler, and uses less memory and bandwidth than the others, but is lacking on congestion control and backpressure logic. It is available to try out and experiment with.

State

Experimental

In Version

0.4.5

How to enable

run your daemon with --enable-mplex-experiment

To make it the default stream muxer, set the environment variable LIBP2P_MUX_PREFS as follows:

export LIBP2P_MUX_PREFS="/mplex/6.7.0 /yamux/1.0.0 /spdy/3.1.0"

To check which stream muxer is being used between any two given peers, check the json output of the ipfs swarm peers command, you'll see something like this:

$ ipfs swarm peers -v --enc=json | jq .
{
  "Peers": [
    {
      "Addr": "/ip4/104.131.131.82/tcp/4001",
      "Peer": "QmaCpDMGvV2BGHeYERUEnRQAwe3N8SzbUtfsmvsqQLuvuJ",
      "Latency": "46.032624ms",
      "Muxer": "*peerstream_multiplex.conn",
      "Streams": [
        {
          "Protocol": "/ipfs/bitswap/1.1.0"
        },
        {
          "Protocol": "/ipfs/kad/1.0.0"
        },
        {
          "Protocol": "/ipfs/kad/1.0.0"
        }
      ]
    },
    {
...

Road to being a real feature

  • Significant real world testing and performance metrics across a wide variety of workloads showing that it works well.

@whyrusleeping
Copy link
Member Author

Raw Leaves for unixfs files

Allows files to be added with no formatting in the leaf nodes of the graph.

State

experimental.

In Version

master, (0.4.5).

How to enable

Use --raw-leaves flag when calling ipfs add.

Road to being a real feature

  • Needs more people to use and report on how well it works.

@whyrusleeping
Copy link
Member Author

Ipfs Filestore

Allows files to be added without duplicating the space they take up on disk.

State

experimental.

In Version

master, (0.4.7).

How to enable

Modify your ipfs config:

ipfs config --json Experimental.FilestoreEnabled true

And then pass the --nocopy flag when running ipfs add

Road to being a real feature

  • Needs more people to use and report on how well it works.
  • Need to address error states and failure conditions
  • Need to write docs on usage, advantages, disadvantages
  • Need to merge utility commands to aid in maintenance and repair of filestore

@Kubuxu
Copy link
Member

Kubuxu commented Mar 6, 2017

Private Networks

Allows ipfs to only connect to other peers who have a shared secret key.

State

Experimental

In Version

master, 0.4.7

How to enable

Generate a pre-shared-key using ipfs-swarm-key-gen):

go get github.com/Kubuxu/go-ipfs-swarm-key-gen/ipfs-swarm-key-gen
ipfs-swarm-key-gen > ~/.ipfs/swarm.key

To join a given private network, get the key file from someone in the network and save it to ~/.ipfs/swarm.key (If you are using a custom $IPFS_PATH, put it in there instead).

When using this feature, you will not be able to connect to the default bootstrap nodes (Since we arent part of your private network) so you will need to set up your own bootstrap nodes.

To prevent your node from even trying to connect to the default bootstrap nodes, run:

ipfs bootstrap rm --all

To be extra cautious, You can also set the LIBP2P_FORCE_PNET environment variable to 1 to force the usage of private networks. If no private network is configured, the daemon will fail to start.

Road to being a real feature

  • Needs more people to use and report on how well it works
  • More documentation

@magik6k
Copy link
Member

magik6k commented Jun 18, 2017

ipfs p2p


Allows to tunnel TCP connections through Libp2p sterams

State

Experimental

In Version

master, 0.4.10

How to enable

PTP command needs to be enabled in config

ipfs config --json Experimental.Libp2pStreamMounting true

How to use

Basic usage:

  • Open a listener on one node (node A)
    ipfs p2p listener open p2p-test /ip4/127.0.0.1/tcp/10101
  • Where /ip4/127.0.0.1/tcp/10101 put address of application you want to pass p2p connections to
  • On the other node, connect to the listener on node A
    ipfs p2p stream dial $NODE_A_PEERID p2p-test /ip4/127.0.0.1/tcp/10102
  • Node B is now listening for a connection on TCP at 127.0.0.1:10102, connect your application there to complete the connection

Road to being a real feature

  • Needs more people to use and report on how well it works / fits use cases
  • More documentation
  • Support other protocols

@ghost
Copy link

ghost commented Jul 23, 2017

Since #4036 experimental features are documented in docs/experimental-featuers.md

@Kubuxu
Copy link
Member

Kubuxu commented Jul 23, 2017

@lgierth this should be added as a top comment (edit).

@ghost
Copy link

ghost commented Jul 23, 2017

right, good call

@whyrusleeping
Copy link
Member Author

I'm gonna go ahead and close this

come-maiz pushed a commit to come-maiz/go-ipfs that referenced this issue Jan 7, 2018
According to ipfs#3397 (comment), the status of experimental features is now tracked in a file in the repo, not in an issue.
come-maiz pushed a commit to come-maiz/go-ipfs that referenced this issue Jan 7, 2018
According to ipfs#3397 (comment), the status of experimental features is now tracked in a file in the repo, not in an issue.

License: MIT
Signed-off-by: Leo Arias <[email protected]>
AFDudley pushed a commit to vulcanize/go-ipfs that referenced this issue Mar 22, 2018
According to ipfs#3397 (comment), the status of experimental features is now tracked in a file in the repo, not in an issue.

License: MIT
Signed-off-by: Leo Arias <[email protected]>
@pataquets
Copy link
Contributor

I'm trying one of them without experiencing problems, so far. But when I want to provide feedback, no clear method is given.
Any feedback form? Any issue?
Also, a link to each feature's own issue would be helpful in reporting problems or giving feedback.

@magik6k
Copy link
Member

magik6k commented Oct 11, 2018

If you have any feedback other than 'it works', you should open a new issue. ('it works' is also a valid feedback for these features, there is just no good place for it)

@danimesq
Copy link

danimesq commented Nov 7, 2019

@whyrusleeping
Is your comment updated? #3397 (comment)

@Stebalien
Copy link
Member

@DaniellMesquita no. The Filestore is still unstable.

Personally, I'm hesitant to stabilize it ever as deleting files from the filestore can remove blocks from independently pinned files.

Ways forward:

  • Create a separate dropbox-like ipfs application that watches a directory and only serves files out of that directory. When added/removed from the watched directory, files would be added/removed from IPFS.
  • Keep the filestore and the blockstore independent. That is, never count us "having" a block if we have it in the filestore when adding data via ipfs add or ipfs get.
  • Improve mount support to the point where users can just keep their files in IPFS.

@Stebalien
Copy link
Member

@Johnlez7 please ask on discuss.ipfs.io

@ajnavarro ajnavarro mentioned this issue Aug 24, 2022
72 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
need/analysis Needs further analysis before proceeding
Projects
None yet
Development

No branches or pull requests

6 participants