SkyChat - Decentralized alternative to Discord powered by Skynet and Akash

A lot of communities rely on using Discord for communication, discussion and support.

Discord however has multiple disadvantages:

  • it is centralized and proprietary, so Discord has the full power over everything happening there

  • it has some privacy issues

  • it’s pretty complicated to export or publish message history

So why do so many communities use Discord?

  • It’s free, server owners can just create a new Discord server easily and without any technical knowledge

  • It’s very convenient, because users can just use one global account for every community and have everything in one place

So let’s introduce SkyChat, a decentralized alternative to Discord that aims to fix these issues, powered by Skynet and Akash!

One account to rule them all

SkyChat uses MySky to let users login in a decentralized way. With MySky, every user fully owns their key pair, which is the root of their decentralized identity. MySky also enables sharing data between different Skynet apps, so for example the profile picture and username you set using MySky is visible in SkyChat, SkyChess or SkyTransfer! You can read more about how MySky works and what it does here: MySky: Your Home on the Global Operating System of the Future | by David Vorick | Sia and Skynet Blog

MySky makes it possible to join multiple SkyChat Servers in a completely decentralized way using the same identity.

Privacy and reliability

SkyChat never contacts another user or SkyChat server directly, it always writes and reads the current state from and to their preferred Skynet portal only. This also has the advantage, that all messages and users state is kept online, even if all moderators and admins of a SkyChat server quit and/or stop the Akash node running it. The Akash node is only used to mutate the state of a SkyChat channel, so without it being active, everything basically stays the same. This also makes it pretty reliable, because even in case of an outage, all existing messages are still available.

And because all state is saved on Skynet, the container running on Akash does not need to save any state! It just needs some environment variables with user-generated secret keys and some basic configuration, so it can be started at a new provider or location very fast in case something happens.

Direct messages are not yet implemented, but they will use end-to-end-encryption to make sure that nobody can read them.

It’s free or very cheap

One difference to other self-hosted chat tools like Matrix or Zulip I already mentioned earlier, is that clients never directly connect to a SkyChat server running on Akash or somewhere else. This makes things like DDoS attacks impossible and allows someone who wants to create a SkyChat server to just run the server software on their own device or hardware without having to expose it to the internet.

And when wanting 24/7 uptime for a SkyChat server, Akash is the easiest choice! Just deploy the SkyChat server container using Akash and the SkyChat server will run as expected - for very cheap. Even for 1000+ users, the Akash node needs next to no bandwidth or power, because all the media content is directly handled by Skynet and there are no direct client connections made to it.

Scalable

Usually when creating a chat server, the work needed to keep it running does get a lot bigger with every user and channel added. Because all the client-server interaction happens using Skynet, the SkyChat server only needs to listen to (n + 1) SkyDB entries (n being the joined user count) and only write to SkyDB when a new user joins the server or a message is sent. “Approving and sending” a message is always the same work for the server, it doesn’t matter if there are 10 or 10000 users who are part of the SkyChat server.

Interoperability

The SkyChat protocol uses the Feed DAC data structures from SkyStandards: skystandards/draft-01 at main · SkynetLabs/skystandards · GitHub

This means, that all Skynet apps supporting the Feed DAC can display content from SkyChat! So you can for example use a SkyChat channel to publish your blog posts and then someone can follow the channel on Rift and see all the messages in their feed!

It should also be pretty easy to create a Matrix bridge in the future.

Technologies used

Current state

A working version with all basic features is deployed and can be tried here: https://chatbubble.hns.siasky.net/

Or you can use it integrated in the experimental new “SkynetOS” interface: http://skappy.hns.siasky.net/

The server for the SkyChat test server is currently running on Akash 24/7.

Future plans

Implement more features, for example contacts, direct messages, dark mode, reactions or file transfer.

Thanks for reading, feel free to ask if you have any questions or feedback.

7 Likes

Wow, this is really interesting and cool. How long have you worked on this? When I first talked to David Vorick and Greg Osuri about this, a decentralized chat was one of the ideas we discussed.

1 Like

the basic idea and app is already some weeks old, but the initial concept was to let the “server-side” component run in the web browser or on the device of an admin/moderator of a chat server. But this required atleast one moderator to be online 24/7 to keep the chat online. So Akash was a great way to make it more reliable and easier to use, so I spent the last days making the server “production-ready”, creating a Docker image and deploying it on Akash.

I just added some docs on how to deploy a SkyChat server on Akash: GitHub - redsolver/skychat-server
This repo will also contain the source code soon.

I wonder if SkyChat could leverage some of the open source code from Signal.

Interesting that there are several forks of Signal:

https://community.e.foundation/t/fork-of-signal-cableim/10036

Signal is focused on end-to-end-encrypted communication, while SkyChat and Discord are focused on community discussion and communication, more similar to a forum than a private chat room. Because SkyChat servers are designed to support 1000+ users in a single channel and joining a server is easy, encrypting messages doesn’t make sense. But the direct message feature in SkyChat will be end-to-end-encrypted and likely based on the Matrix protocol which itself uses most of the encryption tech from Signal iirc.

1 Like

I love seeing a project in this challenge with roots in the Skynet community and which really understands the potential (and limitations) of Skynet.

Utilizing Akash not to “run” the entires service, but to maintain a branch of it is very cool. It encourages community leaders to deploy their own distributed instances and could eventually do so using a web front-end. It’s a very cool solution that leaves you not overly relying on the node or trusting it for much.

Great work, and I hope to see it keep growing!

2 Likes