
Show HN: Peer-to-peer chat example built with JavaScript IPFS - p2pchatter
https://ipfs.io/ipfs/QmVUvLMxTEaVBpiQBiBBdnv7ZTwt7pv8BxNhpPCMixuRBT/
======
mynewtb
How does something like this scale? The more hashes there are in IPFS the more
latency, or am I misunderstanding?

~~~
p2pchatter
No, there is no global database. You just share hashes that you know about, so
no matter how many hashes there is, IPFS will still be the same speed.

------
p2pchatter
Hello, I made this! Please try it out and tell me what you think. Annotated
source is public here:
[https://ipfs.io/ipfs/QmVUvLMxTEaVBpiQBiBBdnv7ZTwt7pv8BxNhpPC...](https://ipfs.io/ipfs/QmVUvLMxTEaVBpiQBiBBdnv7ZTwt7pv8BxNhpPCMixuRBT/docs/app.html)

~~~
geoah
An insane amount of `NullPointerException` messages are ruining the fun! :D

------
xiconfjs
My Browser crashed after a few minutes...FF57 @ Ubuntu 16.04 :(

~~~
creichenbach
Same here.

Every message (including sign-on/-off) creates a node in the DOM tree that
never gets removed. That's about 15-20 per second at the moment, so this might
cause the eventual crash.

------
LoSboccacc
very interesting. seems to be handling the load exceptionally well, even if
the system messages are interfering right now. latency is quite good to!

there's something I don't understand from skimming the docs: if I want to use
IPFS for a project of mine, do I have to deploy a IPFS backend or there's a
default I can use? it's said to be peer-to-peer so unless the peer are shared
across all projects small implementation may have issues to keep availability.

edit: figured out there's a public gateway and one can also set up a private
swarm. sweet!

~~~
p2pchatter
Yes, system messages got in the way. Try this version without them:
[https://ipfs.io/ipfs/QmbZVv9q52znhF9wN6GVi55EJQYq2BR6oeTgzVn...](https://ipfs.io/ipfs/QmbZVv9q52znhF9wN6GVi55EJQYq2BR6oeTgzVnLxFC7Uf)

If you want to use IPFS, you can either import IPFS as a library (which this
application does, everything is P2P in the browser, by using js-ipfs and
including it in the application, you can see it in the annotated source here:
[https://ipfs.io/ipfs/QmbZVv9q52znhF9wN6GVi55EJQYq2BR6oeTgzVn...](https://ipfs.io/ipfs/QmbZVv9q52znhF9wN6GVi55EJQYq2BR6oeTgzVnLxFC7Uf/docs/app.html))
or you can connect to a gateway.

------
p2pchatter
Hello again everyone! Seems like a lot more people joined the chat and the
system messages are kind of getting into the way. I've released a updated
version here:
[https://ipfs.io/ipfs/QmbZVv9q52znhF9wN6GVi55EJQYq2BR6oeTgzVn...](https://ipfs.io/ipfs/QmbZVv9q52znhF9wN6GVi55EJQYq2BR6oeTgzVnLxFC7Uf)

Please try that version instead! If moderators see this message, please update
the link!

~~~
Rhapso
+100 awesome for the annotated source. A lot of these demos get released as
minified JS which makes it kinda useless to use them as a guide or hack on
them.

~~~
p2pchatter
Thanks! Exactly what I was thinking and it's much nicer when you can actually
learn from the examples!

The annotated source Rhapso is talking about is here:
[https://ipfs.io/ipfs/QmVUvLMxTEaVBpiQBiBBdnv7ZTwt7pv8BxNhpPC...](https://ipfs.io/ipfs/QmVUvLMxTEaVBpiQBiBBdnv7ZTwt7pv8BxNhpPCMixuRBT/docs/app.html)

------
DennisP
Rather than using a discovery server, couldn't you throw in the web3 library
and use Ethereum for that purpose? You could keep the discovery server as
backup for people not connected to Ethereum nodes, but for those that are
you'd be fully decentralized. To keep things cheap you could use Ethereum's
event logging rather than actually storing data on chain.

In any case, this is great, I've been looking for something like this.

~~~
p2pchatter
Not sure how that would work. You would have to make some transaction on the
Ethereum network for other peers to discover you, correct? That kind of makes
the barrier to entry a lot harder.

On desktop, it's possible to use mDNS et al, we need something similar for
browsers.

Please tell me more how I could use Ethereum for discovery of other peers
though, sounds interesting.

~~~
DennisP
Yes, so it'd only work for people running things like the Metamask browser
plugin. It'd be nifty because it'd be fully decentralized, but for now, using
the discovery server as backup would keep it working for everyone else.

------
fiatjaf
So you write a chat message, store it on IPFS and then send the hash to the
other party? Why don't you just send the message through whatever means you're
sending the hash?

This kind of app doesn't seem like a good fit for the whole IPFS idea. The
same applies to Orbit.

~~~
p2pchatter
No, you clearly didn't read the annotated source that is linked both from the
application and various comments here on this submission.

The chat messages are being sent directly to the other party.

Why is that? I think this app fits very good with IPFS. Same applies to Orbit.

~~~
fiatjaf
So it doesn't use IPFS at all.

------
tlrobinson
It seems like it's repeating old messages over and over, then eventually
crashing.

~~~
sharemywin
mine didn't crash yet, but the repeating of messages was kind of annoying.

------
dranoel0226
this is really cool, thanks! do you happen to know if / when this will work
without a discovery server?

~~~
jaynagpaul
You can run an ipfs node locally if you wish

------
tn_
Just one tiny suggestion, let users create their display name. The hashed
names make it a bit unreadable.

~~~
p2pchatter
Already possible, check out the input in the bottom left. Not very obvious,
but it's there already.

------
QML
IPFS is a protocol for file-sharing, not for file-hosting, right?

~~~
p2pchatter
What is the difference? You can host files on IPFS just as you can share
files.

