A multi-instance, Discord/Spacebar API-compatible chat client

Overview

Contributors Forks Stargazers Issues GPL3 License


Logo

Polyphony

A multi-instance, Discord/Spacebar API-compatible chat client, written in Rust and Svelte (TypeScript) using Tauri.
Explore the docs »

Report Bug · Request Feature

Table of Contents
  1. About The Project
  2. Getting Started
  3. Roadmap
  4. Contributing
  5. License
  6. Contact
  7. Acknowledgments

About The Project

Product Mockup A mockup of the Polyphony client.

Polyphony will be a multi-instance, Discord/Spacebar API-compatible chat client, written in Rust and Svelte (TypeScript) using Tauri. The three goals of this project are ease-of-use, user experience and performance.

Ideally, you will be able to connect to multiple Spacebar instances at the same time and use the client just like you would expect a regular Discord client to work.

Spacebar? What's that?

Go read about the Spacebar project here! Spacebar describes itself as "a free open source selfhostable discord compatible chat, voice and video platform".

(back to top)

Built With

Svelte Rust Typescript

(back to top)

Getting Started

To set up a local development environment, follow these simple steps. This guide assumes you are using Linux.

Prerequisites

Install the rust toolchain and cargo.

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

Install Node.js v19 and yarn

Arch Linux:

sudo pacman -S nodejs yarn

Debian/Ubuntu:

curl -fsSL https://deb.nodesource.com/setup_19.x | sudo -E bash -
sudo apt-get install -y nodejs
sudo npm install -g yarn

Clone this project and install dependencies

git clone https://github.com/polyphony-chat/client.git
cd client
yarn install

You should now be able to run the client with yarn tauri dev from the project root. You can independently build and run the Rust backend with cargo run from the src-tauri directory.

(back to top)

Roadmap

See the open issues for a full list of proposed features (and known issues).

(back to top)

Contributing

Read: Polyphony Design and collaboration guidelines

Contributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are greatly appreciated.

If you have a suggestion that would make this better, please fork the repo and create a pull request. You can also simply open an issue with the tag "enhancement". Don't forget to give the project a star! Thanks again!

If you want to contribute code, please follow these steps:

  1. Find a feature or issue you want to work on. If you want to work on something that is not listed, open an issue and we will discuss it.
  2. Let it be known in the issue that you are working on it. This is to avoid duplicate work, especially since currently this project is still in its early stages and there are not many contributors.
  3. Fork the Project
  4. Create your Feature Branch (git checkout -b feature/AmazingFeature)
  5. Commit your changes (git commit -m 'Add some AmazingFeature')
  6. Push to the Branch (git push origin feature/AmazingFeature)
  7. Open a Pull Request

(back to top)

License

Distributed under the GPLv3 License. See LICENSE.txt for more information.

(back to top)

Contact

[email protected]

Project Link: https://github.com/polyphony-chat/client

(back to top)

You might also like...
Telegram bot API client for Rust
Telegram bot API client for Rust

Frankenstein Telegram bot API client for Rust. It's a complete wrapper for Telegram bot API and it's up to date with version 5.2 of the API. Frankenst

🦀 REST API client implementation for freee, auto-generated from OpenAPI specification.

freee-rs REST API client implementation for freee, auto-generated from OpenAPI specification. Getting Started Add to your Cargo.toml as follows: [depe

Optimistic multi-version concurrency control (MVCC) for main memory databases, written in Rust.

MVCC for Rust This is a work-in-progress the Hekaton optimistic multiversion concurrency control library in Rust. The aim of the project is to provide

store virtually unlimited, large files on discord by splitting them into small chunks

Discord Drive This repo hold an MVP implementation of an concept to store data on discord by dividing them into chunks of 7MB each, which are then upl

SQL database to read and write
SQL database to read and write "discord"

GlueSQL Discord Storage After discussing how CI testing will be managed, we plan to move it upstream. Precautions for use discord ToS https://discord.

Cassandra DB native client written in Rust language. Find 1.x versions on https://github.com/AlexPikalov/cdrs/tree/v.1.x Looking for an async version? - Check WIP https://github.com/AlexPikalov/cdrs-async
Cassandra DB native client written in Rust language. Find 1.x versions on https://github.com/AlexPikalov/cdrs/tree/v.1.x Looking for an async version? - Check WIP https://github.com/AlexPikalov/cdrs-async

CDRS CDRS is looking for maintainers CDRS is Apache Cassandra driver written in pure Rust. 💡 Looking for an async version? async-std https://github.c

CouchDB client-side library for the Rust programming language

Chill Chill is a client-side CouchDB library for the Rust programming language, available on crates.io. It targets Rust Stable. Chill's three chief de

An etcd client library for Rust.

etcd An etcd client library for Rust. etcd on crates.io Documentation for the latest crates.io release Running the tests Install Docker and Docker Com

A easy-use client to influxdb

InfluxDBClient-rs A easy-use client to influxdb Overview This is an InfluxDB driver for Rust. Status This project has been able to run properly, PR is

Comments
  • Backend: Login function

    Backend: Login function

    The backend needs an implemented auth::fosscord_login() function, which can then be called from the frontend using a tauri command. The function should take in a backend::FosscordBackend and on success, return a String which is just the token received from the server, nothing else.

    Status: Accepted Type: Enhancement 
    opened by bitfl0wer 1
  • Remove code duplication in crate::auth::auth

    Remove code duplication in crate::auth::auth

    In crate::auth::auth, we have the register_fosscord and login_fosscord methods. They do almost the exact same thing, which is send a POST request with a json body to an API route, handling any errors that may occur on the way and return an outcome. This code could very easily be put into one method, which would make it re-usable and remove code duplicates :)

    Priority: Low Status: Available Type: Maintenance Difficulty: Trivial 
    opened by bitfl0wer 0
  • List Guilds, Channels and Messages

    List Guilds, Channels and Messages

    When #9 gets completed, we can focus on getting all the users' Guilds, the channels in those guilds, and the messages in these channels. I think some additional input is needed here, as to what exactly "getting" means, where we cache these things, if we even cache these things, and how the frontend will ultimately get this information.

    Status: Blocked Type: Enhancement Type: Question Difficulty: Complex 
    opened by bitfl0wer 0
  • Attach serenity client to FosscordBackend

    Attach serenity client to FosscordBackend

    Once registration and login (#8) have been implemented in the rust backend, we can use the token we get from these functions to create a serenity client, which should do all the heavy lifting of connecting to a websocket etc. for us. The serenity client should be added to the backend::FosscordBackend.

    Status: Available Type: Enhancement Difficulty: Simple 
    opened by bitfl0wer 0
Owner
null
Mycelite is a SQLite extension that allows you to synchronize changes from one instance of SQLite to another.

Mycelite What is Mycelite? Mycelite is a SQLite extension that allows you to synchronize changes from one instance of SQLite to another. Currently, it

Mycelial 16 Jan 2, 2023
RedisLess is a fast, lightweight, embedded and scalable in-memory Key/Value store library compatible with the Redis API.

RedisLess is a fast, lightweight, embedded and scalable in-memory Key/Value store library compatible with the Redis API.

Qovery 145 Nov 23, 2022
A minecraft-like multi version client implemented in Rust.

Leafish Multi-version Minecraft-compatible client written in Rust, forked from Stevenarella. Chat Chat takes place on Matrix and Discord. The channels

null 617 Dec 27, 2022
Garage is a lightweight S3-compatible distributed object store

Garage [ Website and documentation | Binary releases | Git repository | Matrix channel ] Garage is a lightweight S3-compatible distributed object stor

Deuxfleurs 156 Dec 30, 2022
Redis compatible server framework for Rust

Redis compatible server framework for Rust Features Create a fast custom Redis compatible server in Rust Simple API. Support for pipelining and telnet

Josh Baker 61 Nov 12, 2022
Unpack a CircleCI orb.yml into separate files compatible with orb packing

CircleCI Orb Unpacking Tool This CLI tool is designed to facilitate the process of migrating a CircleCI Orb to the Orb Development Kit format, where c

Xavientois 2 Jul 29, 2022
Unpack a CircleCI orb.yml into separate files compatible with orb packing

CircleCI Orb Unpacking Tool This CLI tool is designed to facilitate the process of migrating a CircleCI Orb to the Orb Development Kit format, where c

Voiceflow 2 Oct 18, 2022
Affine-client is a client for AFFINE based on Tauri

Affine Client affine-client is a client for AFFINE based on Tauri Supported Platforms Windows Linux MacOS Download https://github.com/m1911star/affine

Horus 216 Dec 25, 2022
A Rust client for the ElasticSearch REST API

rs-es Introduction An ElasticSearch client for Rust via the REST API. Targetting ElasticSearch 2.0 and higher. Other clients For later versions of Ela

Ben Ashford 218 Dec 27, 2022
An Elasticsearch REST API client for Rust

elastic elastic is an efficient, modular API client for Elasticsearch written in Rust. The API is targeting the Elastic Stack 7.x. elastic provides st

null 249 Oct 18, 2022