SpacingBat3 / WebCord

A Discord and SpaceBar :electron:-based client implemented without Discord API.
MIT License
1.97k stars 99 forks source link
aarch64 app arm arm64 armhf armv7 armv7l discord discord-css discord-theme discord-web electron electron-discord fosscord javascript nodejs spacebar typescript web webapp
🚧️ A major rewrite of the client is being worked on! That means, most efforts around WebCord will be kept at minimum – there might be no time-intensive and major updates done on top of the existing code. However, WebCord should still receive maintenance updates along with new features or improvements that don't cost investing too much of my time.

Znasz 🇵🇱? Przejdź tutaj.

WebCord Logo # WebCord [![CodeQL][codeql-badge]][codeql-url] [![Build][build-badge]][build-url] [![Weblate badge][l10nbadge]][l10n] [![GitHub downloads][dlbadge]][downloads] [![Discord server][discord-badge]][discord-url] A Discord and [Spacebar] client implemented directly without [Discord API][discordapi]. Made in 🇵🇱 with the [Electron][electron] framework.

Philosophy / key features

Nowadays, WebCord is quite complex project; it can be summarized as a pack of security and privacy hardenings, Discord features reimplementations, Electron / Chromium / Discord bugs workarounds, stylesheets, internal pages and wrapped https://discord.com page, designed to conform with ToS as much as it is possible (or hide the changes that might violate it from Discord's eyes). For all features, take a look at Features.md.

WebCord does a lot to improve the privacy of the users. It blocks known tracing and fingerprinting methods, but it does not end on it. It also manages the permissions to sensitive APIs like camera or microphone, sets its own user agent to the one present in Chromium browsers and spoof web API modifications in order to prevent distinguishing it from the real Chrome/Chromium browsers.

WebCord cares a lot about your security. Being fully written in TypeScript, it brings the power of static types to help detecting common bugs without the need of testing the app at runtime. All of this is hardened by ESLint, which forbidds some TypeScript practises like the use of any type and enforces some cosmetic aspects of the code to keep it more consistent.

Unlike the official Discord client, WebCord's policy about Electron also makes it to use the latest major release currently supported and available at the package time. This makes WebCord use more up-to-date Electron releases with more recent Chromium engine.

Built on top Electron and Chromium, WebCord's security is also highly dependant from Chrome's vulnerability rewards program, which is probably one of the most known programs like this when comparing to different popular browser engines choices. Electron is also well-prepared for loading remote content, using their process model to the advantage and different Chromium sandboxing techniques to split Node.js from browser scripts. WebCord also tries its best to follow practises from the Electron#Security.

WebCord can be configured to your needs and the preferences – you can harden it even more by blocking unnecesarry third-party websites in Content Security Policy settings, improve your privacy by blocking typing indicator and much more! Moreover, a support for custom stylesheets is on its way, allowing you to theme WebCord the way you like!

Although Electron is not designed to work on mobile devices, WebCord tries its best to be responsive even on devices with the smaller screens and touch screens. It's still not ideal, but should work for basic Discord usage. However I plan to focus on it someday and to make it look and work closer to the official Discord Android client.

Documentation:

For newcomers I recommend to read at least the FAQ (to fix common issues and not report them as bugs). You may also read Features to know which features have been implemented and are supported. It is strongly advised to read the application license as well.

History

At first, this project was a fork of the Discord-Electron, but then eventually I rewrote it as Electron Discord Web App project, which is now refered to as WebCord.

At its early days, it had a very simple concept: a better web app implementation than Nativefier was, at least in terms of the features. Since I were too young to understand how to keep things private and secure, this project's code was full of flaws. It was like that until 1.x.y, when the privacy and the security of the code has slowly been shaping, with 1.2.0 being a major step forward, since TypeScript was started to being adopted. Later, I've added the default linter to the project's documentation and configured the rules for it and focused on child window design, which added the documentation, settings and about windows to the Discord page. I've then also realized there's a serious issue with the current screen share dialog – it was injected to the page, meaing Discord could technically access the windows' thumbnails and simulate the mouse click events to trigger sharing the screen even without any interaction. This flaw was thankfully fixed thanks to the BrowserViews in more modern WebCord releases.

With the code quality, a new philosophies and goals has shaped for this project – it now approaches to wrap Discord website and develop its own UI (todo) for non-Discord instances primarly based on the Discord API (might decide some day that WebCord will also support other APIs as well). With that, I want to reimplement Discord in a way it is a trully FOSS client, without any risk that users will get banned by either breaking the ToS or being detected as self-bot because of the suspicious use of Discord REST API. This is what WebCord mainly focuses to achieve nowadays.

And it should be said that before I knew much about how Electron does work, @GyozaGuy's project help me to begin on my own with developing a Discord webapp. Without his work, it is unknown whenever I would begin developing WebCord or not.

Wiki pages

Because GitHub Wiki Pages of this project are meant to be maintained by the community, they should be considered as a potentially malicious or misleading source of the information. It is recommended to read the official documentation first before you will proceed reading the community-maintained Wiki pages.

License

This project is redistributed under the terms of MIT License:

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

Want to contribute to my project?

Please take a look at Contributing.md – it describes more about ways of giving your help to improve quality of WebCord. And for some tasks you don't even need to be familiar with programming at all!